1.认识KNN
一般来说,物以类聚人以群分,近朱者赤近墨者黑。
knn近邻算法的原理也是这样:
给定一个训练数据集,对新的的输入实例,在训练数据集中找到与该实例最邻近的的K个实例,这K个实例的多数属于某个类,就把该实例分为这个类。
k取值若为实线,则红三角数目多于蓝矩形数目,绿色待分类点即属于红三角
k取值若为虚线,则蓝矩形数目多于红三角数目,绿色待分类点即属于蓝矩形
2.算法原理
- 计算距离(常用欧几里得距离或马氏距离)
- 升序降序
- 取前k个
- 加权平均
1)计算距离(常用欧几里得距离或马氏距离)
计算样本之间的距离一般选择欧式距离。
有关欧式距离与马氏距离详解:https://blog.csdn.net/bluesliuf/article/details/88862918
2)升序降序
一般来说,当距离取定后,应对样本进行排序。
距离最近的排前边,距离最远的排后边 。
k的取值
k的取值大小对分类结果有着很大的影响
-
k的选取
k太大:导致分类模糊
k太小:受个例影响,波动较大 -
如何选取k
经验
均方根误差
3.实战应用
1)数据集
链接:https://pan.baidu.com/s/1w8cyvknAazrAYnAXdvtozw
提取码:zxmt
2)读取数据后分组(测试组和训练组)
#读取
import csv
with open('Prostate_Cancer.csv','r') as file:
reader = csv.DictReader(file)
datas = [row for row in reader]
#乱序
random.shuffle(datas)
n = len(datas)//3
#分组
test_set = datas[0:n]
train_set = datas[n:]
3)knn算法
def distance(d1,d2):
res = 0
for key in ("radius","texture", "perimeter","area","smoothness