Python学习-机器学习实战-ch02KNN_part1

开始学习《机器学习实战》这本书,感觉书很好,很适合我。

第二章:KNN(k近邻)part1

======================================================================================

KNN的简单实现:

KNN.py

from numpy import *
import operator

def creatDataSet():
    group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels=['A','A','B','B']
    return group,labels

def classify(inX,dataSet,labels,k):
    #待分类为inX
    #训练集为dataSet
    dataSetSize=dataSet.shape[0]
    #shape函数是numpy.core.fromnumeric中的函数
    #读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度。
    diffMat=tile(inX,(dataSetSize,1))-dataSet
    #求输入向量与训练集的差
    #tile位于numpy.lib.shape_base中
    # 功能是重复某个数组。比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,
    sqDiffMat=diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)
    #一般默认sum(axis=0),即普通求和
    #sum(axis=1)表示矩阵的每一行向量相加
    distances=sqDistances**0.5
    #欧式距离
    sortedDistIndicies=distances.argsort()
    #argsort函数返回的是数组值从小到大的索引值
    classCount={}
    for i in range(k):
        voteILabel=labels[sortedDistIndicies[i]]
        classCount[voteILabel]=classCount.get(voteILabel,0)+1
        #get函数表示:若参数voteILabel在classCount中,返回classCount[voteILabel],否则返回0
    sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
    #sorted(iterable, cmp=None, key=None, reverse=False)
    #iterable:是可迭代类型;cmp:用于比较的函数,比较什么由key决定;key:用列表元素的某个属性和函数进行作为关键字;
    #iteritems函数是字典内的键对值
    #operator.itemgetter函数用于获取对象的哪些维度的数据
    #reverse:false为升序,true为降序
    return sortedClassCount[0][0]



执行时,IDE的语句:

>>> import os
>>> os.chdir("D:\learnPY\MachineLearningPY")
>>> import KNN
>>> group,labels=KNN.creatDataSet()
>>> group
array([[ 1. ,  1.1],
       [ 1. ,  1. ],
       [ 0. ,  0. ],
       [ 0. ,  0.1]])
>>> labels
['A', 'A', 'B', 'B']
>>> KNN.classify([0,0],group,labels,3)
'B'

这是一个KNN的简单小例子。与书中相比我加了一点备注。最近又想开始学习python,许多之前的基本结构啊,函数啊都忘了(本来就不会好吗)

加油吧!


你可能感兴趣的:(python学习)