KNN算法介绍

(1)为了判断未知实例的类别,以所有已知类别的实例作为参照。

(2)选择合适的K(参数)值

(3)计算未知类别到已知类别点的距离,选择最近K个已知实例

(4)根据少数服从多数的投票法则(majority-voting),让未知类别归类为K个最近邻样本中最多数的类别。

1、

(1)回顾Python当中获取字典中的值的三种方法,并比较三种方法的异同,

注1.key-value2.get()3.setdefaul

(2)回顾python中如何向字典里面添加元素

#设字典a={"学生号":1234;"学校":"xxx大学"}
#01、(1)
a={"学生号":1234,"学校":"xxx大学"}
for k,v in a.items():
print(k,v)
print("-"*10)
print(a.get("学生号"))
print(a.get("学校"))
print("-"*10)
print(a.setdefault("学生号","无"))
print(a.setdefault("学校","无"))
print(a.setdefault("姓名","无"))
#(2)
a={"学生号":1234,"学校":"xxx大学"}
a["姓名"]="小明"
print(a)

print("*"*100)

x={"院系":"信息工程系"}
a.update(x)
print(a)

2、

给定以下样本点(数据在distance.txt文件中),一共有1000个样本点,计算测试点(5477,4.276823,1.174874)

到所有样本点的距离,求出距离测试点最近的100个样本点的坐标。

提示:可借鉴的KNN算法中求距离的方法

最近邻(knn)算法的学习记录_python

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
a=np.genfromtxt("distance.txt",delimiter=',')
x=a[:,0]
y=a[:,1]
z=a[:,2]
fig=plt.figure()
ax=Axes3D(fig)
ax.scatter(x,y,z)

最近邻(knn)算法的学习记录_python_02

import matplotlib.pyplot as plt
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
a=np.genfromtxt("distance.txt",delimiter=',')
x_data=np.array(a)
#print(x_data)
x_test=np.array([5477,4.276823,1.174874])
#print(x_test)



datasetsize=x_data.shape[0]
#print(datasetsize)
diffmat=np.tile(x_test,(datasetsize,1))-x_data
#print(diffmat)
sqdiffmat=diffmat**2
#print(sqdiffmat)
sqdistances=sqdiffmat.sum(axis=1)
distances=sqdistances**0.5
#print(distances)
sorteddistindicies=distances.argsort()
#print(sorteddistindicies)

ww=sorteddistindicies[:100]
for k in x_data:
for n in x_test:
q=(k-n)**2
w=sum(q)
e=w**0.5
if e.any()==ww.any():
print(k)


#print(sorteddistindicies[i])
#new_list.append(sorteddistindicies[i])
#print(new_list)

最近邻(knn)算法的学习记录_机器学习_03

k值的影响

example:

最近邻(knn)算法的学习记录_机器学习_04

通常情况下,K值选取为单数。

算法缺点

最近邻(knn)算法的学习记录_python_05

参考《python机器学习基础教程》《scikit-learn机器学习常用算法原理及编程实战》