码迷,mamicode.com
首页 > 其他好文 > 详细

机器学习实战——第二章

时间:2014-12-30 16:48:27      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

  k-近邻算法(kNN):测量不同特征值之间的距离方法进行分类。

  kNN的工作原理:存在一个样本数据集合(训练样本集),并且样本集中每个数据都存在标签,输入没有标签的新数据后,将新数据的每个特征与样本集数据对应的特征进行比较,然后算法提取样本集中特征最相似数据的分类标签。一般来说,只选择样本数据集中前k个最相似的数据。

伪代码:

1)计算已知类别数据集中的点与当前点之间的距离;

2)按照距离递增次序排序;

3)选取与当前点距离最小的k个点;

4)确定前k个点所在类别的出现频率;

5)返回前k个点出现频率最高的类别作为当前点的预测分类。

 1 #-*- coding: UTF-8 -*-
 2 from numpy import *
 3 import operator
 4 
 5 def createDataSet():
 6     group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
 7     labels = [A, A, B, B]
 8     return group, labels
 9 
10 ‘‘‘
11 inX: 用于分类的输入向量
12 dataset: 输入的训练样本集
13 labels: 标签向量
14 k: 选择最近邻的数目
15 其中,标签向量的元素数目和矩阵dataSet的行数相同
16 ‘‘‘
17 def classify0(inX, dataSet, labels, k):
18     dataSetSize = dataSet.shape[0]    #返回dataSet的行数
19     diffMat = tile(inX, (dataSetSize, 1)) - dataSet
20     sqDiffMat = diffMat ** 2
21     sqDistances = sqDiffMat.sum(axis=1)    #按行求和
22     distances = sqDistances ** 0.5    #计算欧式距离
23     sortedDistIndicies = distances.argsort()    #返回的数组为distances的值从小到大的索引值
24     
25     classCount = {}
26     for i in range(k):
27         voteIlabel = labels[sortedDistIndicies[i]]
28         classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1  #统计各类别的次数
29     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
30     return sortedClassCount[0][0]  #返回第一个元素,即前3个中最多的类别
31 
32 if __name__ == __main__:
33     group, labels = createDataSet()
34     print classify0([0, 0], group, labels, 3)  #输出B

 

dict.get(‘key‘)类似于dict[‘key‘].

dict.get(‘key‘, sthelse)  #若key不是dict的键值,将得到sthelse的值

>>> info = {1:first, 2:second, 3:third}
>>> info.get(1)
first
>>> info.get(4,error)
error
>>> info[‘1‘]
‘first‘
classCount.iteritems()  #返回键值-值对的一个迭代器
#operator.itemgetter函数获取的不是一个值,而是定义了一个函数
>>> import operator >>> a = [1,2,3] >>> b = operator.itemgetter(1)  #定义函数b,获取对象index==1的值 >>> b(a) 2

sorted(iterable[, cmp[, key[, reverse]]])  #返回list。key为函数,指定取待排序元素的哪一项进行排序

>>> import operator
>>> dict = {a:3, b:2, c:1}
>>> sorted(dict.iteritems(), key=lambda asd:asd[0], reverse=True)  
[(c, 1), (b, 2), (a, 3)]
>>> sorted(dict.iteritems(), key=operator.itemgetter(0), reverse=True)  #按dict.iteritems()的第一个元素倒序排序
[(c, 1), (b, 2), (a, 3)]
>>> sorted(dict.iteritems(), key=operator.itemgetter(1), reverse=True)  
[(a, 3), (b, 2), (c, 1)]

  

机器学习实战——第二章

标签:

原文地址:http://www.cnblogs.com/wjq-Law/p/4190774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!