我正在尝试使用LDA减少数据集。我希望在减少的数据集上,我的准确性将降低。但是,根据随机种子的不同,我有时会减少版本给我更高的准确性。
X, y = make_classification(1000, 50, n_informative=10, n_classes=20)
X1, X2, y1, y2 = train_test_split(X, y)
lda = LDA()
lda.fit(X1, y1)
predicted = lda.predict(X2)
full_accuracy = accuracy_score(y2, predicted)
reduction = LDA(n_components=5)
X1red = reduction.fit_transform(X1, y1)
X2red = reduction.transform(X2)
lda.fit(X1red, y1)
predicted = lda.predict(X2red)
reduced_accuracy = accuracy_score(predicted, y2)
print full_accuracy, reduced_accuracy, reduced_accuracy/full_accuracy
# prints 0.132 0.16 1.21212121212
您知道为什么降低维度后我的精度更高吗?
没有保证降低维度会更好或更糟的东西。您正在分别应用两个弱模型,您会不时地变得幸运,它们实际上会取消弱点,并且比直接应用的弱模型更好。通常,降低维度不应增加维度给定您有足够的数据,并且您拟合的模型为 strong 。LDA不是一个强大的模型(它非常天真),因此您可能会得到各种结果。
有关更多直觉
X = 0 900
1 1000
2 123
3 123124
4 1251251
y = 0 1 0 1 0
我的模型是一个函数f(x|theta) = sum(x) % theta
,我在其中学习theta
。如果我只是直接将其应用于我的数据,我将能够了解到这一点,因为
f(X) = 900 % theta
1001 % theta
125 % theta
123127 % theta
1251255 % theta
最好的theta是 theta=2
,因为我得到的预测0 1 1 1 1
,精度为60%。现在,让我们应用降低性缩小技术,在我的情况下,这非常简单,它是 g(x) = x[0]
,因此
g(X) = 0
1
2
3
4
现在,如果我现在撰写f o g
(将我的模型应用于还原数据),我将再次了解theta=2
,但是这次我的预测是0 1 0 1 0
,100%准确性!
同时,我可以选择降低不同的Dimensonation,例如g(x)=x[1]
并获得0 0 1 0 1
,这仅是20%的精度!因此比原始更糟。
如您所见,您总是可以同时获得 - 无论好坏。由于降低了dimensonality降低技术而无需了解以下内容,因此它可以做任意的好/坏事。没有保证。