在这个示例中,将使用K近邻算法来构建一个回归模型,并展示如何通过不同的权重方法来预测数据。首先,需要生成一些样本数据用于训练模型,同时也会生成在整个训练数据范围内的数据,以便观察模型在整个区域的反应。
使用NumPy库来生成样本数据点。这些数据点将用于训练模型。此外,还生成了整个训练数据范围内的数据,以便可以可视化模型在该区域的表现。
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))
接下来,将训练一个模型,并可视化在预测中使用均匀和距离权重对预测值的影响。将使用5个邻居,并尝试两种不同的权重方法:均匀权重和距离权重。
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分钟0.226秒,这是一个相对较快的运行时间,表明K近邻算法在处理这类数据时具有较高的效率。
以下是一些与本示例相关的其他示例,它们涉及到K近邻算法在不同场景下的应用: