介绍
在这个项目中,你将学习如何使用 Python 实现 K 近邻(KNN)回归算法。KNN 是一种广泛使用的机器学习方法,通常用于分类问题。然而,它也可以应用于回归任务,其目标是预测一个连续的目标值。
🎯 任务
在这个项目中,你将学习:
- 如何理解 KNN 回归算法及其工作原理
- 如何在 Python 中实现 KNN 回归算法
- 如何计算测试数据与训练数据之间的欧几里得距离
- 如何识别 k 个最近邻并检索它们的目标值
- 如何计算 k 个最近邻的目标值的平均值,以预测测试数据的输出
🏆 成果
完成这个项目后,你将能够:
- 使用 Python 从头开始实现 KNN 回归算法
- 在 KNN 算法中使用欧几里得距离作为距离度量
- 应用 KNN 回归算法预测连续的目标值
- 展示机器学习算法实现的实践技能
实现 KNN 回归算法
在这一步中,你将学习如何使用 Python 实现 K 近邻(KNN)回归算法。按照以下步骤完成此步骤:
在你喜欢的代码编辑器中打开
knn_regression.py文件。找到
knn(train_data, train_labels, test_data, k)函数。此函数将是 KNN 回归算法的主要实现。train_data参数是已知样本的特征数据,train_labels是已知样本的目标值,test_data是单个未知样本的特征数据,k表示 K 近邻中使用的最近邻数量。在
knn()函数内部,首先计算test_data与所有训练样本之间的欧几里得距离。你可以使用numpy.sqrt()和numpy.sum()函数来计算欧几里得距离。
distances = np.sqrt(np.sum((train_data - test_data) ** 2, axis=1))
- 接下来,通过对距离进行排序并取前
k个索引来获取k个最近邻的索引。
nearest_indices = np.argsort(distances)[:k]
- 使用
nearest_indices获取k个最近邻的标签。
nearest_labels = train_labels[nearest_indices]
- 计算
k个最近邻标签的平均值,以获得单个未知样本test_data的预测目标值。
predicted_label = np.mean(nearest_labels)
- 使用
round()函数将预测标签最多保留两位小数。
predicted_label = round(predicted_label, 2)
- 最后,返回单个未知样本
test_data的预测目标值。
return predicted_label
- 保存
knn_regression.py文件。
测试 KNN 回归算法
在这一步中,你将通过运行提供的示例来测试 KNN 回归算法的实现。
在你的代码编辑器中打开 knn_regression.py 文件。
在文件底部添加以下测试用例:
if __name__ == "__main__":
train_data = np.array(
[[1, 1], [2, 2], [3, 3], [4, 4], [5, 5], [6, 6], [7, 7], [8, 8], [9, 9], [10, 10]]
)
train_labels = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
test_data = np.array([[1.2, 1.3]])
result = knn(train_data, train_labels, test_data, k=3)
print(result)
运行以下命令来执行该示例:
python3 knn_regression.py
输出应该是单个未知样本的预测目标值,最多保留两位小数。
2.0
恭喜!你已成功实现 KNN 回归算法,并使用提供的示例对其进行了测试。
总结
恭喜!你已完成此项目。你可以在 LabEx 中练习更多实验以提升你的技能。



