python机器学习手写算法系列——KNN分类

现实当中,富人的邻居可能也是富人,穷人的邻居可能也是穷人。如果你的邻居都是富人,那么,你很可能也是富人。基于此,我们有了KNN算法。KNN的全名是K-Nearest Neighbors,即K个最近的邻居。他通过距离被预测点最近的K个邻居来预测被预测点。

如下图所示,绿色的圆形是被预测点。它周围有红色三角和蓝色正方形。如果我们取K为3,那么,它的三个邻居是两个红色三角和一个蓝色正方形。因为它的邻居里面,最多的就是红色三角,所以我们预测它也是红色三角。

在这里插入图片描述
(图一)

首先,我们载入数据。这里我们以iris数据集为例。

import math
from collections import Counter 
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
# Create color maps
cmap_light = ListedColormap(['orange', 'cyan', 'cornflowerblue'])
cmap_bold = ListedColormap(['darkorange', 'c', 'darkblue'])
from sklearn import neighbors, datasets

n_neighbors = 15

# import some data to play with
iris = datasets.load_iris()

# we only take the first two features. We could avoid this ugly
# slicing by using a two-dim dataset
X = iris.data[:, :2]
y = iris.target

接着,我们写一个KNNClassifier类。这里,最关键的参数当然是k,或者叫n_neighbors。接着,我们写一个fit方法。这个方法除了“记住”数据外,不做任何事情。因为这个特点,我们叫KNN为lazy algorithm。在预测方法predict_one里,我们首先计算被预测点到数据集中每个点的距离,我们得到了 d i s t a n c e _ a r r a y distance\_array distance_array。我们用numpy里面的argsort函数,把这些距离从小到大排序,并得到他们的坐标。我们取前k个坐标,得到相应的标签 n e i g h b o u r _ l a b e l s neighbour\_labels neig

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织网者Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值