第L4周:机器学习|K-邻近算法模型

一、基本概念

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

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

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

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


二、代码实现  

我的环境:

  • 语言环境:conda环境 Python3.12.3
  • 编译器:Jupyter Lab
1. 问题简介

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

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

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

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

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

2. 导入数据  

数据标签详解(对应表格纵轴):

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

数据集:

        

import pandas as pd

data=pd.read_table('../data/datingTestSet2.txt',sep='\t',header=None)

data.head()

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

说明: pd.read_table 是 Python 中 pandas 库的一个函数,用于读取文本文件(如 CSV 或 TSV 文件)并将它们转换为 pandas 的 DataFrame 对象。这个函数在 pandas 0.24.0 版本后已经被弃用,建议使用 pd.read_csv 来代替。

补充: pd.read_table的基本用法:

# 读取 CSV 文件
df = pd.read_table('filename.csv', sep=',', header=0)
# 读取 TSV 文件
df = pd.read_table('filename.tsv', sep='\t', header=0)

参数说明:
'filename.csv' 或 'filename.tsv':文件的路径,可以是本地文件路径或 URL。
sep:字段的分隔符,默认是 '\t',对于 CSV 文件可以设置为 ','
header=0:标题行的索引,默认是 0,表示第一行是列名。
header=None:这个参数表示文件中没有标题行。None意味着pandas不会将文件的第一行作为列名,而是会自动生成数字索引作为列名。如果没有标题行,可以设置为 None。
 

如果想要使用 pd.read_csv 来实现相同的功能,可以这样做: 

# 读取 CSV 文件
df = pd.read_csv('filename.csv')
# 读取 TSV 文件
df = pd.read_csv('filename.tsv', sep='\t')
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)

  • data这是一个 pandas DataFrame 对象,它存储了你的数据。
  • "预测结果"这是 DataFrame 中的一个新列名,用于存储预测结果。
  • knc这是一个已经训练好的机器学习模型的实例,它应该有一个 predict 方法可以用来进行预测。
  • predict这是调用 knc 模型的预测方法,它将对数据进行预测。
  • data.iloc[:,:3]这是 pandas 的一个索引操作,iloc 是基于位置的索引方法。: 表示选择所有行,:3 表示选择前三列。这部分代码意味着从 data DataFrame 中选择前三列的所有数据作为特征,用于进行预测。
  • data.head(10)调用会显示 data DataFrame 的前10行,包括新添加的 "预测结果" 列。
6. 模型评分
scoreK = knc.score(X_test,y_test)

print(scoreK)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值