KNN
程序员文章站
2022-05-19 11:29:42
KNN最近邻 (k-Nearest Neighbors, KNN) 算法是一种分类算法, 1968年由 Cover和 Hart 提出, 应用场景有字符识别、 文本分类、 图像识别等领域。算法思想一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别。算法流程首先计算样本中所有点到目标点的距离,然后找出距离最近的K(K可以由训练得到)个点。这K个中,找出大多数点属于的类别,那么判断这个点可能也是这个类别的。距离的判断常用的距离有欧式距离和曼哈顿距离...
KNN
最近邻 (k-Nearest Neighbors, KNN) 算法是一种分类算法, 1968年由 Cover和 Hart 提出, 应用场景有字符识别、 文本分类、 图像识别等领域。
算法思想
一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本也属于这个类别。
算法流程
首先计算样本中所有点到目标点的距离,然后找出距离最近的K(K可以由训练得到)个点。这K个中,找出大多数点属于的类别,那么判断这个点可能也是这个类别的。
距离的判断
常用的距离有欧式距离和曼哈顿距离。欧式距离就是我们最常用的两点间距离。
曼哈顿距离则是坐标相减:
K值的选择
一、近似误差与估计误差:
近似误差:对现有训练集的训练误差,关注训练集,如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。模型本身不是最接近最佳模型。
估计误差:可以理解为对测试集的测试误差,关注测试集,估计误差小说明对未知数据的预测能力好,模型本身最接近最佳模型。
二、K值确定标准:
K值过小:k值小,特征空间被划分为更多子空间(模型的项越多),整体模型变复杂,容易发生过拟合,k值越小,选择的范围就比较小,训练的时候命中率较高,近似误差小,而用test的时候就容易出错,估计误差大,容易过拟合。
K值=N:无论输入实例是什么,都将简单的预测他属于训练实例中最多的类。
实例
鸢尾花的分类
import numpy as np
import csv
import pandas as pd
import operator
#本地数据集操作
file = (csv.reader(open(r'C:\Users\Li\Desktop\lris.csv','r')))
data = []
for line in file:
data.append(line)
data = np.array(data)
sl_tr = data[1:120][:,0]
sw_tr = data[1:120][:,1]
pl_tr = data[1:120][:,2]
pw_tr = data[1:120][:,3]
kind_tr = data[1:120][:,4]
sl_te = data[120:][:,0]
sw_te = data[120:][:,1]
pl_te = data[120:][:,2]
pw_te = data[120:][:,3]
kind_te = data[120:][:,4]
k = 10
def cmp(x):
return x[0]
def cal(x,y): #计算距离
res = (float(sl_te[x])-float(sl_tr[y]))**2 +(float(sw_te[x])-float(sw_tr[y]))**2 + (float(pl_te[x])-float(pl_tr[y]))**2 + (float(pw_te[x])-float(pw_tr[y]))**2
return res
def knn():
sum = 0
ls = []
for i in range (sl_te.size):
di = {"Iris-setosa":0,"Iris-versicolor":0,"Iris-virginica":0}
for j in range(sl_tr.size):
ls.append((cal(i,j),kind_tr[j])) #将距离和类别信息加入列表
ls = sorted(ls,key = cmp)
for m in range(k):
di[ls[m][1]]+=1 #属于该类别的数量加1
res = max(di, key=di.get)
if res == kind_te[i] :
sum += 1
return sum
sum = knn()
print("训练数据个数为",sl_tr.size,"个","测试数据个数为",sl_te.size,"个","K值为",k,"预测准确率为",sum/sl_te.size);
本文地址:https://blog.csdn.net/qq_43467171/article/details/107451954