学习笔记
示例0:kNN入门
步骤
-
新建kNN.py文件
-
在kNN.py文件中导入相关包
from numpy import * import operator
-
在kNN.py文件中编写生成数据集的函数
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
-
在kNN.py文件中编写kNN分类算法
def classify0(inX,dataSet,labels,k): dataSetSize = dataSet.shape[0] diffMat = tile(inX, (dataSetSize,1)) - dataSet sqDiffMat = diffMat**2 sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 sortedClassCount = sorted(classCount.items(), key = operator.itemgetter(1), reverse=True) return sortedClassCount[0][0]
-
在IDLE中导入kNN.py文件
-
执行生成数据集函数
-
执行分类算法
>>> import kNN >>> group,labels = kNN.createDataSet() >>> kNN.classify0([0,0],group,labels,3) 'B' >>> kNN.classify0([3,0],group,labels,3) 'A'
示例1:使用kNN算法改进约会网站的配对效果
-
准备数据
在kNN.py文件中编写file2matrix函数把文本转成numpy数组对象
-
分析数据
使用matplotlib制作原始数据的散点图,使用到的命令如下
>>> import matplotlib >>> import matplotlib.pyplot as plt >>> fig = plt.figure() >>> ax = fig.add_subplot() >>> ax.scatter(datingDataMat[:,1],datingDataMat[:,2]) >>> plt.show()
为了区分样本分类,在调用scatter函数时添加两个参数。得到彩色散点图
>>>ax.scatter(datingDataMat[:,1],datingDataMat[:,2],15.0*array(datingLabels),15.0*array(datingLabels))
-
准备数据——归一化数值
将数字特征值转化为0到 1的区间
现在kNN.py文件中编写归一化函数autoNorm( )
重新加载kNN.py模块,执行归一化函数
4. 测试算法——作为完整程序验证分类器
先在kNN.py文件中编写测试函数
重载kNN模块,测试算法的出错率(本地得到的出错率为5%)
5.使用算法
编写完整执行的函数(分类器)
重新加载kNN模块,调用分类器
示例2:使用kNN算法识别手写数字
运行测试函数,得到的出错率约为1%
遇到的问题及解决方案
错误1:‘dict’ object has no attribute 'iteritems’
iteritems是为python2环境中dict的函数,在python3环境中为items。所以将iteritems改为items即可。
错误2:NameError: name ‘reload’ is not defined
重新加载python文件:
在python2中reload( xxx )
在python3.3及以下import imp imp.reload( xxx )
在python3.3以上import importlib importlib.reload( xxx )
错误3:No module named 'matplotlib’
cmd命令窗口输入pip install matplotlib
错误4:NameError: name ‘raw_input’ is not defined
python3.0版本后用input替换了raw_input
错误5:NameError: name ‘listdir’ is not defined
在kNN文件中import os , 然后把listdir()改写成 os.listdir()
【注】导入指定路径的python模块
import sys
sys.path.append('D:/software/python/note/testpy1/test1') #跳转到模块所在目录
import xxx #导入模块