2015-05-17 21 views
0

我創建了一個使用python進行文本分類的模型。我有CountVectorizer,它產生了2034行和4063列(唯一字)的文檔術語矩陣。我保存了用於新測試數據的模型。我的新測試數據CountVectorizer矩陣因新分類的測試數據而異?

test_data = ['Love', 'python', 'every','time'] 

但問題是我把上面的測試數據標記轉換成了一個特徵向量,但它的形狀不同。因爲模型期望4063矢量。我知道如何解決它通過CountVectorizer的詞彙和搜索測試數據中的每個令牌並將其放入該索引。但是在scikit-learn中有沒有簡單的方法來處理這個問題。

回答

0

嘗試使用:

test_features = inverse_transform(test_data) 

這應該回報你,你希望的東西。

3

您不應該在測試數據上安裝一個新的CountVectorizer,您應該使用適合於訓練數據的一個,並在其上調用transfrom(test_data)

+0

Muller - 嘿,我完全明白你的意思。從sklearn.feature_extraction.text導入CountVectorizer count_vect = CountVectorizer() train_data_features = count_vect.fit_transform(train_data)所以,如果一個新的數據來說「我愛蟒蛇這麼多」,我需要transorm成相同的形狀模型的行數與之前的詞彙表相同。請告訴我該怎麼做。 –

+2

count_vect.transform([「我愛蟒蛇這麼多」])。 –

0

有兩種方法來解決這個

1.您可以使用您用您的火車功能,這樣

cv = CountVectorizer(parameters desired) 

X_train = cv.fit_transform(train_data) 

X_test = cf.transform(test_data) 

2.您還可以科瑞相同CountVectorizer另一個CountVectorizer,如果你真的想(但不建議,因爲你會浪費空間,你仍然想爲你的簡歷使用相同的參數),並使用相同的功能。

cv_train = CountVectorizer(parameters desired) 

X_train = cv_train.fit_transform(train_data) 

cv_test = CountVectorizer(vocabulary=cv_train.get_feature_names(),desired params) 

X_test = cv_test.fit_transform(test_data)