首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化数据集的LDA精度高于原始数据集

简化数据集的LDA精度高于原始数据集
EN

Stack Overflow用户
提问于 2017-02-17 19:08:56
回答 1查看 572关注 0票数 0

我正在尝试使用LDA减少数据集。我希望在缩减的数据集上,我的准确率会更低。然而,根据我得到的随机种子,有时简化的版本会给我更高的准确率。

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2017-02-18 04:24:21

没有这样的东西可以保证降维是更好还是更坏。你正在分别应用两个弱模型,有时你会很幸运,它们实际上会抵消弱点,并比直接应用的弱模型稍好一些。一般来说,如果你有足够的数据,并且你正在拟合的模型是,那么降维不应该增加维数。LDA不是一个强大的模型(它是一个非常幼稚的模型),因此你可能会得到各种各样的结果。

为了获得更多的直觉,让我们来看一个非常简单的例子

代码语言:javascript
复制
X = 0 900
    1 1000
    2 123
    3 123124
    4 1251251   

y = 0 1 0 1 0

我的模型是一个函数f(x|theta) = sum(x) % theta,在那里我学习了theta。如果我直接将它应用于我的数据,我将能够了解到这一点,因为

代码语言:javascript
复制
f(X) = 900 % theta
       1001 % theta
       125 % theta
       123127 % theta
       1251255 % theta

当我得到预测0 1 1 1 1时,最好的theta是theta=2,准确率为60%。现在让我们应用降维技术,这在我的例子中非常简单,它是g(x) = x[0],因此

代码语言:javascript
复制
g(X) = 0
       1
       2
       3
       4

如果我现在编写f o g (将我的模型应用于简化的数据),我将再次学习theta=2,但这一次我的预测是0 1 0 1 0,100%准确!

同时,我可以选择不同的降维方式,比如g(x)=x[1]和get,而不是0 0 1 0 1,准确率只有20%!因此比原始的更糟糕。

正如你所看到的,你总是可以两者兼得--更好或更坏。由于降维技术在不知道之后是什么的情况下应用于,因此它可以做任意的好/坏的事情。不能保证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42296409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档