资源简介
机器学习实战之02-k近邻算法全部源代码+测试数据+详细注释
代码片段和文件信息
#coding=UTF8
from numpy import *
import operator
def createDataSet():
“““
函数作用:构建一组训练数据(训练样本),共4个样本
同时给出了这4个样本的标签,及labels
“““
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 是输入的测试样本,是一个[x y]样式的
dataset 是训练样本集
labels 是训练样本标签
k 是top k最相近的
“““
# shape返回矩阵的[行数,列数],
# 那么shape[0]获取数据集的行数,
# 行数就是样本的数量
dataSetSize = dataset.shape[0]
“““
下面的求距离过程就是按照欧氏距离的公式计算的。
即 根号(x^2+y^2)
“““
# tile属于numpy模块下边的函数
# tile(A reps)返回一个shape=reps的矩阵,矩阵的每个元素是A
# 比如 A=[012] 那么,tile(A 2)= [0 1 2 0 1 2]
# tile(A(22)) = [[0 1 2 0 1 2]
# [0 1 2 0 1 2]]
# tile(A(212)) = [[[0 1 2 0 1 2]]
# [[0 1 2 0 1 2]]]
# 上边那个结果的分开理解就是:
# 最外层是2个元素,即最外边的[]中包含2个元素,类似于[CD]而此处的C=D,因为是复制出来的
# 然后C包含1个元素,即C=[E]同理D=[E]
# 最后E包含2个元素,即E=[FG]此处F=G,因为是复制出来的
# F就是A了,基础元素
# 综合起来就是(212)= [C C] = [[E] [E]] = [[[F F]] [[F F]]] = [[[A A]] [[A A]]]
# 这个地方就是为了把输入的测试样本扩展为和dataset的shape一样,然后就可以直接做矩阵减法了。
# 比如,dataset有4个样本,就是4*2的矩阵,输入测试样本肯定是一个了,就是1*2,为了计算输入样本与训练样本的距离
# 那么,需要对这个数据进行作差。这是一次比较,因为训练样本有n个,那么就要进行n次比较;
# 为了方便计算,把输入样本复制n次,然后直接与训练样本作矩阵差运算,就可以一次性比较了n个样本。
# 比如inX = [01]dataset就用函数返回的结果,那么
# tile(inX (41))= [[ 0.0 1.0]
# [ 0.0 1.0]
# [ 0.0 1.0]
# [ 0.0 1.0]]
# 作差之后
# diffMat = [[-1.0-0.1]
# [-1.0 0.0]
# [ 0.0 1.0]
# [ 0.0 0.9]]
diffMat = tile(inX (dataSetSize 1)) - dataset
# diffMat就是输入样本与每个训练样本的差值,然后对其每个x和y的差值进行平方运算。
# diffMat是一个矩阵,矩阵**2表示对矩阵中的每个元素进行**2操作,即平方。
# sqDiffMat = [[1.0 0.01]
# [1.0 0.0 ]
# [0.0 1.0 ]
# [0.0 0.81]]
sqDiffMat = diffMat ** 2
# axis=1表示按照横轴,sum表示累加,即按照行进行累加。
# sqDistance = [[1.01]
# [1.0 ]
# [1.0 ]
# [0.81]]
sqDistance = sqDiffMat.sum(axis=1)
# 对平方和进行开根号
distance = sqDistance ** 0.5
# 按照升序进行快速排序,返回的是原数组的下标。
# 比如,x = [30 10 20 40]
# 升序排序后应该是[10203040]他们的原下标是[1203]
# 那么,numpy.argsort(x) = [1 2 0 3]
sortedDistIndicies = distance.argsort()
# 存放最终的分类结果及相应的结果投票数
classCount = {}
# 投票过程,就是统计前k个最近的样本所属类别包含的样本个数
for i in range(k):
# index = sortedDistIndicies[i]是第i个最相近的样本下标
# voteIlabel = labels[index]是样本index对应的分类结果(‘A‘ or ‘B‘)
voteIlabel = labels[sortedDistIndicies[i]]
# classCount.get(voteIlabel 0)返回voteIlabel的值,如果不存在,则返回0
# 然后将票数增1
classCount[voteIlabel] = classCount.get(voteIlabel
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
I.A.... 4791 2015-11-07 16:17 chapter2\2.1最简单的分类器\simple kNN.py
I.A.... 35725 2012-03-01 15:40 chapter2\2.2改进kNN分类约会网站\datingTestSet.txt
I.A.... 27067 2012-03-01 15:39 chapter2\2.2改进kNN分类约会网站\datingTestSet2.txt
I.A.... 7151 2015-11-07 16:47 chapter2\2.2改进kNN分类约会网站\kNN_improve.py
I.A.... 8325 2015-11-07 17:09 chapter2\2.3手写数字识别\kNN.py
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_0.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_1.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_10.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_11.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_12.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_13.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_14.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_15.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_16.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_17.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_18.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_19.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_2.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_20.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_21.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_22.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_23.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_24.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_25.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_26.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_27.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_28.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_29.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_3.txt
I.A.... 1088 2010-10-07 21:35 chapter2\2.3手写数字识别\testDigits\0_30.txt
............此处省略2864个文件信息
评论
共有 条评论