2015-09-22 39 views
0

您是否首先使用scikit-learn進行交叉驗證,然後進行特徵提取或以其他方式對文本文檔進行分類?使用scikit-learn對文本文檔進行分類時的交叉驗證

這裏是我的管道:

union = FeatureUnion(
transformer_list = [ 
('tfidf', TfidfVectorizer()), 
('featureEx', FeatureExtractor()), 
('spell_chker', Spellingchecker()), 
], n_jobs = -1) 

我按以下方式做,但我不知道我是否應該先提取特徵並做交叉驗證。在此示例中,X是文檔列表,y是標籤。

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size= 0.2) 

X_train = union.fit_transform(X_train) 
X_test = union.transform(X_test) 

ch2 = SelectKBest(f_classif, k = 7000) 
X_train = ch2.fit_transform(X_train, y_train) 
X_test = ch2.transform(X_test) 

clf = SVC(C=1, gamma=0.001, kernel = 'linear', probability=True).fit(
X_train , y_train) 

print("classification report:") 
y_true, y_pred = y_test, clf.predict(X_test) 
print(classification_report(y_true, y_pred)) 
print() 

回答

1

對文本數據進行特徵選擇然後對這些特徵進行交叉驗證對於文本數據有時很常見,但它不太理想。這可能會導致過度擬合,交叉驗證程序可能會高估您的真實準確性。

當您首先進行特徵選擇時,該特徵選擇過程必須查看全部的數據。交叉驗證的重點在於隱藏其他方面的1倍。通過首先執行FS,可以將其中一些數據知識泄露給其他摺疊。

+0

問題是特徵提取與交叉驗證,而不是特徵選擇與交叉驗證 – user2161903

+0

同樣適用。術語頻率和逆文檔頻率(Tfidf矢量器中的TF和IDF)包含所有文檔的格式。我只是用了一個不同的術語。 –

相關問題