k-最近邻回归模型演示

在这篇文章中,将探讨如何使用k-最近邻算法来解决回归问题,并通过barycenter和常数权重对目标值进行插值。k-最近邻算法是一种基于实例的学习,它通过查找数据集中与新数据点最近的k个实例来预测新数据点的输出值。在回归问题中,这些最近邻的输出值将被用来估计新数据点的输出值。

生成样本数据

首先,需要生成一些用于训练模型的数据点。此外,还会生成整个训练数据范围内的数据,以便可视化模型在整个区域的反应。

import matplotlib.pyplot as plt import numpy as np from sklearn import neighbors # 设置随机数种子以确保结果的可重复性 rng = np.random.RandomState(0) # 生成训练数据 X_train = np.sort(5 * rng.rand(40, 1), axis=0) # 生成测试数据 X_test = np.linspace(0, 5, 500)[:, np.newaxis] # 计算训练数据的正弦值作为目标值 y = np.sin(X_train).ravel() # 为目标值添加噪声 y[::5] += 1 * (0.5 - np.random.rand(8))

拟合回归模型

接下来,将训练一个模型,并可视化在预测中使用均匀和距离权重对预测值的影响。

n_neighbors = 5 # 遍历不同的权重类型 for i, weights in enumerate(["uniform", "distance"]): # 创建k-最近邻回归模型 knn = neighbors.KNeighborsRegressor(n_neighbors, weights=weights) # 拟合模型并进行预测 y_ = knn.fit(X_train, y).predict(X_test) # 绘制训练数据和预测结果 plt.subplot(2, 1, i + 1) plt.scatter(X_train, y, color="darkorange", label="数据") plt.plot(X_test, y_, color="navy", label="预测") plt.axis("tight") plt.legend() plt.title("KNeighborsRegressor (k=%i, weights='%s')" % (n_neighbors, weights)) plt.tight_layout() plt.show()

通过上述代码,可以看到k-最近邻回归模型是如何根据训练数据预测新数据点的输出值的。在第一个子图中,使用了均匀权重,而在第二个子图中,使用了距离权重。这两种权重方法在预测时会有不同的表现,均匀权重会给所有最近邻相同的权重,而距离权重则会根据距离的远近给予不同的权重。

整个脚本的运行时间大约为0.216秒。可以通过以下链接下载Jupyter笔记本、Python源代码或压缩包:

  • Jupyter笔记本:
  • Python源代码:
  • 压缩包:

如果对k-最近邻算法在分类问题中的应用感兴趣,或者想了解如何结合邻域成分分析来提高k-最近邻算法的性能,可以查看以下相关示例:

  • 最近邻分类:
  • 结合邻域成分分析的最近邻:
  • 支持向量机中的加权样本:
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485