【ML练习】K-邻近算法模型(KNN)

本周任务:

    1. 学习本文的K-邻近算法
    1. 了解KNeighborsClassifier函数

一、基本概念

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

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

K-近邻算法,即是给定一个训练数据集,输入一个新的实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例主要是哪一类别,那么就把该实例分类到这个类中。引用维基百科上的一幅图:

在这里插入图片描述
蓝色方块与红色三角形为训练集中的实例,绿色小圆是新输入的实例,现在在现有实例中取K个离小绿圆最近实例用于判断其类别。

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

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

二、代码实现

我的环境

  • 语言环境:Python3.10
  • 编译器: Jupyter Notebook

1. 问题简介

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

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

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

  • ①每年获得的飞行常客里程数
  • ②玩视频游戏所耗时间百分比
  • ③每周消费的冰淇淋公升数
    她希望根据现有的数据来判断一个陌生男人会被她归到哪一类。

2. 导入数据

数据标签详解:

  • 0:每年获得的飞行常客里程数
  • 1:玩视频游戏所耗时间百分比
  • 2:每周消费的冰淇淋公升数
  • 3:人物类别(不喜欢的人、魅力一般的人、极具魅力的人)
import pandas as pd

data=pd.read_table('D:/Personal Data/Learning Data/DL Learning Data/datingTestSet2.txt',
                   sep='\t',
                   header=None)

data.head()

在这里插入图片描述

X = data.iloc[:,:3]
y = data.iloc[:,3]
X

在这里插入图片描述

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)

4. K-邻近算法模型

from sklearn.neighbors import KNeighborsClassifier

knc = KNeighborsClassifier()
knc.fit(X_train, y_train)

5. 结果预测

data["预测结果"] = knc.predict(data.iloc[:,:3])
data.head(10)

在这里插入图片描述

6. 模型评分

scoreK = knc.score(X_test,y_test)
print(scoreK)

结果输出:

0.796

三. 总结

在数据特征维度较少的情况下,准确率不会特别理想。可通过特征组合来实现多特征,以便增强准确率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值