机器学习实战01——kNN(1)

说明

针对《机器学习实战》第19页程序清单2-1的代码,我在理解的基础上,改写了一部分代码并在处理部分数据后完成了绘图

代码

from numpy import *
import matplotlib.pyplot as plt

def createInfo():
    dataSet = [[2,2],[2.5,2.4],[1.6,1.7],[0.7,0.7],[1,0],[1,1]]
    labels = ['big','big','big','small','small','small']
    return array(dataSet),array(labels)

def classify(inX,dataSet,labels,k):
    rows = dataSet.shape[0]
    inX = tile(inX,(rows,1))
    inX = inX-dataSet
    inX = (inX**2).sum(axis=1)
    distance = inX**0.5
    index = distance.argsort()
    dict = {}
    for i in range(k):
        pos = labels[index[i]]
        dict[pos] = dict.get(pos,0)+1
    Dict = sorted(dict.items(),key=lambda x:x[1],reverse=True)
    return Dict[0][0]

dataSet,labels = createInfo()
print(classify([1,1.5],dataSet,labels,3))

num_label = []
for item in labels:
    if item=='big':
        num_label.append(2)
    else:
        num_label.append(1)
num_label.append(3)
num_label = array(num_label)
dataSet = row_stack((dataSet,[1,1.5]))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.scatter(dataSet[:,0],dataSet[:,1],15*num_label,num_label)
plt.show()

注意

scatter中的参数都要保证是array类型而不能是list类型,否则会报错

总结

kNN算法逻辑较为简单,大家可以利用debug模式逐步查看每个变量,就能逐渐理解代码前后的逻辑

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值