KNN K-近邻算法
目录
1.K-近邻算法介绍
以近邻K个点为参考,多数是什么特征,未知点就是什么特征。即采用测量不同特征值直接的距离方法来进行分类。截图来自B站《五分钟机器学习》
优点:直观,好理解、局部分布,不需要估计整体、精度高、对异常值不敏感、无数据输入假定
缺点:局部估算可能不符合全局分布,对K的取值非常敏感,计算复杂度高,空间复杂度高
使用数据范围:数值型和标称型
一般流程:
1.收集数据
2.准备数据:距离计算所需要的数值,最好是结构化的数据格式
3.分析数据:任何方法
4.训练算法:不需要
5.测试算法:计算错误率
6.使用算法
基本流程:
import numpy as np
import operator
def createDataSet():
group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels = ['A','A','B','B']
return group,labels
def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0]
diffMat = np.tile(inX,(dataSetSize,1))-dataSet #tile复制几行几列
sqDiffMat = diffMat**2
sqDistances= sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort() #将数组按照从小到大的顺序排序,输出对应的索引值。
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]] #key
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1 #value+1
#字典分解成元组列表,按元组的第二个元素进行逆序排序
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
group,labels = createDataSet()
mm = classify0([0,0],group,labels,3)
print(mm)
输出B
2.改进约会网站的配对效果
从本文文件中提取数据
def file2matrix(filename): #从文本中提取数据
fr = open(filena