【问题标题】:scikit-learn classifiers give varying results when one non-binary feature is added当添加一个非二进制特征时,scikit-learn 分类器会给出不同的结果
【发布时间】:2017-08-04 02:52:59
【问题描述】:

我正在针对二进制分类问题评估一些机器学习模型,并在添加一个非二进制特征时遇到奇怪的结果。

我的数据集由推文和与它们相关的一些其他值组成,因此主要特征向量是使用 scikit-learn 的 Tf-idf Vectoriser 对推文和 SelectKBest 特征选择生成的稀疏矩阵(5000 列)。

我还有两个要添加的功能,它们都是 1 列密集矩阵。我将它们转换为稀疏并使用 scipy 的 hstack 函数将它们添加到主要特征向量中。这些功能中的第一个是二进制的,当我只添加一个时,一切都很好,我得到了大约 60% 的准确度。然而,第二个特征是整数值,添加它会导致不同的结果。

我正在测试逻辑回归、SVM (rbf) 和多项朴素贝叶斯。添加最终特征时,SVM 准确度提高到 80%,但对于 Logistic 回归,它现在总是预测相同的类别,而且 MNB 也非常偏向于该类别。

SVM confusion matrix
[[13112  3682]
 [ 1958  9270]]

MNB confusion matrix
[[13403  9803]
 [ 1667  3149]]

LR confusion matrix
[[15070 12952]
 [    0     0]]

谁能解释为什么会这样?我不明白为什么这个额外的功能会导致两个分类器有效地变得多余,但对另一个分类器的改进如此之多?谢谢!

【问题讨论】:

  • 该功能的类别是否高度不平衡?
  • 不,对于我测试过的所有数据,这些类都非常平衡,它总是给出这样的结果

标签: python machine-learning scipy scikit-learn svm


【解决方案1】:

声音,如您的额外功能是非线性的。 NB和LR都假设该功能是线性的。 SVM仅假定变量是线性可分离的。直观地这意味着SVM为您的变量提供“截止”值,即SVM正在优化。如果您仍然想要使用LR或NB,则可以尝试将此变量转换为使其线性或否则您可以尝试将其转换为基于此阈值的二进制指示因素,并且您可能会提高您的模型的执行。

看看https://stats.stackexchange.com/questions/182329/how-to-know-whether-the-data-is-linearly-separable以进一步阅读。

【讨论】:

    猜你喜欢
    • 2016-12-04
    • 2015-01-12
    • 1970-01-01
    • 2021-03-26
    • 2018-10-14
    • 1970-01-01
    • 2014-02-17
    • 2013-10-30
    • 2020-09-17
    相关资源
    最近更新 更多