机器学习实战第二章----KNN

时间:2022-09-02 12:05:25
  1. tile的使用方法

    tile(A,n)的功能是把A数组重复n次(可以在列方向,也可以在行方向)
  2. argsort()函数

    argsort()函数返回的是数组中值从大到小的索引值
  3. dict.get()函数

    语法:dict.get(key, default=None)

    key----字典中要查找的键

    default----如果指定的简直不存在时,返回该默认值
  4. add_subplot()基础用法
import matplotlib.pyplot as plt
from numpy import *
fig = plt.figure()
ax = fig.add_subplot(349)
ax.plot(x,y)

将画布分成三行四列,在第九个分区画图

KNN实例代码

from numpy import *
from os import listdir
import operator 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 # 对数据进行分类
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #shape[0]获取第一维的数目
diffMat = tile(inX, (dataSetSize, 1)) - dataSet # tile??????
sqDiffMat = diffMat**2
# 求差的平方和
sqDistance = sqDiffMat.sum(axis=1) #axis=1???????sum函数默认是axis=0列元素相加,axis=1是一行的元素求和
# 求标准差
distances = sqDistance**0.5
# 距离排序
sortDistIndicies = distances.argsort() #argsort函数返回的是数组值从小到大的索引值
# 定义元字典
classCount = {}
for i in range(k):
# 获得前k个元素的标签
voteIlabel = labels[sortDistIndicies[i]]
# 计算前k个数据标签出现的次数
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #dict.get()???????????
sortedClassCount = sorted(classCount.items(),key = operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0] # 读取文本文件数据
def file2matrix(filename):
fr = open(filename)
lines = fr.readlines()
num_lines = len(lines)
train_matrix = zeros((num_lines, 3))
label_vector = []
index = 0
for line in lines:
line = line.strip()
line_list = line.split('\t')
train_matrix[index, :] = line_list[0:3] # 获取列表的前0,1,2列
label_vector.append(int(line_list[-1])) # 获取列表的最后一列
index += 1
return train_matrix, label_vector # add_subplot???????????????? #归一化函数
def autoNorm(dataSet):
minVals = dataSet.min(0)
maxVals = dataSet.max(0)
ranges = maxVals - minVals
# normDataSet = zeros(shape(dataSet))
m = dataSet.shape[0]
normDataSet = dataSet - tile(minVals, (m, 1)) # minVals在列上重复一次(本身),在行上重复m次,从而形成m*3的向量
normDataSet = normDataSet/tile(ranges, (m, 1))
return normDataSet, ranges, minVals # 归一化后的数据, 极差范围, 最小值 # 分类器测试函数
def datingClassTest():
hoRatio = 0.10 #测试集比例
datingDataMat, datingLabels = file2matrix('datingTestSet2.txt')
normMat, ranges, minVals = autoNorm(datingDataMat)
m = normMat.shape[0]
numTestVecs = int(m*hoRatio)
errcount = 0.0
for i in range(numTestVecs):
classifierResult = classify0(normMat[i, :], normMat[numTestVecs:m, :], datingLabels[numTestVecs:m], 2)
print("the classifier came back with :%d ,the real answer is :%d" % (classifierResult, datingLabels[i]))
if(classifierResult != datingLabels[i]):
errcount += 1.0
print("the total error rate is: %f" %(errcount/float(numTestVecs))) # 手写字符文件转换成向量
def img2vector(filename):
returnVect = zeros((1, 1024))
fr = open(filename)
for i in range(32):
lineStr = fr.readline()
for j in range(32):
returnVect[0, 32*i+j] = int(lineStr[j])
return returnVect # 手写字符识别测试
def handwritingClassTest():
hwlabels = [] # 定义手写字符标签
trainingFileList = listdir('digits/trainingDigits')
m = len(trainingFileList)
trainingMat = zeros((m, 1024))
for i in range(m):
fileNameStr = trainingFileList[i]
fileStr = fileNameStr.split('.')[0]
classNumStr = fileStr.split('_')[0]
hwlabels.append(classNumStr)
# 把文件变成向量并赋值到trainingMat
trainingMat[i, :] = img2vector('digits/trainingDigits/%s' % fileNameStr)
testFileList = listdir('digits/testDigits')
errcount = 0.0
mTest = len(testFileList)
for i in range(mTest):
fileNameStr = testFileList[i]
fileStr = fileNameStr.split('.')[0]
classNumStr = int(fileStr.split('_')[0])
vectorUnderTest = img2vector('digits/testDigits/%s' % fileNameStr)
classifierResult = classify0(vectorUnderTest, trainingMat, hwlabels, 3)
print('the classifier came back with : %d, the real answer is %d' % (int(classifierResult), classNumStr))
if(int(classifierResult) != int(classNumStr)):
errcount += 1
print('\nthe total number of errors is %d' % errcount)
print('\nthe total error rate is: %f' % float(errcount/mTest))

