我一直在对几个数据集进行试验,并在实现 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 1、2和3,我分别删除了 1 、 2 和 3 个特征,并且准确性没有变化。它保持在 96%。
然后在运行案例4、5和6上,准确性发生了变化。为什么?
在比较案例2和4时,
两者都从数据集中删除了第二个特征,所以很明显,删除第二个特征是导致准确性变化的原因(如案例4所示)
那么为什么它在案例2中没有改变?
仅仅因为它也删除了第一个功能?平衡第二个?(如果这是真的,案例1会给出不同的准确度)
为什么前 3 个案例的准确度没有变化,但在后 3 个案例中却有变化?
ML 是否取决于向算法提供特征的顺序?
我在这里想念什么?
如果有人可以消除这个疑问,那就太好了。
谢谢!