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算法中求距离的方法
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)
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)
k值的影响
example:
通常情况下,K值选取为单数。
算法缺点
参考《python机器学习基础教程》《scikit-learn机器学习常用算法原理及编程实战》