исключение «установка элемента массива с последовательностью» при вызове fit () - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь выполнить двоичную классификацию, в которой входные данные (функции) представляют собой предложение и некоторые целочисленные значения. Я преобразовываю предложение в вектор tfidf, прежде чем передать его в классификатор.

Когда я вызываю метод 'fit', я сталкиваюсь с исключением "ValueError: установка элемента массива с последовательностью"

Я создал пример программы для демонстрации ошибки:

        data = {'xMessage': ['There was a farmer who had a dog',
                             'The mouse ran up the clock',
                             'Mary had a little lamb',
                             'The itsy bitsy spider',
                             'Brother John, Brother John! Morning bells are ringing!',
                             'My dame has lost her shoe',
                             'All the kings horses and all the Kings men',
                             'Im a little teapot',
                             'Jack and Jill went up the hill',
                             'How does your garden grow?'],
                'x01': [20, 21, 19, 18, 34, 22, 33, 22, 11, 32],
                'x02': [0, 10, 10, 12, 34, 43, 12, 0, 0, 54],
                'y': [0, 1, 0, 1, 0, 0, 1, 1, 0, 0]
                }
        self.df = pd.DataFrame(data)
        self.train, self.test = train_test_split(self.df, test_size=0.3, shuffle=True)

        vec = TfidfVectorizer()
        vec.fit(self.df.xMessage)
        transformTrain = vec.transform(self.train.xMessage)
        self.train['messageVect'] = list(transformTrain)
        transformTest = vec.transform(self.test.xMessage)
        self.test['messageVect'] = list(transformTest)

        self.X_train = self.train[['messageVect',
                                   'x01', 'x02']]
        self.X_test = self.test[['messageVect',
                                 'x01', 'x02']]
        self.y_train = self.train['y']
        self.y_test = self.test['y']

        model = GaussianNB()
        model.fit(self.X_train,self.y_train)
        predicted= model.predict(self.X_test, self.y_test)
        y_true, y_pred = self.y_test, model.predict(self.X_test)
        print(classification_report(y_true, y_pred))

Я новичок в этом, поэтому любая помощь будет оценена.

Спасибо!

1 Ответ

0 голосов
/ 09 июня 2019

Итак, я смог решить проблему (или я надеюсь, что я сделал).Рабочий код ниже.Дайте мне знать, если это может быть улучшено!

        data = {'xMessage': ['There was a farmer who had a dog',
                         'The mouse ran up the clock',
                         'Mary had a little lamb',
                         'The itsy bitsy spider',
                         'Brother John, Brother John! Morning bells are ringing!',
                         'My dame has lost her shoe',
                         'All the kings horses and all the Kings men',
                         'Im a little teapot',
                         'Jack and Jill went up the hill',
                         'How does your garden grow?'],
            'x01': [20, 21, 19, 18, 34, 22, 33, 22, 11, 32],
            'x02': [0, 10, 10, 12, 34, 43, 12, 0, 0, 54],
            'y': [1, 1, 0, 1, 0, 0, 1, 1, 1, 1]
            }

    df=pd.DataFrame(data)

    vec = TfidfVectorizer()
    df_text = pd.DataFrame(vec.fit_transform(df['xMessage']).toarray())
    self.X_train,self.X_test, self.y_train, self.y_test = train_test_split(pd.concat([df[['x01','x02']],df_text],axis=1),df[['y']], test_size=0.3, shuffle=True)

    model = GaussianNB()
    model.fit(self.X_train,self.y_train)
    y_true, y_pred = self.y_test, model.predict(self.X_test)
    print(classification_report(y_true, y_pred))

Примечание: Этот пост оказал огромную помощь.

...