Здравствуйте, я пытаюсь следовать за этим из Kaggle, но я продолжаю получать ValueError: setting an array element with a sequence
Моя проблема в том, что я не получаю эту ошибку, когда использую другой аналогичный кадр данных. Позвольте мне объяснить:
Это код:
class MeanEmbeddingTransformer(TransformerMixin):
def __init__(self):
self._vocab, self._E = self._load_words()
def _load_words(self):
E = {}
vocab = []
with open('/home/Documents/Glove/glove.6B.50d.txt', 'r',
encoding="utf8") as file:
for i, line in enumerate(file):
l = line.split(' ')
if l[0].isalpha():
v = [float(i) for i in l[1:]]
E[l[0]] = np.array(v)
vocab.append(l[0])
return np.array(vocab), E
def _get_word(self, v):
for i, emb in enumerate(self._E):
if np.array_equal(emb, v):
return self._vocab[i]
return None
def _doc_mean(self, doc):
return np.mean(np.array([self._E[w.lower().strip()] for w in doc if w.lower().strip() in self._E]), axis=0)
def fit(self, X, y=None):
return self
def transform(self, X):
return np.array([self._doc_mean(doc) for doc in X])
def fit_transform(self, X, y=None):
return self.fit(X).transform(X)
def plot_roc(clf, X_test, y_test):
y_pred = clf.predict(X_test)
fpr, tpr, _ = roc_curve(y_test, y_pred)
plt.plot(fpr, tpr)
plt.xlabel('FPR')
plt.ylabel('TPR')
def print_scores(clf, X_train, y_train, X_test, y_test):
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
print('F1 score: {:3f}'.format(f1_score(y_test, y_pred)))
print('AUC score: {:3f}'.format(roc_auc_score(y_test, y_pred)))
train_data = pd.read_csv('train.csv', nrows=2000)
df = pd.read_json('/home/PycharmProjects/Dataset/Balanced/balanced_books.json')
X = df['review_text'].values
y = df['label'].values
X_csv = train_data['project_essay_1'].values
Я создаю X
и X_csv
, чтобы показать, что все работает для X_csv
, но я получаю ошибку для X
Это вывод, который я получаю для print(X[:2])
[«У этой книги есть свои плюсы, если она поможет вам
«фаталистический взгляд на консервативность выражен Кирком»]
Это вывод для X_csv
['Большинство моих учеников из детских садов живут в семьях с низким доходом и
считаются \ Atrisk \ эти дети "наша начальная школа
культурно богатая школа с разнообразным населением студентов в prek
до шестого класса \ r \ nour title ']
def tokenize_and_transform(X):
token = [word_tokenize(doc) for doc in X]
met = MeanEmbeddingTransformer()
X_transform = met.fit_transform(token)
return X_transform
#Works
X_transform = tokenize_and_transform(X_csv)
#Does not work
X_transform = tokenize_and_transform(X)
X_train, X_test, y_train, y_test = train_test_split(X_transform,
y, random_state=0)
lr = LogisticRegression()
print_scores(lr, X_train, y_train, X_test, y_test)
plot_roc(lr, X_test, y_test)
Итак, некоторые исследования показывают, что эта проблема является результатом передачи массивов неправильной формы для подгонки, но вещь отлично работает для X_csv
, но не работает для X
, и я понятия не имею, почему. Любая помощь будет оценена. Мне нужно, чтобы это работало для X
Это полная трассировка ошибок:
>/home/.local/lib/python3.6/site-packages/numpy/core/fromnumeric.py:3118:
> RuntimeWarning: Mean of empty slice. out=out, **kwargs)
> /home/.local/lib/python3.6/site-packages/numpy/core/_methods.py:85:
> RuntimeWarning: invalid value encountered in double_scalars ret =
> ret.dtype.type(ret / rcount)
> /home/uttam/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:433:
> FutureWarning: Default solver will be changed to 'lbfgs' in 0.22.
> Specify a solver to silence this warning. FutureWarning) Traceback
> (most recent call last): File
> "/home/uttam/PycharmProjects/sci-kit_Embeddings/test.py", line 165, in
> <module>
> print_scores(lr, X_train, y_train, X_test, y_test) File "/home/PycharmProjects/sci-kit_Embeddings/test.py", line 81, in
> print_scores
> clf.fit(X_train, y_train) File "/home/.local/lib/python3.6/site-packages/sklearn/linear_model/logistic.py",
> line 1288, in fit
> accept_large_sparse=solver != 'liblinear') File "/home/.local/lib/python3.6/site-packages/sklearn/utils/validation.py",
> line 756, in check_X_y
> estimator=estimator) File "/home/.local/lib/python3.6/site-packages/sklearn/utils/validation.py",
> line 527, in check_array
> array = np.asarray(array, dtype=dtype, order=order) File "/home/.local/lib/python3.6/site-packages/numpy/core/numeric.py",
> line 538, in asarray
> return array(a, dtype, copy=False, order=order) ValueError: setting an array element with a sequence.
>
> Process finished with exit code 1
Редактировать: Если удалить предварительную обработку для X
, X будет:
[«У этой книги есть свои плюсы. Во всяком случае, она поможет вам разобраться»
«Фаталистический взгляд на консервативность выражен Кирком».
Я вижу, что первый элемент находится под "", а второй под ", может быть, это что-то?
Edit2: я проверил, и размер X_transform
отличается для X
и X_csv
. Это (2000, 50) для X_csv
, тогда как (2000,) для X
. Это, вероятно, вызывает это, но я понятия не имею, что вызывает это. Пожалуйста, помогите