Machine Learning-KNN
思路:如果一个样本在特征空间中的k个最相近的样本中大多数属于某个类别,则该样本也属于该类别;
这段话中涉及到KNN的三要素:K、距离度量、决策规则
- K:KNN的算法的结果很大程度取决于K值的选择;

If it's too small, the we gain efficiency but become susceptible to noise and outlier data points.
If it's too large, the we are at risk of over-smoothing our classification results and increasing bias.
- 距离度量:
欧式距离:
\]
曼哈顿距离:
\]
- 决策规则:
- 空间中距离越近的点属于一类的可能性就越大;
- 使用前K个样本中多数类别;
算法过程描述:
- 计算测试样本与训练数据之间的距离;
- 得到距离按照递增关系排序;
- 选取距离最小的K个样本;
- 确定选择的K个样本中类别出现的频率;
- 选择出现频率最大的类别作为测试样本的类别;
KNN算法的优缺点:
优点:
- 精度高,对异常值不敏感、无数据输入假定;
- 简单有效,易理解;
缺点:
- 计算复杂度高、空间复杂度高;
- 无法给出任何数据的基础结构信息;
训练简单,测试难;
k-NN更适合低维特征空间,而不适合图片,图片是高维特征空间;
不能进行学习,也就说如果犯错误了,不能变得更聪明;
仅仅依赖于n维空间的distance做分类
KNN算法实现(Python):
默认:已经获取到训练数据\(dataSet \in R^{m \times n}\)、训练集标签\(labels \in R^n\)、测试样本\(inX \in R^{1 \times n}\);
def classify(inX, dataSet, labels, k=3):
# 首先计算测试样本与训练数据之间的欧式距离
m = dataSet.shape[0]
diffMat = np.tile(inX, (m, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistance = sqDiffMat.sum(dim=1)
distance = sqDistance ** 0.5
# 排序,并选择距离最近的前k中样本中类别数目最多的类别
sortedDistanceIndex = distance.argsort()
classCount = {} # 保存距离最近的前k个样本中的类别个数
for i in range(k):
votelabel = labels[sortedDistanceIndex[i]]
classCount[votelabel] = classCount.get(votelabel, 0) + 1 # 有则返回,无则置0
sortedClassCount = np.sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]
sklearn中使用KNN:
# *- coding: utf-8 -*
"""
使用sklearn实现knn
"""
# =====================================
from sklearn import neighbors
from sklearn import datasets
# load dataset
iris = datasets.load_iris()
iris_x = iris.data
iris_y = iris.target
# model
knn = neighbors.KNeighborsClassifier()
# 训练
knn.fit(iris_x, iris_y)
# 预测
predictedLabel = knn.predict(iris_x)
error = sum(abs(predictedLabel - iris_y)) / len(iris_y)
print(error)
reference
Machine Learning-KNN的更多相关文章
- [Machine Learning]k-NN
k-NN最近邻算法 基本思想: 对未知样本X,从训练样本集中获取与其最相近的k个样本,利用这k个样本的类别预测未知样本X的类别. 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- Machine Learning In Action 第二章学习笔记: kNN算法
本文主要记录<Machine Learning In Action>中第二章的内容.书中以两个具体实例来介绍kNN(k nearest neighbors),分别是: 约会对象预测 手写数 ...
- 【Machine Learning】Python开发工具:Anaconda+Sublime
Python开发工具:Anaconda+Sublime 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现 ...
- 【Machine Learning】机器学习及其基础概念简介
机器学习及其基础概念简介 作者:白宁超 2016年12月23日21:24:51 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
- 【Machine Learning】决策树案例:基于python的商品购买能力预测系统
决策树在商品购买能力预测案例中的算法实现 作者:白宁超 2016年12月24日22:05:42 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本 ...
- 【机器学习Machine Learning】资料大全
昨天总结了深度学习的资料,今天把机器学习的资料也总结一下(友情提示:有些网站需要"科学上网"^_^) 推荐几本好书: 1.Pattern Recognition and Machi ...
- [Machine Learning] 国外程序员整理的机器学习资源大全
本文汇编了一些机器学习领域的框架.库以及软件(按编程语言排序). 1. C++ 1.1 计算机视觉 CCV —基于C语言/提供缓存/核心的机器视觉库,新颖的机器视觉库 OpenCV—它提供C++, C ...
- SOME USEFUL MACHINE LEARNING LIBRARIES.
from: http://www.erogol.com/broad-view-machine-learning-libraries/ http://www.slideshare.net/Vincenz ...
随机推荐
- mvc购物车项目(2)
为了避免数据冗余,我们可以把共同的信息,抽出建立一个单独的表,把不是共有的信息,建立一张单独表. 订单表分为两个表 create table orders( id number primary key ...
- IO流 相关基础积累
一个整型32位字节. 写入到流.? 为什么要按十六进制输出到控制台?
- bzoj5329 战略游戏
有一个圆方树,每次给出一个点集,询问虚树上圆点数量-询问点数量 sol:题意读懂就很简单了...可以建虚树dp 也可以考虑每一条链对答案的贡献,最后要注意单独计算虚树根对答案的贡献 #pragma G ...
- diea破解
选择菜单Help->Register->License server,填上http://idea.iteblog.com/key.php,如图所示: 点击Activate,然后就搞定了.
- 【Google】循环字符串里面的独立子串
转载自九章算法(地址) 题目: 假设s是一个无限循环的字符串”abcdefghijklmnopqrstuvwxyz”,s就是一个”...zabcdefghijklmnopqrstuvwxyza...” ...
- 【LeetCode】001. Two Sum
题目: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- nvidia-docker 安装
1.安装docker 官方网址安装说明 https://docs.docker.com/install/linux/docker-ce/ubuntu/ 2.ubuntu 14.04/16.04/18. ...
- BZOJ4364:[IOI2014]Wall
浅谈区间最值操作与历史最值问题:https://www.cnblogs.com/AKMer/p/10225100.html 题目传送门:https://lydsy.com/JudgeOnline/pr ...
- 如何在开启了log-bin的MySQL Server中创建FUNCTION
在MySQL主从复制机器的master的数据库中创建function,报出如下错误: Error Code: 1418. This function has none of DETERMINISTIC ...
- Linux不停往外发包
一台Linux这两天不停往外发包,造成外部无法访问. [root@ct-nat ~]# watch ifconfig-------------查看数据包新增情况 Every 2.0s: ifconfi ...