当添加一个非二进制特征时,scikit-learn 分类器会给出不同的结果
scikit-learn classifiers give varying results when one non-binary feature is added
我正在针对二进制 classification 问题评估一些机器学习模型,并在添加一个非二进制特征时遇到奇怪的结果。
我的数据集由推文和一些与它们相关的其他值组成,因此主要特征向量是一个稀疏矩阵(5000 列),使用 scikit-learn 的 Tf-idf Vectoriser 对推文和 SelectKBest 特征选择生成。
我还有两个要添加的特征,它们都是 1 列密集矩阵。我将它们转换为稀疏并使用 scipy 的 hstack 函数将它们添加到主特征向量中。这些特征中的第一个是二元的,当我只添加一个时,一切都很好,我得到了大约 60% 的准确度。然而,第二个特征是整数值,添加它会导致不同的结果。
我正在测试逻辑回归、SVM (rbf) 和多项朴素贝叶斯。添加最终特征时,SVM 准确度增加到 80%,但对于逻辑回归,它现在总是预测相同的 class,并且 MNB 也非常严重地偏向 class。
SVM confusion matrix
[[13112 3682]
[ 1958 9270]]
MNB confusion matrix
[[13403 9803]
[ 1667 3149]]
LR confusion matrix
[[15070 12952]
[ 0 0]]
谁能解释为什么会这样?我不明白为什么这个额外的功能会导致两个 classifiers 有效地变得多余但另一个却改进了这么多?谢谢!
听起来你的额外特征是非线性的。 NB 和 LR 都假设特征是线性的。 SVM 只假设变量是线性可分的。直观上,这意味着 SVM 正在优化的变量有一个 "cut-off" 值。如果您仍然想使用 LR 或 NB,您可以尝试将此变量转换为线性,或者您可以尝试将其转换为基于此阈值的二进制指标变量,您可能会提高模型的性能。
查看 https://stats.stackexchange.com/questions/182329/how-to-know-whether-the-data-is-linearly-separable 进一步阅读。
我正在针对二进制 classification 问题评估一些机器学习模型,并在添加一个非二进制特征时遇到奇怪的结果。
我的数据集由推文和一些与它们相关的其他值组成,因此主要特征向量是一个稀疏矩阵(5000 列),使用 scikit-learn 的 Tf-idf Vectoriser 对推文和 SelectKBest 特征选择生成。
我还有两个要添加的特征,它们都是 1 列密集矩阵。我将它们转换为稀疏并使用 scipy 的 hstack 函数将它们添加到主特征向量中。这些特征中的第一个是二元的,当我只添加一个时,一切都很好,我得到了大约 60% 的准确度。然而,第二个特征是整数值,添加它会导致不同的结果。
我正在测试逻辑回归、SVM (rbf) 和多项朴素贝叶斯。添加最终特征时,SVM 准确度增加到 80%,但对于逻辑回归,它现在总是预测相同的 class,并且 MNB 也非常严重地偏向 class。
SVM confusion matrix
[[13112 3682]
[ 1958 9270]]
MNB confusion matrix
[[13403 9803]
[ 1667 3149]]
LR confusion matrix
[[15070 12952]
[ 0 0]]
谁能解释为什么会这样?我不明白为什么这个额外的功能会导致两个 classifiers 有效地变得多余但另一个却改进了这么多?谢谢!
听起来你的额外特征是非线性的。 NB 和 LR 都假设特征是线性的。 SVM 只假设变量是线性可分的。直观上,这意味着 SVM 正在优化的变量有一个 "cut-off" 值。如果您仍然想使用 LR 或 NB,您可以尝试将此变量转换为线性,或者您可以尝试将其转换为基于此阈值的二进制指标变量,您可能会提高模型的性能。
查看 https://stats.stackexchange.com/questions/182329/how-to-know-whether-the-data-is-linearly-separable 进一步阅读。