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. 用户从地址栏输入url,按下enter键后,直到页面加载完成的这个过程都发生了什么?

    流程大概描述一下: 用户将url输入后,服务器接受到请求,然后将这个请求进行处理,然后将处理后的结果返回给浏览器,浏览器将该结果以页面的形式呈现给用户. 详细描述: 1:用户将url(例如www.ba ...

  2. HCNP - Server

    Server DHCP配置 DHCP服务器配置: 第一种方法:自动配置 路由上面配置网关,开启dhcp服务 [R1]dhcp enable [R1-GigabitEthernet0/0/0]dhcp ...

  3. Home Assistant系列 -- 接入手机摄像头做实时监控和人脸识别

    准备一部废旧(土豪忽略,主要是穷)的.摄像头还是好的手机做监控设备,(Android 和iPhone都行)当Home Assistant 获得实时的视频流后,可以接入各种图像处理组件完成人脸识别,动作 ...

  4. Dbshop v1.3任意用户密码重置漏洞

    0x00 前言 年也过的差不多了,各自也都回到岗位忙碌起来了,新的一年祝大家诸事顺利,洞洞高危!好了进入正题 0x01 漏洞简介 本次主要写个简单的逻辑漏洞!然后抛个Message 内置高危. 1.找 ...

  5. 基于visual studio 2017 以及cubemx 搭建stm32的开发环境(2)

    主要解决 vs2017中,printf无法打印数据的问题. 在keil环境下正常使用printf功能,但是以下的重定向代码在vs2017下使用不了: #ifdef __GNUC__ /* With G ...

  6. 在Linux Mint 19 / Linux Mint 18上安装VirtualBox 6.0 / 5.2

    如果你直接可以 sudo apt-get install virtualbox-6.0那就相安无事 否则参考https://www.itzgeek.com/how-tos/linux/linux-mi ...

  7. css中元素的分类

    按照显示元素分类: 行内元素(lnline-element):元素的高度,行高,顶底边距由元素所包含的图片或文字所决定,不可改变:其宽度为内容文字或图片的宽度所决定,而其左右边距可人为设置. 行内元素 ...

  8. Oracle入门第六天(上)——用户控制

    一.概述 权限的分类: 系统权限: 对于数据库的权限 对象权限: 操作数据库对象的权限 基本上,权限的控制和之前介绍的管理控制台是相通的,所以基本可以大概将此节看作图形化操作的SQL语句操作版本 二. ...

  9. AWT之—画图

    package edu.ch4; import java.awt.Color;import java.awt.Font;import java.awt.Frame;import java.util.C ...

  10. 20155210潘滢昊 Java第二次试验

    20155210潘滢昊 Java第二次试验 实验内容 学会JunitTest的使用 实验代码 MyUtilTest代码: import org.junit.*; import junit.framew ...