Scikit Learn ValueError: найден массив с dim 3. Ожидается оценщик <= 2 - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть набор данных об обучении из 144 отзывов учеников с 72 положительными и 72 отрицательными отзывами соответственно.Набор данных имеет два атрибута, а именно данные и цель, которые содержат предложение и настроение (положительное или отрицательное) соответственно.Набор данных тестирования содержит 106 немаркированных отзывов.Рассмотрим следующий код:

import pandas as pd
feedback_data = pd.read_csv('output_svm.csv')
print(feedback_data)


data    target
0      facilitates good student teacher communication.  positive
1                           lectures are very lengthy.  negative
2             the teacher is very good at interaction.  positive
3                       good at clearing the concepts.  positive
4                       good at clearing the concepts.  positive
5                                    good at teaching.  positive
6                          does not shows test copies.  negative
7                           good subjective knowledge.  positive
8                           good communication skills.  positive
9                               good teaching methods.  positive
10   posseses very good and thorough knowledge of t...  positive

feedback_data_test = pd.read_csv('classified_feedbacks_test.csv')
print(feedback_data_test)

          data  target
0                                       good teaching.     NaN
1                                         punctuality.     NaN
2                    provides good practical examples.     NaN
3                              weak subject knowledge.     NaN
4                                   excellent teacher.     NaN
5                                         no strength.     NaN
6                      very poor communication skills.     NaN
7                      not able to clear the concepts.     NaN
8                                            punctual.     NaN
9                             lack of proper guidance.     NaN
10                                  fantastic speaker.     NaN
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(binary = True)
ct = CountVectorizer(binary= True)
cv.fit(feedback_data['data'].values)
ct.fit(feedback_data_test['data'].values)
X = feedback_data['data'].apply(lambda X : cv.transform([X])).values
X = list([list(x.toarray()[0]) for x in X])
X_test = feedback_data_test['data'].apply(lambda X_test : ct.transform([X_test])).values
X_test = list([list(x.toarray()[0]) for x in X_test])




from sklearn import svm
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
target = [1 if i<72 else 0 for i in range(144)]
X_train, X_val, y_train, y_val = train_test_split(X, target, train_size = 0.50)
clf = svm.SVC(kernel = 'linear', gamma = 0.001, C = 0.05)
clf.fit(X, target)
#The below line gives error
print("Accuracy = %s" %accuracy_score(target,clf.predict([X_test])) )

Я не знаю, что не так.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 27 февраля 2019

ошибка, которую вы получаете не в количестве сэмплов, а в количестве функций, и это происходит из строки кода:

cv = CountVectorizer(binary = True)
ct = CountVectorizer(binary= True)
cv.fit(feedback_data['data'].values)
ct.fit(feedback_data_test['data'].values)

Вам необходимо закодировать тест и обучитьтаким же образом

Вы устанавливаете Count Vectorizer на все данные, а затем применяете его к тестированию и обучению, если нет, то у вас нет одного и того же словаря и, следовательно, не одинакового кодирования.

cv = CountVectorizer(binary = True)
cv.fit(np.concatenate((feedback_data['data'].values,feedback_data_test['data'].values))

РЕДАКТИРОВАТЬ

вы просто не используете ct, только cv

X = feedback_data['data'].apply(lambda X : cv.transform([X])).values
X = list([list(x.toarray()[0]) for x in X])
X_test = feedback_data_test['data'].apply(lambda X_test :cv.transform([X_test])).values
X_test = list([list(x.toarray()[0]) for x in X_test])
...