【问题标题】:Cross validation in classifying text documents using scikit-learn使用 scikit-learn 对文本文档进行分类时的交叉验证
【发布时间】:2015-12-19 17:59:19
【问题描述】:

在使用 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()

【问题讨论】:

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


    【解决方案1】:

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

    当您首先进行特征选择时,该特征选择过程必须查看所有数据。交叉验证的重点是向其他人隐藏 1 折。通过首先执行 FS,您会将一些数据知识泄漏到其他折叠处。

    【讨论】:

    • 问题是特征提取与交叉验证,而不是特征选择与交叉验证
    • 同样适用。词频和逆文档频率(Tfidf 向量化器中的 TF 和 IDF)包含所有文档的形成。我只是用了一个不同的术语。
    猜你喜欢
    • 2017-04-12
    • 2015-09-04
    • 2014-10-02
    • 2021-10-25
    • 1970-01-01
    • 2016-05-16
    • 2018-03-30
    • 2016-04-25
    • 2017-08-08
    相关资源
    最近更新 更多