机器学习---knn分类器
2016-06-13 19:48
357 查看
knn这个分类器,原理很简单,可以说是机器学习里面最简单的一个分类器。
工作原理:存在一个训练样本集,这些样本集都是有标签,也就是我们知道样本集中每个数据与其类别的对应关系。输入没有标签的新数据后,将新数据与样本集的数据特征进行比较,然后按照特定算法提取样本集中最相似的数据分类标签。举个例子:
电影名称 打斗镜头 接吻镜头 电影类型
california 3 100 爱情片
kevin longbal 101 10 动作片
beautiful 1 80 爱情片
he likes flying 2 100 爱情片
robo slayer 99 5 动作片
ok,大概就举这么多例子,这里有5个电影,给出了两个特征就是打斗镜头和接吻镜头的数量,最后每个样本都有标签分类是爱情片还是动作片。好的,现在我手头有一个电影,比如是taitanic,我知道接吻镜头90个,打斗镜头10个,采用knn怎么去知道这部电影是爱情片还是动作片?计算这部电影与样本集中所有电影的距离,然后递增排序,设定k值,找出这K个电影属于类别最多的作为titanic的分类标签。
计算步骤如下:
1)算距离:给定测试对象,计算它与训练集中的每个对象的距离
2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类
距离衡量:欧氏距离,夹角余弦都可以。
优点:简单,易于理解,精度高,对异常值不敏感,易于实现,无需估计参数,无需训练,适合用在多分类上面
缺点:计算复杂度高,空间复杂度高
常见的几个问题:
1、k值设定为多?
k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根
2、类如何判定?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。
3、如何选择合适的距离衡量?
高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化(不同属性会有不同的区间,比如有的是(0,1),有的(1000,5000),这样在距离计算时候会偏向大值一边,需要归一化或者标准化)。
4、性能问题?
kNN是一种懒惰算法,不需要训练,拿来即用。
构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。
已经有一些方法提高计算的效率,例如压缩训练样本量,kd树等。
ok,贴个小代码作为结尾:
x=[[0],[1],[2],[3]]
y=[0,0,1,1]
from sklearn.neighbors import KNeighborsClassifier
neigh=KNeighborsClassifier(n_neighbors=3)
neigh.fit(x,y)
print(neigh.predict([[1.1]]))
很简单吧,一看就能理解
工作原理:存在一个训练样本集,这些样本集都是有标签,也就是我们知道样本集中每个数据与其类别的对应关系。输入没有标签的新数据后,将新数据与样本集的数据特征进行比较,然后按照特定算法提取样本集中最相似的数据分类标签。举个例子:
电影名称 打斗镜头 接吻镜头 电影类型
california 3 100 爱情片
kevin longbal 101 10 动作片
beautiful 1 80 爱情片
he likes flying 2 100 爱情片
robo slayer 99 5 动作片
ok,大概就举这么多例子,这里有5个电影,给出了两个特征就是打斗镜头和接吻镜头的数量,最后每个样本都有标签分类是爱情片还是动作片。好的,现在我手头有一个电影,比如是taitanic,我知道接吻镜头90个,打斗镜头10个,采用knn怎么去知道这部电影是爱情片还是动作片?计算这部电影与样本集中所有电影的距离,然后递增排序,设定k值,找出这K个电影属于类别最多的作为titanic的分类标签。
计算步骤如下:
1)算距离:给定测试对象,计算它与训练集中的每个对象的距离
2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻
3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类
距离衡量:欧氏距离,夹角余弦都可以。
优点:简单,易于理解,精度高,对异常值不敏感,易于实现,无需估计参数,无需训练,适合用在多分类上面
缺点:计算复杂度高,空间复杂度高
常见的几个问题:
1、k值设定为多?
k太小,分类结果易受噪声点影响;k太大,近邻中又可能包含太多的其它类别的点。(对距离加权,可以降低k值设定的影响)
k值通常是采用交叉检验来确定(以k=1为基准)
经验规则:k一般低于训练样本数的平方根
2、类如何判定?
投票法没有考虑近邻的距离的远近,距离更近的近邻也许更应该决定最终的分类,所以加权投票法更恰当一些。
3、如何选择合适的距离衡量?
高维度对距离衡量的影响:众所周知当变量数越多,欧式距离的区分能力就越差。
变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化(不同属性会有不同的区间,比如有的是(0,1),有的(1000,5000),这样在距离计算时候会偏向大值一边,需要归一化或者标准化)。
4、性能问题?
kNN是一种懒惰算法,不需要训练,拿来即用。
构造模型很简单,但在对测试样本分类地的系统开销大,因为要扫描全部训练样本并计算距离。
已经有一些方法提高计算的效率,例如压缩训练样本量,kd树等。
ok,贴个小代码作为结尾:
x=[[0],[1],[2],[3]]
y=[0,0,1,1]
from sklearn.neighbors import KNeighborsClassifier
neigh=KNeighborsClassifier(n_neighbors=3)
neigh.fit(x,y)
print(neigh.predict([[1.1]]))
很简单吧,一看就能理解
相关文章推荐
- Python实现的knn算法示例
- KMeans算法原理解析与实现
- KNN分类算法原理分析及代码实现
- 《机器学习实战》课程笔记(第2章) k-近邻算法
- 【机器学习】k-近邻算法以及算法实例
- KNN算法
- 机器学习KNN算法很好的解释和实例
- KNN算法
- KNN算法中常用的距离计算公式
- KNN算法
- 机器学习系列03——K近邻算法(KNN)
- 机器学习实战精读--------K-近邻算法
- KNN(K近邻)算法的简单入门
- 用knn算法来预测喜爱程度
- 4.2KNN算法实例2--python机器学习
- 4.2KNN实例1--python机器学习
- 机器学习实战+第二章_k-近邻算法
- python数据挖掘实践第一章 KNN算法,以及算法的实现
- Machine Learning中算法的实现
- KNN算法