减少数据集的LDA精度高于原始数据集



我正在尝试使用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降低技术而无需了解以下内容,因此它可以做任意的好/坏事。没有保证。

相关内容

最新更新