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

标签 python machine-learning scikit-learn classification perceptron

我是机器学习的新手,我认为开始获得一些经验的好方法是使用一些真实的数据库和 python scikit 库。我使用了 haberman 的手术数据,这是一个二元分类任务,可以在 https://archive.ics.uci.edu/ml/datasets/Haberman%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%)。我错过了什么?

最佳答案

你只有 11 个多项式特征。如果你想保证命中每一个点,你需要的多项式特征几乎与你的数据点数量一样多,甚至更多。这是因为每个附加的多项式特征都允许图形再次弯曲。

拥有一堆相同程度的特征并不能真正按照您期望的方式增加您的复杂性。例如,如果您的函数是一级函数,那么您真的不能期望它是线性的,无论类似的术语数如何。

因此,虽然您可能拥有比数据点更多的特征,但由于您没有比数据点更多的多项式特征,所以您的大部分特征都在有效地调整相同的权重。

关于python - 为什么我的感知器不能完美地分离数量少于特征数量的点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61736706/

相关文章:

python - 在字典上使用标签编码器

python - 为什么类中函数名和变量名不能叫同一个?

python - 手动定义种子特征的 "where clause"?

python - 在Scikit中测试DecisionTreeClassifier时出错,请使用Python学习

python - 如何在 scipy.optimize 中使用 fmin_cg 获得正确的尺寸

r - 信息增益测量显示什么?

python - 变形金刚类从何而来?

与 Selenium (RC) 的 Javascript 通信

python django 字符串渲染问题

python - 在 python3 中编译 SCons