KNN算法:近朱者赤近墨者黑(一)

一个例子:KNN原理

设想一个场景

在一个小镇上有两个小区,一个是高档小区,另一个是贫民区,两个小区中间有一条河流。

某一天,这个小镇上新来了一户人家,在不接触这家人的情况下,你怎么判断新来的这家是不是富人呢?

俗话说“物以类聚,人以群分”,通过他附近的邻居住在哪个小区,几乎就相当于知道了新来的住在哪一个小区了,从而知道这家是不是富人。

这个小栗子,就是KNN算法的作用和原理。

对于一个未知的样本,判断这个样本是哪一个类型,通过他附近最近的几个已知样本的类型,从而预测出未知样本的类型,这就是KNN算法。

又一个例子:使用KNN预测鸢尾花类型

如果你是第一次接触机器学习,一定会觉得,KNN算法用起来一定很难。

如果你真的这样认为的话,那你就真的想错了。

sklearn库是一个机器学习的库,封装好了大量的机器学习算法,包括KNN,用起来非常简单。

现在,我们用KNN做一个小栗子,预测鸢尾花的类型。

鸢尾花的数据是sklearn库自带的,无需下载

先来看一张鸢尾花的图片

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jB09cRYi-1602343443746)(C:\Users\zxc\AppData\Roaming\Typora\typora-user-images\image-20201010211347490.png)]

鸢尾花分为三种类型:

为了代码的方便起见,我们用 0,1,2分别代表三种类型

0:'setosa'
1:'versicolor'
2:'virginica'

那么,判断一朵花是哪种类型,需要哪些步骤呢?

1、数据加载

sklearn库是自带鸢尾花的数据的

from sklearn import datasets

iris = datasets.load_iris()

datasets 是sklearn库自带的数据集,里面有各种数据

load_iris() 就是取出鸢尾花的所有相关数据

该数据源是一个字典类型的,我们来看一下该数据的 key 都有哪些

iris.keys()

dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])

data 是鸢尾花的特征数据,例如花萼长度,花瓣宽度等

target 是鸢尾花的类型

target_names 是 target 中类型代表的含义

feature_names 是鸢尾花特征值的含义

DESCR 是该数据源的简单介绍

现在有个问题,这些数据都是已知类型的呀

所以,我们需要手动将这些数据分为训练集和测试集。

训练集:用于训练模型的数据

测试集:让训练好的模型预测数据,将测试结果与真实结果比较,评判模型

提取出鸢尾花的特征数据与类型

X_data = iris.data
y_data = iris.target

2、加载训练数据与测试数据

将数据的前140条数据作为训练数据(特征值数据与类型,其顺序是一一对应的)

X_data_train = X_data[:-10]
y_data_train = y_data[:-10]

将最后10条数据作为测试数据

X_data_test = X_data[-10:]
y_data_test = y_data[-10:]

3、使用sklearn的KNN进行预测

from sklearn import neighbors

knn = neighbors.KNeighborsClassifier(3)

# 训练模型
knn.fit(X_data_train,y_data_train)

# 预测数据
y_predict = knn.predict(X_data_test)

print(f"预测结果为:{y_predict}")
print(f"实际结果为:{y_data_test}")

4、检查一下预测的正确率

print(f"预测的准确率为:{knn.score(X_data_test,y_data_test)}")

至此,我们已经使用sklearn库的KNN完成了对鸢尾花数据的预测。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值