0

我正在尝试使用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

你知道为什么降维后我的准确率更高吗?

4

1 回答 1

2

没有这样的事情可以保证降低的维度会更好或更差。您正在分别应用两个弱模型,有时您会很幸运,它们实际上会抵消弱点并且比直接应用的弱模型稍微好一些。一般来说,降维不应该增加维度,因为你有足够的数据,并且你正在拟合的模型很强大。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 0100% 准确!

同时我可以选择不同的降维,比如likeg(x)=x[1]和get 0 0 1 0 1,准确率只有20%!因此比原来的差。

正如你所看到的,你总是可以得到两者——更好或更坏。由于在不了解以下知识的情况下应用了降维技术,因此它可以做任意好/坏的事情。没有保证。

于 2017-02-17T20:24:21.087 回答