机器学习简要笔记(三)-KNN算法
#coding:utf-8 import numpy as np
import operator def classify(intX,dataSet,labels,k):
'''
KNN算法
'''
dataSetSize =dataSet.shape[0]
##numpy 中shape[0]返回数组的行数,shape[1]返回列数
##构建计算矩阵
##intX横向重复dataSetSize次,纵向重复1次
##例如intX=([1,2])--->([[1,2],[1,2],[1,2],[1,2]])便于后面计算
diffMat=np.tile(intX,(dataSetSize,1))-dataSet
##将待分类样品复制dataSetSize份并与dataSet每个测试样一一对应
##计算待分类样品与已知样品的对应特征差值的平方
sqdiffMat=diffMat**2
##计算待分类样品与每个已知样品的欧式距离
seqDistance=sqdiffMat.sum(axis=1) ##axis=1代表横轴(第1轴),0代表竖轴(第0轴)
distance=seqDistance**0.5
print "distance:",distance
##返回distance中元素从小到达排序后的索引
sortDistance=distance.argsort()
print "SortDistance:",sortDistance
classCount={}
for i in range(k):
voteLabel=labels[sortDistance[i]]
#print "第 %d 个 voteLabel = %s" %(i,voteLabel)
classCount[voteLabel]=classCount.get(voteLabel,0)+1
##dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值
##计算类别次数
##key = operator.itemgetter(1)根据字典的值进行排序
##key = operator.itemgetter(0)根据字典的键进行排序
##reverse 降序排序字典
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
##sortClassCount={[“动作片”,2],("爱情片",1])
print "sortedClassCount:",sortedClassCount
return sortedClassCount[0][0] def File2Matrix(filename):
fr=open(filename,'r')
FileLines=fr.readlines()
##获取数据的行数
NumOfFLines=len(FileLines)
##建立数据返回矩阵
returnMat=np.zeros([NumOfFLines,3])
##返回分类标签
classLabelVector=[]
##行索引
index=0
for line in FileLines[1:]:
line=line.strip()##删除收尾空白字符
listFromLine =line.split("\t")
##每行数据是\t划分的,将每行数据按照\t进行切片划分
returnMat[index,:]=listFromLine[1:4]
##根据文本划分为1,2,3类
if listFromLine[-1]=="I. setosa":
classLabelVector.append(1)
elif listFromLine[-1]=="I. versicolor":
classLabelVector.append(2)
else:
classLabelVector.append(3)
index+=1
fr.close()
return returnMat,classLabelVector if __name__ =="__main__":
datas,labels=File2Matrix("iris_data.txt")
print datas[0:4]
print labels[0:4]
test = [5.9,3.0,5.1]
test_class = myKNN.classify(test,datas,labels,5)
if test_class=="":
print "I. setosa"
elif test_class=="":
print "I. virginica"
else:
print "I. versicolor"
'''本文件实现KNN
KNN算法的本质上使用模板匹配的思想。
要确定一个样本的类别,可以计算它与所有训练样本的距离,
然后找出和该样品最接近的k个样本,统计这些样本的类别进行投票,票数最多的那个类就是分类结果。
'''
'''
KNN算法是一种判别算法,即可支持分类,也可支持回归,是一种非线性模型。
它天然的支持多分类问题。KNN算法没有训练过程,是一种基于实例的算法。
KNN实现对Iris数据的分类。
'''
'''
KNN算法步骤
(1)计算距离
(2)选择距离最小的k个点
(3)排序
'''
机器学习简要笔记(三)-KNN算法的更多相关文章
- 机器学习实战笔记-k-近邻算法
机器学习实战笔记-k-近邻算法 目录 1. k-近邻算法概述 2. 示例:使用k-近邻算法改进约会网站的配对效果 3. 示例:手写识别系统 4. 小结 本章介绍了<机器学习实战>这本书中的 ...
- 机器学习实战(笔记)------------KNN算法
1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例: 假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...
- 机器学习实战笔记-2-kNN近邻算法
# k-近邻算法(kNN) 本质是(提取样本集中特征最相似数据(最近邻)的k个分类标签). K-近邻算法的优缺点 例 优点:精度高,对异常值不敏感,无数据输入假定: 缺点:计算复杂度高,空间复杂度高: ...
- python机器学习(2:KNN算法)
1.KNN 简介:knn算法是监督学习中分类方法的一种.它又被叫k近邻算法,是一个概念极其简单而分类效果又很优秀的分类算法. 核心思想:在训练集中选出离输入的数据最近的k个数据,根据这k个数据的类别判 ...
- 机器学习笔记(5) KNN算法
这篇其实应该作为机器学习的第一篇笔记的,但是在刚开始学习的时候,我还没有用博客记录笔记的打算.所以也就想到哪写到哪了. 你在网上搜索机器学习系列文章的话,大部分都是以KNN(k nearest nei ...
- SVM(支持向量机)与统计机器学习 & 也说一下KNN算法
因为SVM和统计机器学习内容很多,所以从 http://www.cnblogs.com/charlesblc/p/6188562.html 这篇文章里面分出来,单独写. 为什么说SVM和统计学关系很大 ...
- 机器学习实战笔记--k近邻算法
#encoding:utf-8 from numpy import * import operator import matplotlib import matplotlib.pyplot as pl ...
- 机器学习:最近邻规则KNN算法
这个算法就比较简单易懂了 就是把每个向量的特征值抽象成坐标,寻找最近的k个点,来进行划分 代码如下 #include <iostream> #include <cstdio> ...
- 机器学习实战笔记-7-AdaBoost元算法
AdaBoost(Adaptive boosting)元算法 元算法:将不同分类器组合起来的结果,也叫集成方法. AdaBoost优点:泛化错误率,易编码,可应用在大部分分类器,无参数调整:缺点:对离 ...
随机推荐
- C# to IL 10 Exception Handling(异常处理)
Exception handling in IL is a big let down. We expected a significant amount of complexity,but were ...
- Git安装和TortoiseGit详细使用教程【基础篇】
标签:tortoisegit 环境:win8.1 64bit 安装准备: 首先你得安装windows下的git msysgit1.9.5 安装版本控制器客户端tortoisegit tortoise ...
- MySQL 中的反引号(`):是为了区分 MySql 关键字与普通字符而引入的符号;一般,表名与字段名都使用反引号。
MySQL 中的反引号(`):是为了区分 MySql 关键字与普通字符而引入的符号:一般,表名与字段名都使用反引号.
- chmod修改权限
1.命令简介 chmod(Change mode) 用来将每个文件的模式更改为指定值.Linux/Unix 的档案调用权限分为三级 : 档案拥有者.群组.其他. u :目录或者文件的当前的用户 g : ...
- java-plupload上传大文件
参考链接: https://blog.csdn.net/hjf_1291030386/article/details/74784172 https://www.cnblogs.com/tengyunh ...
- jmeter ---处理Cookie与Session
有些网站保存信息是使用Cookie,有些则是使用Session.对于这两种方式,JMeter都给予一定的支持. 1.Cookie 添加方式:线程组-配置元件-HTTP Cookie 管理器,如下图: ...
- Linux下安装uci
Compiling UCI as stand alone cd ~ git clone git://nbd.name/uci.git ~/uci cd ~/uci cmake -DBUILD_LUA= ...
- 2017.11.6 - ant design table等组件的使用,以及 chrome 中 network 的使用
一.今日主要任务 悉尼小程序后台管理开发: 景点管理页面: 获取已有数据列表,选取部分数据呈现在表格中,根据景点名称.分类过滤出对应的景点. 二.难点 1. 项目技术选取: ant design. ...
- gtid error set test
1.从库报主键重复(Errno: 1062)#create test data 1062create table t1 (id tinyint not null primary key,ename v ...
- <亲测>CentOS7yum安装PHP7.2
如果之前已经安装我们先卸载一下 yum -y remove php* 由于linux的yum源不存在php7.x,所以我们要更改yum源 rpm -Uvh https://dl.fedoraproje ...