数据挖掘十大经典算法之一:K近邻
来源:互联网 发布:知柏地黄汤方歌 编辑:程序博客网 时间:2024/05/01 05:12
基本原理
k近邻(k-Nearest Neighbor,KNN)是一种有监督学习方法,其工作机制很简单:在给定测试样本时,基于某种距离(欧氏距离)度量找出训练样本数据集中与其距离最近的K个样本,然后基于这个k个样本做预测,通常采用的是“投票法”,也就是说属于哪个类别的样本数多,就预测为该样本。
常用的距离计算公式
- Lp距离定义:
- 欧氏距离:当p=2时,就是我们常见的欧式距离
- 曼哈顿距离:当p=1时称之为曼哈顿距离
- 马氏距离:马氏距离标识的是数据的协方差距离,是一种有效的计算两个未知样本集的相似度的方法,在计算的过程中考虑到features之间的特征,而且跟尺度无关(scale-invariant)。求马氏距离的前提是要计算出样本集的协方差矩阵,然后利用公式:,其中Σ表示样本矩阵的协方差,μ表示的是样本的均值。马氏距离要求样本是必须大于features的个数即维数
举例
一个包含3类且类别标签为1,2,3的样本集和待测试样本item-1,计算item-1与样本集中的没想的距离,并取前k个距离最小的记录,比如k=10,统计这五条集中出现最多的类别,并把该类别作为item-1的预测类别。
- item-1。
- 得到的k个最小的距离项分别为:a-1,b-2,c-3,d-2,e-1,f-3,g-1,h-1,i-2,j-1.其中数字表示类别,字母表示记录的feature value。
- 统计K=10个项中个类别的个数,类别1–5个,类别2–3个,类别3–2个。
- 取上述结果最大的类别1作为item-1的预测类别,所以item-1 的类别为1.
code
def loadfile(filename): rawData = [] file = open(filename,'rb') reader = csv.reader(file) for line in reader: rawData.append(line) rawData.pop(0) rawData = array(rawData).astype(int32) return rawDatadef knnClassifier(unClassifiedItem,trainData,trainLabels,k): dataSetSize = trainData.shape[0] diffMat = tile(unClassifiedItem, (dataSetSize,1)) - trainData sqDiffMat = (diffMat)**2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() classCount={} for i in range(k): voteIlabel = trainLabels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]def digitClassify(testData,testDataLable,trainData,trainLable,k): m = testData.shape[0] result = [['ImageId','label']] errorCount=0 for i in range(m): classifyResult =knnClassifier(testData[i],trainData,trainLable,k) result.append([i,classifyResult]) if(classifyResult !=testDataLable[i,1]): errorCount+=1 return errorCount/float(m)
0 0
- 数据挖掘十大经典算法之一:K近邻
- 数据挖掘十大经典算法之K最近邻算法
- 数据挖掘十大算法--K近邻算法
- 十大经典数据挖掘算法之K-Means算法
- 数据挖掘十大经典算法之一--APRIORI
- 数据挖掘十大经典算法之二:K-means
- 数据挖掘10大算法(6)--K近邻算法
- 数据挖掘十大经典算法学习之K均值(K-means)聚类算法
- 数据挖掘十大经典算法(二)The k-means algorithm 即K-Means算法
- [推荐]数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 【转】数据挖掘十大经典算法
- 数据挖掘十大经典算法
- 数据挖掘十大经典算法
- (转)数据挖掘十大经典算法
- 数据挖掘十大经典算法
- Linux 之 信号
- python 递归保存数据在list中不正确
- jsonp的底层实现原理 跨域请求
- 关于字符串截取的工具类
- 编写简单的驱动
- 数据挖掘十大经典算法之一:K近邻
- AD10遇到的问题(Ctrl+pgdn快捷键电路图不居中 每次更新PCB原件就跳出板外 编译集成库遇到提示这个警告: warning:Extra pin …in Normal of part…)
- c++模板学习
- 使用内存数据库/数据集以提高执行速度
- NCR(Numeric Character Reference)简单介绍
- AD10原理图库经验(方框覆盖了引脚内容)
- 系统io各个函数用法总结
- 发送手机短信获取验证码功能
- python 导出hive数据表的schema