机器学习算法及代码实现--K邻近算法

机器学习算法及代码实现–K邻近算法

1、K邻近算法

将标注好类别的训练样本映射到X(选取的特征数)维的坐标系之中,同样将测试样本映射到X维的坐标系之中,选取距离该测试样本欧氏距离(两点间距离公式)最近的k个训练样本,其中哪个训练样本类别占比最大,我们就认为它是该测试样本所属的类别。

机器学习算法及代码实现--K邻近算法_第1张图片

2、算法步骤:

 1)为了判断未知实例的类别,以所有已知类别的实例作为参照
 2)选择参数K
 3)计算未知实例与所有已知实例的距离
 4)选择最近K个已知实例
 5)根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多数的类别

3、距离

Euclidean Distance 定义
其他距离衡量:余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)
这里写图片描述
其他距离衡量:余弦值(cos), 相关度 (correlation), 曼哈顿距离 (Manhattan distance)

4、例子

机器学习算法及代码实现--K邻近算法_第2张图片
将其映射到2维空间
机器学习算法及代码实现--K邻近算法_第3张图片

求距G点最近的k点中哪一类点最多,就可以预测G点类型。

5、算法优缺点:

优点
1)简单
2)易于理解
3)容易实现
4)通过对K的选择可具备丢噪音数据的健壮性

缺点

      1)需要大量空间储存所有已知实例
      2)算法复杂度高(需要比较所有已知实例与要分类的实例)
      3) 当其样本分布不平衡时,比如其中一类样本过大(实例数量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并木接近目标样本
      ![这里写图片描述](https://img-blog.csdn.net/20170405195345724?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzE0NTY1OTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

6、 改进版本

  考虑距离,根据距离加上权重
  比如: 1/d (d: 距离)

代码

# -*- coding: utf-8 -*-
from sklearn import neighbors
from sklearn import datasets
# 调用knn分类器
knn = neighbors.KNeighborsClassifier()
# 导入数据集
iris = datasets.load_iris()

print iris

# 训练
knn.fit(iris.data, iris.target)

# 预测
predictedLabel = knn.predict([[0.1, 0.2, 0.3, 0.4]])
print 'predictedLabel:'
print predictedLabel

你可能感兴趣的:(学习心得)