为什么我的感知器不能完美地分离出少于特征数量的点?

问题描述 投票:3回答:1

我在机器学习方面是个新手,我决定开始获得一些经验的好方法是玩一些真实的数据库和python scikit库。我使用了哈伯曼的手术数据,这是一个二进制分类任务,可以在 https:/archive.ics.uci.edumldatasetsHaberman%27s+Survival。. 我使用这些数据训练了几个感知器。在某些时候,我决定证明过拟合的概念。因此,我将所有306个数据点,每个数据点有3个特征,映射到一个非常高的维度上,得到所有的项,包括11度。这是一个庞大的364个特征(这比306个数据点还要多)。然而,当我训练模型时,却没有实现样本内误差为零。我想原因应该是有一些点是重合的,有不同的标签,所以我去掉了重复的数据点,但同样无法实现零样本内误差。下面是我使用scikit库的方法编写的代码中有趣的部分。

perceptron = Perceptron()
polynomial = preprocessing.PolynomialFeatures(11)
perceptron.fit(polynomial.fit_transform(X), Y)
print(perceptron.score(polynomial.fit_transform(X),Y))

而我得到的输出结果只有0. 7, 准确率与我预期的1(100%)相差甚远. 我到底漏掉了什么?

python machine-learning scikit-learn classification perceptron
1个回答
0
投票

你只有11个多项式特征。如果你想保证击中每一个点,你需要的多项式特征几乎和你的数据点数量一样多,甚至更多。这是因为每一个额外的多项式特征都会让图形再次弯曲。

拥有一堆相同度数的特征并不能真正以你期望的方式增加你的复杂性。例如,如果你的函数是一阶的,你真的不能指望它是线性以外的任何东西,不管像项数是多少。

所以,虽然你可能比数据点有更多的特征,但由于你没有比数据点更多的多项式特征,你的大多数特征都有效地调整了相同的权重。

© www.soinside.com 2019 - 2024. All rights reserved.