【机器学习实战】学习代码分析(1)

【机器学习实战】学习代码分析(1)

今天开始学习《机器学习实战》这本书,以下为第二章开始的相关代码分析以及自己的注释,为了方便以后阅读回顾。
个人为python小白,决定从这本书开始一点点学习掌握python,如果有人看到这个系列的博文,欢迎评论指正交流。

# -*- coding: cp936 -*-
from numpy import*
import operator

def createDataSet():
  group=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):
  #inX:输入向量 dataSet:训练集 label:分类标签 k:选择近邻数
  dataSetSize=dataSet.shape[0]
  #知道数据集里有几行,每行为一个元素
  diffMat=tile(inX,(dataSetSize,1)) - dataSet
  #让输入向量和训练集的元素个数相同,相当于把输入向量复制为训练集的个数
  #如训练集为([[a],[b],c]]),输入向量也为([[i],[i],[i]])
  #再让输入向量与训练集作差形成矩阵([[i-a],[i-b],[i-c]])
  #记为[[Xc1,Yc1],[Xc2,Yc2],[Xc3,Yc3]]
  sqDiffMat = diffMat**2
  #把diffMat里的每个元素都平方,记为[[Xc1^2,Yc1^2],[Xc2^2,Yc2^2],[Xc3^2,Yc3^2]]
  sqDistances=sqDiffMat.sum(axis=1)
  #将sqDiffMat中的元素按行相加,就是把每个元素的横坐标相加,纵坐标相加
  #[[Xc1^2+Yc1^2],[Xc2^2+Yc2^2],[Xc3^2+Yc3^2]]
  distances=sqDistances**0.5
  #把diffMat里的每个元素都开根号
  #此时相当于求出输入向量与训练集每点之间的距离√(Xi-Xa)^2+(Yi-Ya)^2
  sortedDistIndicies = distances.argsort()
  #把距离从大到小排序后输出对应数据的在distances里的位置
  classCount={}  #建立一个dictionary
  for i in range(k):
    voteIlabel = labels[sortedDistIndicies[i]]
    #将从i-k个离输入向量最近的训练集数据标签赋给voteIlabel
    classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    #统计相应标签的在k个里面出现的数目
  sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
  #首先要排序的对象时classcount中的(训练集数据,标签)
  #key=operator.itemgetter(1)  key具有获取第1个域值的能力即获取标签
  #从大到小排序
  return sortedClassCount[0][0]
  #返回发生频率最高的标签


注意!!!


2.7里classCount.iteritems()在3.6里要改成classCount.items()


我找错时简直令人窒息,就是调用不了一个函数,发现最后电脑卡住了,运行时没有自动保存默认没有加载那个函数。

2.1.2实施kNN算法

猜你喜欢

转载自blog.csdn.net/weixin_44190201/article/details/85127957
今日推荐