codecamp

AI人工智能 寻找最近邻

若要构建推荐系统(如电影推荐系统、商品推荐系统),就需要掌握寻找最近邻的核心概念——推荐系统的底层逻辑正是基于最近邻算法实现的。

(一)核心概念

寻找最近邻,指从给定数据集中找到与输入数据点距离最近的点的过程。K近邻(KNN)算法是该概念的核心应用,其最主要的用途是构建分类系统,即根据输入数据点与各类别中数据点的邻近程度,对该点进行分类。

(二)Python实现寻找K近邻

以下代码实现从给定数据集中找到指定测试点的K个最近邻,并通过可视化展示结果:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors


## 定义输入数据集(二维)
A = np.array([[3.1,2.3],[2.3,4.2],[3.9,3.5],[3.7,6.4],
              [4.8,1.9],[8.3,3.1],[5.2,7.5],[4.8,4.7],
              [3.5,5.1],[4.4,2.9]])


## 指定寻找的最近邻数量K
k = 3
## 定义测试数据点
test_data = [3.3,2.9]


## 可视化原始输入数据
plt.figure()
plt.title('Input data')
plt.scatter(A[:, 0], A[:, 1], marker='o', s=100, color='black')
plt.show()


## 初始化并训练K近邻模型,算法自动选择最优方式
knn_model = NearestNeighbors(n_neighbors=k, algorithm='auto').fit(A)
## 计算测试点到各数据点的距离,返回距离与对应索引
distances, indices = knn_model.kneighbors([test_data])


## 打印K个最近邻(按距离由近到远排序)
print("\nK Nearest Neighbors:")
for rank, index in enumerate(indices[0][:k], start=1):
    print(str(rank) + " is", A[index])


## 可视化K近邻结果,标注测试点与最近邻
plt.figure()
plt.title('Nearest neighbors')
plt.scatter(A[:, 0], A[:, 1], marker='o', s=100, color='k')
## 绘制测试点(红色)
plt.scatter(test_data[0], test_data[1], marker='x', s=200, color='red')
## 绘制K个最近邻(蓝色)
plt.scatter(A[indices][0][:,0], A[indices][0][:,1], marker='o', s=200, color='blue', alpha=0.5)
plt.show()

代码输出示例

K Nearest Neighbors:
1 is [3.1 2.3]
2 is [4.4 2.9]
3 is [3.9 3.5]

可视化结果中,红色叉号为测试点,蓝色圆点为其3个最近邻,黑色圆点为数据集中其他点。

AI人工智能 聚类性能评估
AI人工智能 K-近邻分类器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }