使用scikit-learn

时间:2015-09-22 16:38:19

标签: machine-learning scikit-learn cross-validation

您是否首先使用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 个答案:

答案 0 :(得分:1)

进行特征选择,然后对这些特征进行交叉验证有时在文本数据上很常见,但不太可取。这可能导致过度拟合,交叉验证程序可能会高估您的真实准确性。

首先进行特征选择时,该feauter选择过程必须查看 all 数据。交叉验证的目的是隐藏其他的1倍。通过首先执行FS,您将一些数据知识泄露给其他折叠。