Python sklearn : why are my neighbors. KNeighborsRegressor 预测 "perfect"?

标签 python machine-learning scikit-learn random-forest knn

我正在运行以下代码:

from sklearn import neighbors
import numpy as np
import pandas as pd
X = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD'))
y = pd.DataFrame(np.random.randn(50, 1), columns=list('T'))
KNN_ = neighbors.KNeighborsRegressor(n_neighbors=20, weights='distance').fit(X, y)
yhat = KNN_.predict(X)
error = yhat-y
print(error)

为什么所有错误都为零?据我了解,误差应该捕获拟合/预测值与我的数据点之间的差异?

我已经对其他估计器(例如随机森林回归器)应用了基本相同的过程,并且错误按预期非零,所以我担心我在代码中遗漏了一个微妙之处?

最佳答案

这是因为您正在同一数据集上进行训练和测试。您在以下行中使用 X 进行训练

KNN_ = neighbors.KNeighborsRegressor(n_neighbors=20, weights='distance').fit(X, y)

然后根据相同的值进行预测

yhat = KNN_.predict(X)

您需要将数据集分解为训练和测试,例如 tran_X 和 test_X。然后在 train_X 上进行训练并使用 test_X 进行预测。

更新如果您阅读 documentation of KNN它说的是

The target is predicted by local interpolation of the targets associated of the nearest neighbors in the training set.

所以基本上,当您提供新的预测目标时,它会在本地插入训练集。由于这些值完全相同,因此它返回确切的数据行和标签。我的观点是,误差的差异与 KNN 内部的实际工作方式有关。我的猜测是,由于随机森林是一种防止过度拟合的决策树集合,因此误差范围不为零(这就是防止过度拟合的全部意义)。您需要了解这些算法的内部工作原理才能了解这一点。您可以看一下thisthis了解为什么预测完全相同。

关于Python sklearn : why are my neighbors. KNeighborsRegressor 预测 "perfect"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50896495/

相关文章:

python - NLTK 词干产生奇怪的结果

python - 为什么一些非常接近的 float 会导致 3.4.x 到至少 3.6.6 版本的 Python 代码出现如此大的差异?

python - 从列表元素中删除项目?

python-2.7 - 如何使用 python 使用 caffe 训练和测试 LeNet

python - 导入 sklearn 时出现不可排序类型错误

python - 我如何在 python 中使用鼠标按钮 4-5(玩家)?

python - 一旦满足条件,累加 1 并重置为 0

tensorflow - 恢复训练卷积神经网络

python - 将 scikit 缩放数据映射回 ID

python - scikit-learn:如何定义 ROC 曲线的阈值?