当前位置:   article > 正文

机器学习第9天:K-邻近算法模型(KNN)_knn最近邻分类算法是模型吗

knn最近邻分类算法是模型吗


一、前言

  • 语言环境:Python3.6.5
  • 编译器:jupyter notebook
  • 代码|数据:微信公众号(K同学啊)中回复:第8天

二、基本概念

商业哲学家 Jim Rohn 说过一句话,“你,就是你最常接触的五个人的平均。”那么,在分析一个人时,我们不妨观察和他最亲密的几个人。同理的,在判定一个未知事物时,可以观察离它最近的几个样本,这就是KNN(k最近邻)的方法。

K-近邻算法是一种基本分类和回归方法

K-近邻算法,即是给定一个训练数据集,输入一个新的实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例主要是哪一类别,那么就把该实例分类到这个类中。引用维基百科上的一幅图:
在这里插入图片描述
蓝色方块与红色三角形为训练集中的实例,绿色小圆是新输入的实例,现在在现有实例中取K个离小绿圆最近实例用于判断其类别。

  • 当K=3时,所取实例在实线圆内,红三角占比最大,将新输入实例归为红三角一类。
  • 当K=5时,所取实例在虚线圆内,绿方块占比最大,将新输入实例归为绿方块一类。

在KNN中存在两个重要问题,一个是K的取值问题,一个是距离计算问题,这里先不做讨论,仅仅引入KNN这个概念,明白它是一个什么东西,在后面文章中我们再对这两个问题进行深入讨论。下文将通过sklearn包来实现KNN。

三、代码实现

1. 问题简介

背景: 海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的人选,但她没有从中找到喜欢的人。经过一番总结,她发现曾交往过三种类型的人:

  • ①不喜欢的人;
  • ②魅力一般的人;
  • ③极具魅力的人。

她现在总结好的数据中(即训练集)包含三种特征:

  • ①每年获得的飞行常客里程数
  • ②玩视频游戏所耗时间百分比
  • ③每周消费的冰淇淋公升数

她希望根据现有的数据来判断一个陌生男人会被她归到哪一类。

2.导入数据

import pandas as pd
data=pd.read_table('../data/datingTestSet2.txt',sep='\t',header=None)
data.head()
"""
0:每年获得的飞行常客里程数
1:玩视频游戏所耗时间百分比
2:每周消费的冰淇淋公升数
3:人物类别(不喜欢的人、魅力一般的人、极具魅力的人)
输出:
      0	        1	        2	    3
0	40920	8.326976	0.953952	3
1	14488	7.153469	1.673904	2
2	26052	1.441871	0.805124	1
3	75136	13.147394	0.428964	1
4	38344	1.669788	0.134296	1
"""
X = data.iloc[:,:3]
y = data.iloc[:,3]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3.将数据集分成训练集和测试集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=3)
  • 1
  • 2

4.K-邻近算法模型

from sklearn.neighbors import KNeighborsClassifier
knc = KNeighborsClassifier()
knc.fit(X_train, y_train)
  • 1
  • 2
  • 3

5.结果预测

data["预测结果"] = knc.predict(data.iloc[:,:3])
data.head(10)
"""
输出:
	  0      	1	        2	    3	预测结果
0	40920	8.326976	0.953952	3	   3
1	14488	7.153469	1.673904	2	   2
2	26052	1.441871	0.805124	1	   3
3	75136	13.147394	0.428964	1	   1
4	38344	1.669788	0.134296	1	   3
5	72993	10.141740	1.032955	1	   1
6	35948	6.830792	1.213192	3	   3
7	42666	13.276369	0.543880	3	   3
8	67497	8.631577	0.749278	1	   1
9	35483	12.273169	1.508053	3	   3
"""
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

6.模型评分

knc.score(X_test,y_test)
"""
输出:0.796
"""
  • 1
  • 2
  • 3
  • 4

参考文章:
1.https://zhuanlan.zhihu.com/p/25994179
2.维基百科
3.https://www.joinquant.com/view/community/detail/a98b7021e7391c62f6369207242700b2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/998571?site
推荐阅读
相关标签
  

闽ICP备14008679号