……

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

1、K邻近算法

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

这里写图片描述

2、算法步骤:

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

3、距离

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

4、例子

这里写图片描述
将其映射到2维空间
这里写图片描述

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

5、算法优缺点:

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

缺点

      1)需要大量空间储存所有已知实例
      2)算法复杂度高(需要比较所有已知实例与要分类的实例)
      3) 当其样本分布不平衡时,比如其中一类样本过大(实例数量过多)占主导的时候,新的未知实例容易被归类为这个主导样本,因为这类样本实例的数量过大,但这个新的未知实例实际并木接近目标样本

 

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

 

 posted on 2020-05-18 17:29  大码王  阅读(312)  评论(0编辑  收藏  举报
复制代码