ValueError: установка элемента массива с последовательностью для одного кадра данных, но не для другого аналогичного - PullRequest
1 голос
/ 20 марта 2019

Здравствуйте, я пытаюсь следовать за этим из 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. Это, вероятно, вызывает это, но я понятия не имею, что вызывает это. Пожалуйста, помогите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...