Kaggle의 훈련/테스트 세트에서 다항식 NB 분류기를 시도 할 때 홀수 ValueError가 발생합니다. 내 (연습) 목표는 승객이 이름에 따라 남성인지 여성인지를 예측하여 CountVectorizer로 전달하는 것입니다.MultinomialNB : ValueError
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-97-ad69ee9ed02b> in <module>()
12
13 # classifier prediction - for test set now!
---> 14 predict_Test = nb.predict(name_test)
15 score = accuracy_score(sex_test, predictions, normalize=True)
16 print score
C:\Users\Evan Chow\Anaconda\lib\site-packages\sklearn\naive_bayes.pyc in predict(self, X)
61 Predicted target values for X
62 """
---> 63 jll = self._joint_log_likelihood(X)
64 return self.classes_[np.argmax(jll, axis=1)]
65
C:\Users\Evan Chow\Anaconda\lib\site-packages\sklearn\naive_bayes.pyc in _joint_log_likelihood(self, X)
455 """Calculate the posterior log probability of the samples X"""
456 X = atleast2d_or_csr(X)
--> 457 return (safe_sparse_dot(X, self.feature_log_prob_.T)
458 + self.class_log_prior_)
459
C:\Users\Evan Chow\Anaconda\lib\site-packages\sklearn\utils\extmath.pyc in safe_sparse_dot(a, b, dense_output)
81 return ret
82 else:
---> 83 return np.dot(a, b)
84
85
ValueError: matrices are not aligned
내 코드 : 또한
rawDataTrain = pd.read_csv('train.csv')
trainData = pd.concat([rawDataTrain.Name, rawDataTrain.Sex], axis=1)
# get name, sex training data
cv_train = CountVectorizer(min_df = 0)
cv_train.fit(trainData.Name)
name_train = cv_train.transform(trainData.Name).toarray() # name_train
sex_train = np.asarray(trainData.Sex, dtype='S') # name_test
# get name, sex testing data
rawDataTest = pd.read_csv('test.csv')
testData = pd.concat([rawDataTest.Name, rawDataTest.Sex], axis=1)
cv_test = CountVectorizer(min_df = 0)
cv_test.fit(testData.Name)
name_test = cv_test.transform(testData.Name).toarray() # name test
sex_test = np.asarray(testData.Sex, dtype='S') # sex test
# classifier prediction - test quickly on training set. you should get 1.0
predictionsTrain = nb.predict(name_train)
scoreTrain = accuracy_score(sex_train, predictionsTrain, normalize=True)
print scoreTrain # returns probability of 1.0
# classifier prediction - this is what goes weird!
predict_Test = nb.predict(name_test)
score = accuracy_score(sex_test, predictions, normalize=True)
print score
, name_train의 치수 name_test, sex_train 및 sex_test은 :
(891, 1509) (418, 825 (0120) name_train과 name_test의 첫 번째 좌표는 동일해야하지만, 그렇다면 예측은 훈련 세트와 동일한 샘플 수의 행렬에서만 작동합니다! 이 ValueError를 제거하는 방법에 대한 의견이 있으십니까?
당신이 말한대로, 훈련 CV를 테스트 세트에 맞추기보다 트레이닝과 테스트를 위해 별도의 CountVectorizer를 만들고 피팅하는 것으로 나타났습니다. 감사! – covariance