Ch2,KNN分类算法程序分析----机器学习实践P19页
来源:互联网 发布:美工助理工资一般多少 编辑:程序博客网 时间:2024/06/07 17:38
此文是对机器学习实践P19页的代码分析
1,建立一个group组,每行有两个特征(或称属性),建立一个标签labels,存放组对于的目标变量。
from numpy import *import operatorfrom os import listdirdef createDataSet(): group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels = ['A','A','B','B'] return group, labels
2计算要输入的值(或矢量vector)与group组中的每个值之间的距离
我们以取classify0([0,0],group,labels,3)为例为例
def classify0(inX, dataSet, labels, k):#取classify0([0,0],group,labels,3)为例 dataSetSize = dataSet.shape[0] #dataSet是4x2矩阵,shape[0]获取行数=4 diffMat = tile(inX, (dataSetSize,1)) - dataSet ''' 建立一个4x2的零矩阵,并用此矩阵减group矩阵 >>> diffMat array([[-1. , -1.1], [-1. , -1. ], [ 0. , 0. ], [ 0. , -0.1]]) ''' sqDiffMat = diffMat**2 ''' 矩阵取平方 >>> diffMat**2 array([[ 1. , 1.21], [ 1. , 1. ], [ 0. , 0. ], [ 0. , 0.01]]) ''' sqDistances = sqDiffMat.sum(axis=1) ''' 每个矩阵的行分别求和(axis=0则列相加) >>> sqDistances array([ 2.21, 2. , 0. , 0.01]) ''' distances = sqDistances**0.5 ''' 求平方根得到距离 >>> distances array([ 1.48660687, 1.41421356, 0. , 0.1 ])
3,以上已经得到输入的数[0,0]与group的距离,kNN算法即要找出这些距离中最小的那些数
sortedDistIndicies = distances.argsort() ''' 从小到大将对应的索引值排序: >>> sortedDistIndicies array([2, 3, 1, 0], dtype=int32) ''' classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] ''' 因为k=3,即取出了前三个距离最小的数对应的索引值 e.g.如取i==0时,则,sortedDistIndicies[0]==2,labels[2]=='B' so, voteIlabel == 'B' ''' classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 ''' get可以获取键对应的值,这里key==voteIlabel== 'B',因为classCount是空字典 所以'B'没有对应的值,返回默认值0,因此: >>> classCount[voteIlabel] 1 值得注意的是voteIlabel已经变成B,所以上面的含义是classCount('B')==1 然后循环i=1,voteIlabel==labels[3]==B;classCount['B']==classCount.get(B,0)+1==1+1==2 因为此时classCount已经有值,即,classCount={'B':1} i==2,voteIlabel==labels[1]==A;classCount['A']==0+1==1 so: >>> classCount {'B': 2, 'A': 1} >>> 这里实际上Count就是计数的意思,也就是说距离最小的这三个数中,有两个的目标变量是'B', 目标变量是'A'的有一个,因此显然我们输入的这个数的目标变量选'B'会更好 ''' sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True) ''' 以第二个域逆向排序,即以目标变量的数量来从大到小排序 >>> sortedClassCount [('B', 2), ('A', 1)] ''' return sortedClassCount[0][0] ''' 返回sortedClassCount矩阵中的第一行第一列(或者说第一个元组中的第一个值)
阅读全文
0 0
- Ch2,KNN分类算法程序分析----机器学习实践P19页
- 机器学习实践-Ch02 kNN分类算法
- Python机器学习实战kNN分类算法
- 机器学习-KNN分类算法Iris实例
- python 机器学习KNN分类算法
- 【机器学习】KNN k近邻分类算法
- 机器学习-分类器算法-kNN
- 机器学习实战读书笔记-kNN分类算法
- 机器学习之kNN分类算法
- 机器学习基础KNN分类算法
- 《机器学习》实施kNN分类算法
- 机器学习--KNN分类
- 机器算法:KNN分类算法
- 一个机器简单的机器学习算法-KNN分类器
- 机器学习 之 KNN 算法 小结分析
- 机器学习之KNN算法分析
- 【机器学习】K-近邻分类算法KNN学习
- 用Python开始机器学习(4:KNN分类算法)
- h5在ios下overflow:auto,滑动没有惯性解决方案
- 使用sh脚本如何替换指定目录下所有文件中的指定字符串
- Android.mk中输出log
- Android应用中横竖屏切换小结
- 多ppp实现
- Ch2,KNN分类算法程序分析----机器学习实践P19页
- 《设计模式》学习笔记2——简单工厂模式
- Linux
- 深入理解Android消息处理系统——Looper、Handler、Thread
- 制作.ppm格式Linux内核启动logo
- Arcgis for javascript api 本地部署
- Makefile & Android.mk文件中如何输出打印信息
- 通过target为a标签指定frame
- nufront pad 添加新的3G dangle支持