机器学习算法的准确性是否独立于特征?

人工智能 机器学习
2021-10-30 12:47:41

我一直在对几个数据集进行试验,并在实现 ML 时发现了一些非常奇怪的东西。
我会在代码之后解释......

import numpy as np
from sklearn import datasets
iris = datasets.load_iris()

# 4 features in np array - 150 rows

case = 1        # change cases to see variation

if case == 1:   # first feature deleted
    iris.data = np.delete(iris.data,0, 1)

if case == 2:   # first 2 features deleted
    iris.data = np.delete(iris.data,0, 1)
    iris.data = np.delete(iris.data,0, 1)

if case == 3:   # first 3 features deleted (1 feature left)
    iris.data = np.delete(iris.data,0, 1)
    iris.data = np.delete(iris.data,0, 1)
    iris.data = np.delete(iris.data,0, 1)

if case == 4:   # only second feature deleted from np array
    iris.data = np.delete(iris.data,1, 1)

if case == 5:   # only third feature deleted from np array
    iris.data = np.delete(iris.data,2, 1)

if case == 6:   # only last feature deleted from np array
    iris.data = np.delete(iris.data,3, 1)

# print iris.data
# exit()

from sklearn.naive_bayes import GaussianNB
gnb = GaussianNB()
pred = gnb.fit(iris.data, iris.target).predict(iris.data)
# pred = gnb.fit(iris.data, iris.target).predict(test_data)

from sklearn.metrics import accuracy_score
print accuracy_score(iris.target, pred)

我正在使用来自 sklearn 的基本 Fisher 鸢尾花数据集,它有 150 行和 4 列(特征)。
使用训练数据作为测试数据。

所以我尝试删除一些功能,看看准确性是否发生了变化。我认为会的。
但是直到 case 123,我分别删除了 1 、 2 和 3 个特征,并且准确性没有变化。它保持在 96%。

然后在运行案例456上,准确性发生了变化。为什么?

在比较案例24时,
两者都从数据集中删除了第二个特征,所以很明显,删除第二个特征是导致准确性变化的原因(如案例4所示)
那么为什么它在案例2中没有改变?
仅仅因为它也删除了第一个功能?平衡第二个?(如果这是真的,案例1会给出不同的准确度)
为什么前 3 个案例的准确度没有变化,但在后 3 个案例中却有变化?

ML 是否取决于向算法提供特征的顺序?

我在这里想念什么?

如果有人可以消除这个疑问,那就太好了。

谢谢!

1个回答

我认为这是过度拟合的结果。您的模型可以使用任何变量组合来解释这种现象,无论这种组合是否构成真实信号。

我不熟悉 NBC 的细节,但我怀疑该模型有一些偏差/偏移量/常数变量,可以与您的输入特征相结合。

因此,您所看到的只是分类器能够以完美描述现象的方式组合每组特征和常量变量的表达式。这些组合将是非线性的,因此关于模型对任何参数的依赖程度的逻辑不是简单的“它遵循”推理。

但是,如果您评估样本中的 OUT,您会更好地反映单个特征的有用程度,以及当您删除前三个特征时性能变得多么糟糕。

例如,对六个不同的模型进行 K-folds 测试(例如,K=10),保留 20% 的数据集作为测试数据。

在这里,您可能会看到以下排名:

(4, 5, 6, 1 ~ 相等) > 2 > 3