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.1 KNN改进约会网站的配对效果 datingTestSet2.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. .NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)

    一.引言 上一篇.NET ORM框架HiSql实战-第一章-集成HiSql 已经完成了Hisql的引入,本节就把 项目中的菜单管理改成hisql的方式实现. 菜单管理界面如图: 二.修改增删改查相关代 ...

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

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

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

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

随机推荐

  1. docker 入门 (一)重要概念介绍

    序 之前一直想学一下docker,但是基本看完就忘记了,下次用还是要再翻一下教程. 最近项目要用,连续用了一段时间,就熟练了,基本的使用以及概念都记住了. 趁现在还刚入门,就把入门一些容易遇到的问题记 ...

  2. Java使用多线程实现Socket多客户端的通信

    要想详细了解socket,大家请自行百度,我这里只简单介绍. 在网络中,我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程.而socket编程就是为了完成两个唯一进程之间的通信(一个是客户端, ...

  3. sqli-labs(less-11-16)

    POST登入 首先试试 uname=admin'# & passwd=1 登入成功 如果不知道用户名 ,注释符被过滤,可以从password入手 一般第一个登陆字段(一般是用户名)就用注释,第 ...

  4. C语言顺序队列

    顺序队列是一种只能在一头进和另一头出的数据结构,所以结构体里设2个指针分别指向头部和尾部,用数组来存储数据. #define MAXSIZE 1024 typedef int elemtype; ty ...

  5. 20155232 2016-2017-3 《Java程序设计》第4周学习总结

    20155232 2016-2017-3 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 所谓继承就是避免多个类间重复定义共同行为. 1.重复在程序设计上就是不好 ...

  6. C语言 结构体学习

    结构体的学习 struct 结构是由基本数据类型构成的.并用一个标识符来命名的各种变量的组合. 结构中可以使用不同的数据类型. 结构说明和结构变量定义 在Turbo C中, 结构也是一种数据类型,可以 ...

  7. C语言复习20170728

    C语言复习20170728 键盘输入和屏幕输出 字符常量:把字符放在一对单引号内,适用于多数可打印字符. 转义字符: 以反斜线()开头,也是放在一对单引号内,适用于控制字符. .\t,是水平制表符,相 ...

  8. JDK核心源码

    一.核心包有哪些? Jdk的包中,除开了lang包下面的类,用得最多的应该要属于util包下面的类了, 本篇文章主要针对Jdk的util包下面的类(util目录下面的类,暂时不包括util 包下面的子 ...

  9. 让div跟着鼠标移动

    朋友求助帖 具体实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  10. .net core 部署 Docker 所遇到的几个问题

    1.Connection reset by peer 造成这个问题的主要原因是在program.cs 文件中,未加入端口: public static IWebHostBuilder CreateWe ...