knn

这幅图很多算法解释都在用:
在这里插入图片描述
不同形状的点,为不同标签的点。其中绿色点为未知标签的数据点。现在要对绿色点进行预测。由图不难得出:

如果k=3,那么离绿色点最近的有2个红色三角形和1个蓝色的正方形,这3个点投票,于是绿色的这个待分类点属于红色的三角形。
如果k=5,那么离绿色点最近的有2个红色三角形和3个蓝色的正方形,这5个点投票,于是绿色的这个待分类点属于蓝色的正方形。
1 k-邻近算法的流程

搜集数据
准备数据
分析数据
训练算法
测试算法
使用算法

2创建kNN.py

# 科学技术包
from numpy import *
# 运算符模块
import Operator

# 创建数据集
def createDataSet():
    group = array([1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1])
    labels = ['A', 'A', 'B', 'B']
    return group, labels 

接下来我们终端进入python交互模式

mport kNN
group, labels = kNN.createDataSet( )

3分析数据
当拿到一组位置属性的数据时,我们需要一次做如下操作:

计算已有数据集中各个点与当前未知数据点的距离
按照距离递增排序
选取与未知点距离最近的k组数据
确定这k组数据的各标签出现的频率
返回这k组数据出现频率最高的标签作为未知点的标签
4,程序示例

# inX(需要预测分类的向量) dataSet(数据集) labels(标签集) k(邻近算法系数)
def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    diffMat = tile(inX, (dataSetSize, 1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistance = sqDiffMat.sum(axis=1)
    distance = sqDistance**0.5
    sortedDistIndicies = distance.argsort()
    classCount={}
    for i in range(k):
        voteIlable = labels[sortedDistIndicies[i]]
        classCount[voteIlable] = classCount.get(voteIlable, 0) + 1
    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]    

我们逐句分析下:
dataSetSize = dataSet.shape[0] (获取数据集的维度)详细点击
diffMat = tile(inX, (dataSetSize, 1)) - dataSet() (在行方向上重复dataSetSize次, 列方向上重复1此, 然后举证相减)详细介绍
假设inx向量为(x, y), 此时相当于数学上的矩阵相减:
[ x, y] [1.0, 1.1] [x-1, y-1.1]
[ x, y] [1.0, 1.0] [x-1, y-1]
[ x, y] - [0, 0] = [x-0, y-0]
[ x, y] [0, 0.1] [x-0, y-0.1]
sqDiffMat = diffMat**2 (将矩阵每个值平方) 相当于数学上的
[(x-10)², (y-1.1)²]
[(x-1)², (y-1)²]
[(x-0)², (y-0)²]
[(x-0)², (y-0.1)²]
sortedDistIndicies = distance.argsort() (将所得的距离进行排序)
classCount={} (新建一个字典)
for i in range(k): (以k邻近算法系数k循环)
voteIlable = labels[sortedDistIndicies[i]] (依次取出距离最近的k组数据对应的标签)
classCount[voteIlable] = classCount.get(voteIlable, 0) + 1 (以标签为健,以出现的次数为值)
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1), reverse=True) (将字典按照值的大小排序) 详细点击
return sortedClassCount[0][0]
5.距离公式
在KNN中,通过计算对象间距离来作为各个对象之间的非相似性指标,避免了对象之间的匹配问题,在这里距离一般使用欧氏距离或曼哈顿距离:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值