一、定义
如果一个样本在特征空间中的k个最相似,即特征空间中最邻近)的样本中的大多数属于某个类别,则该样本也属于这个类别
二、距离公式
1、欧式距离
a(a1,a2,a3) b(b1,b2,b3)
计算a、b两点距离:
$\sqrt{(a1-b1)^2 +(a2-b2)^2 +(a3-b3)^2}$
2、曼哈顿距离
a(a1,a2,a3) b(b1,b2,b3)
计算a、b两点距离:
$|a1-b1|+|a2-b2|+|a3-b3|$
三、API
- sklearn. neighbors. KNeighborsClassifier(n_neighbors=5, algorithm=‘auto’)
- n_ neighbors:int,可选(默认=5),k_ neighbors查询默认使用的邻居数
- algorithm:{‘auto’,‘ ball tree’, ‘kd_ tree’,’ brute’},可选用于计算最近邻居的算法:‘ ball tree’将会使用 BallTree, kd tree’将使用 KDTree。auto’将尝试根据传递给fit方法的值来决定最合适的算法。(不同实现方式影响效率)
四、代码实现
鸢尾花数据集:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier def knn_iris(): iris = load_iris() x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6) transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) estimator = KNeighborsClassifier(n_neighbors=22) estimator.fit(x_train,y_train) y_predict = estimator.predict(x_test) print("y_predict:\n",y_predict) print("直接比对真实值和预测值:\n",y_test == y_predict) score = estimator.score(x_test,y_test) print("准确率为:\n",score) return None
|
五、运行结果
1 2 3 4 5 6 7 8 9 10
| y_predict: [0 2 0 0 2 1 2 0 2 1 2 1 2 2 1 1 2 1 1 0 0 2 0 0 1 1 1 2 0 1 0 1 0 0 1 2 1 2] 直接比对真实值和预测值: [ True True True True True True True True True True True True True True True False True True True True True True True True True True True True True True True True True True False True True True] 准确率为: 0.9473684210526315
|
六、总结
优点:
缺点:
使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试