机器学习入门之《机器学习实战》学习笔记一K邻近算法
小标 2018-11-08 来源 : 阅读 1428 评论 0

摘要:本文主要向大家介绍了机器学习入门之《机器学习实战》学习笔记一K邻近算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

本文主要向大家介绍了机器学习入门之《机器学习实战》学习笔记一K邻近算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

一、 K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征(向量的每个元素)与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的的分类标签。由于样本集可以很大,我们选取前k个最相似数据,然后统计k个数据中出现频率最高的标签为新数据的标签。

  K邻近算法的一般流程:
  (1)收集数据:可以是本地数据,也可以从网页抓取。
  (2)准备数据:将数据结构化,方便操作。
  (3)分析数据:可以使用任何方法。
  (4)训练算法:此步骤不适用于k邻近算法。
  (5)测试算法:计算错误率;计算公式:错误率=测试出错次数/总测试次数
  (6)使用算法:输入样本数据,输出结构化的结果,判断新数据属于哪个分类。
  二、使用K近邻算法的一个例子
  我使用的是spyder的开发环境,python的版本是3.5,spyder自带了numpy函数库。新建一个KNN.py文件,在本文件中完成本章实验。
  在KNN中写一个数据生成函数:
 

1 from numpy import *
2 import operator
3 
4 def createDataset():
5     group = array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0.0,0.1]])
6     labels = [‘A‘,‘A‘,‘B‘,‘B‘]
7     return group,labels

 

  在spyder中输入 :
  >>> import KNN
  >>>group,labels = KNN.createDataSet()
  >>>group 
  array([[ 1. , 1.1],            [ 1. ,  1. ],            [ 0. ,  0. ],            [ 0. ,  0.1]])
  >>>labels 
  [‘A‘, ‘A‘, ‘B‘, ‘B‘]
  出现以上提示则说明函数正确。
  三、K近邻算法函数
  

 1 def classify(inX,dataset,labels,k):
 2     dataSetSize = dataset.shape[0]
 3     diffMat = tile(inX,(dataSetSize,1))-dataset
 4     sqDiffMat = diffMat**2
 5     sqDistances = sqDiffMat.sum(axis=1)
 6     distances = sqDistances**0.5
 7     sortedDistIndicies = distances.argsort()
 8     classCount ={}
 9     for i in range(k):
10         voteIlabel = labels[sortedDistIndicies[i]]
11         classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
12     sortedClassCount = sorted(classCount.items(),
13                               key=operator.itemgetter(1),reverse=True)
14     return sortedClassCount[0][0]

  验证:在spyder中输入
  >>> KNN.classify([0,0],group,labels,3)
  输出结果应该为‘B‘。
  四、例子:约会网站匹配改进
  海伦收集约会数据已经有一段时间,她把这些数据放在文本文件datingdata.txt中,每个样本数据占据一行,共有1000行(她可能约会过1000个人,太可怕了^_^),每个样本主要包括以下3中特征:
  1、每年获得的飞行常客里程数
  2、玩视频游戏所耗的时间百分数
  3、每周消费的冰激凌公升数
  上述数据保存在文本文件中,数据之间以空格间隔,在数据输入分类器之前,必须将待处理数据改变为分类器可以处理的数据,在KNN中创建名为file2matrix的函数,进行数据处理。

 1 def file2matrix(filename):
 2     fr = open(filename,‘r‘)
 3     arrayOLines = fr.readlines()
 4     numberOfLines = len(arrayOLines)
 5     returnMat = zeros((numberOfLines,3))
 6     classLabelVector = []
 7     index = 0
 8     for line in arrayOLines:
 9         line = line.strip()
10         listFromLine = line.split(‘\t‘)
11         returnMat[index,:] = listFromLine[0:3]
12         classLabelVector.append(int(listFromLine[-1]))
13         index += 1
14     return returnMat,classLabelVector
15 retarnmat,classlabelvector = file2matrix(‘datingdata.txt‘)

  在我运行这段程序,总是出现错误提示:could not convert string to float: ‘12 34 56‘,对于这个问题,我的改法是将文本中数据间的空格改为‘,‘并将
listFromLine = line.split(‘\t‘)改为
listFromLine = line.split(‘,‘)这样就可以解决问题,但是不是最好的方法,还需要改进。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved