sklearn 特征不影响准确率

我最近开始使用 sklearn 进行机器学习。在使用一些数据后,我注意到无论我删除还是添加特征,准确率都没有变化(一直停留在 0.66668208448967)。换句话说

这段代码会输出 0.66668208448967

为了更好地说明我的问题,我在 CSV 文件中添加了一列,全部是 0(我将这一列命名为 zeros)。在将 X = data[["x","y"]] 更改为 X = data[["zeros"]] 后,我的代码变成了这样。

它仍然输出相同的分数 0.66668208448967

此时,我假设它仍然在使用另外两列 xy,但我不明白为什么。有人知道问题出在哪里吗?

非常感谢您的帮助。

这是 CSV 文件的一小部分。

0   44600  yes12  41700  no574 14500  no

当我打印 data.dtypes 时,我得到以下结果:

Q + ans                    int64Q + ans broken search      int64Bing total Search          int64mean1                    float64mean2                    float64zeros                      int64correct                    int64dtype: object

当我打印 data.describe() 时,我得到以下结果:

          Q + ans  Q + ans broken search  Bing total Search       mean1  \count  477.000000             477.000000       4.770000e+02  477.000000   mean     3.972746              30.408805       3.661450e+06    3.972746   std     12.112970             133.128478       1.555090e+07    7.292793   min      0.000000               0.000000       0.000000e+00    0.000000   25%      0.000000               0.000000       8.110000e+04    0.000000   50%      0.000000               0.000000       3.790000e+05    1.333333   75%      2.000000               4.000000       2.000000e+06    5.333333   max    162.000000            1908.000000       2.320000e+08   60.666667                   mean2  zeros     correct      count  477.000000  477.0  477.000000      mean    30.272537    0.0    0.333333      std     76.365587    0.0    0.471899      min      0.000000    0.0    0.000000      25%      0.000000    0.0    0.000000      50%      1.666667    0.0    0.000000      75%     21.000000    0.0    1.000000      max    636.666667    0.0    1.000000  

回答:

您的问题在于“correct”这一列。您提供了字符串(“yes”和“no”),而期望的是数字。

例如,将所有“yes”替换为1,将所有“no”替换为0,然后再试一次。

请看以下最小示例:

test.csv:

x,y,correct,zeros1,1,1.0,02,2,0.0, 01,2,0.0,03,1,1.0,03,1,1.0,04,2,0.0, 05,2,0.0,06,1,1.0,07,1,1.0,08,2,0.0, 09,2,0.0,010,1,1.0,011,1,1.0,012,1,1.0,013,1,1.0,014,1,1.0,015,1,1.0,016,1,1.0,0

python 文件的内容:

尝试将 X = data[["x","y"]] 替换为 X = data[["zeros"]],并注意差异!

从您的数据统计中我们可以了解到,您的数据集中有 477 个样本中的 318 个属于 0(或“no”)组。这些是 2/3 或 0.666...。因此,如果您的模型无法从提供的特征中学习任何东西,它将始终输出零(因为所有系数都是零)。因此,对于任何输入,预测的类别将是 0(或“no”)。这就是为什么您总是得到相同的分数:模型总是预测 0,而您的数据中有 2/3 属于零类,所以您的模型在 66% 的情况下是正确的。

使用我提供的数据样本,您会发现使用“x”和“y”列与使用“zeros”列确实有区别。在第一种情况下,我们得到超过 72% 的分数。如果我们只使用无意义的“zeros”,我们会得到 66%,因为数据集的类别分布。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注