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. Ubuntu下配置MySql

    安装mysql sudo apt-get install mysql-server 检查安装是否成功 sudo netstat -tap | grep mysql 登录mysql mysql -uro ...

  2. python3配置文件的增删改查,记录一下

    #!/usr/bin/env python3 import json #json模块,用于将像字典的字符串转换为字典 import re #re模块,查找替换 import shutil #copy文 ...

  3. Circos Ubuntu 安装

    下载: http://www.circos.ca/software/download/circos/ Perl 需要5.8及以上的版本. 查看版本的命令:    perl -v 解压安装包 安装包是一 ...

  4. python-对于mysql数据库的操作

    python操作mysql数据库 问题:DDL,DCL,DML的区别? 语言与框架:jdbc/odbc操作数据库 java(ibatis/hibernate/jpa)操作数据库 客户端工具:navic ...

  5. ASP.NET <% %>的各种形式用法

    1.<% %>用来绑定后台代码 < % ;i<;i++) { Reaponse.Write(i.ToString()); } %> 2.<%# %> 是在绑定 ...

  6. C#基础 base与this关键字

    base和this在C#中被归于访问关键字,顾名思义,就是用于实现继承机制的访问操作来满足对对象成员的访问,从而为多态机制提供更加灵活的处理方式. this是指当前对象本身,而base则是在继承类中访 ...

  7. 2016-2017-2 《Java程序设计》课程总结 - 20155214

    2016-2017-2 <Java程序设计>课程总结 - 20155214 目录 一.每周学习总结及实验报告链接汇总 二.代码托管 给出statistic.sh的运行结果,说明本学期的代码 ...

  8. 实验2 Windows口令破解

    实验2 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验工具 LC5 实验原理 口令破解方法: 口令破解主要有两种方法:字典破 ...

  9. 20155226 实验一《Java开发环境的熟悉》实验报告

    20155226 实验一<Java开发环境的熟悉>实验报告 一. 实验内容及步骤 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 输入cd Code进入Code文件夹里 ...

  10. PANIC: HOME is defined but could not find Nexus_4_API_22.ini file in $HOME/.android/avd (Note: avd is searched in the order of $ANDROID_AVD_HOME,$ANDROID_SDK_HOME/.android/avd and $HOME/.android/avd)

    sudo cp /root/.android/avd/*.ini  $Home/.android/avd/ sudo cp -r  /root/.android/avd/*.avd  $Home/.a ...