机器学习实战第二章----KNN的更多相关文章

  1. #Spring实战第二章学习笔记————装配Bean

    Spring实战第二章学习笔记----装配Bean 创建应用对象之间协作关系的行为通常称为装配(wiring).这也是依赖注入(DI)的本质. Spring配置的可选方案 当描述bean如何被装配时, ...

  2. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

  3. Day2 《机器学习》第二章学习笔记

    这一章应该算是比价了理论的一章,我有些概率论基础,不过起初有些地方还是没看多大懂.其中有些公式的定义和模型误差的推导应该还是很眼熟的,就是之前在概率论课上提过的,不过有些模糊了,当时课上学得比较浅. ...

  4. 机器学习实战1-2&period;1 KNN改进约会网站的配对效果 datingTestSet2&period;txt 下载方法

    今天读<机器学习实战>读到了使用k-临近算法改进约会网站的配对效果,道理我都懂,但是看到代码里面的数据样本集 datingTestSet2.txt 有点懵,这个样本集在哪里,只给了我一个文 ...

  5. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  6. RxJava2实战--第二章 RxJava基础知识

    第二章 RxJava基础知识 1. Observable 1.1 RxJava的使用三步骤 创建Observable 创建Observer 使用subscribe()进行订阅 Observable.j ...

  7. activiti实战--第二章--搭建Activiti开发环境及简单示例

    (一)搭建开发环境 学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html ...

  8. 2017&period;2&period;20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例

    学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...

  9. 2017&period;2&period;20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境

    学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...

随机推荐

  1. Hammer&period;js分析(二)——manager&period;js

    “Manager”是所有识别器实例的容器,它为你设置的元素安装了交互事件监听器,并设置了触摸事件特性. manager.js中的代码会涉及到input.js和recoginzer.js中的内容,这里会 ...

  2. Ubuntu16&period;04安装vim插件YouCompleteMe

    原文 1 下载 git clone --recursive git://github.com/Valloric/YouCompleteMe 如果执行该命令没报错, 就ok了. 但是中途有可能会断掉, ...

  3. python 循环嵌套

    需求如下: 1. #定义商品列表类 # def shangpin_list(): # for i in com_list: # print(com_list.index(i),end=" & ...

  4. NFS服务器搭建

    1. 安装nfs-kernel-server,然后编辑/etc/exports. /sambadata/nfsserver    10.0.0.0/255.255.255.0(fsid=0,all_s ...

  5. strcpy之代码的健壮性与可维护性

    strcpy   函数的原型是: char * strcpy(char * strDest,const char * strSrc);    功能:把从strSrc地址开始且含有NULL结束符的字符串 ...

  6. jchat:linux聊天程序2:MySQL

    该软件使用的数据库为MySQL,因为它免费.开源,在linux下几乎就是最好的选择. 首先要在mysql中root用户新建数据库并赋权给本用户: create database jchat; gran ...

  7. git本地仓库与github远程仓库链接协议问题

    前提条件:有github账号,本地安装了git,能上网. 环境:ubuntu14.0.4LTS 首先在你得在github上创建一个仓库new repository,然后再本地创建一个文件夹mkdir ...

  8. Find The Multiple (poj1426 一个好的做法)

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16505   Accepted: 673 ...

  9. 使用wps插件,实现word转PDF

    项目需求:不打算用office自带的组件实现word转pdf操作 环境需求:安装wps2016专业版 新建一个控制台应用程序 添加引用:在COM下 Kingsoft Add-In Designer和U ...

  10. element-ui table中排序 取消表格默认排序问题

    sortTable  设置为 custom 一定要设置在列上