当前位置: 首页 > news >正文

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

  • 本文为🔗365天深度学习训练营 中的学习记录博客
  • 原作者:K同学啊

任务:
●1. 学习本文的K-邻近算法
●2. 了解 KNeighborsClassifier 函数

一、基本概念

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

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

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

在这里插入图片描述

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

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

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

二、代码实现

我的环境:
●语言环境:Python3.9
●编译器:Jupyter Lab

1.问题简介

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

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

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

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

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

2.导入数据

数据标签详解:

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

import pandas as pddata=pd.read_table('./L4/datingTestSet2.txt',sep='\t',header=None)data
0123
0409208.3269760.9539523
1144887.1534691.6739042
2260521.4418710.8051241
37513613.1473940.4289641
4383441.6697880.1342961
...............
995111453.4106270.6318382
996688469.9747150.6697871
9972657510.6501020.8666273
998481119.1345280.7280453
999437577.8826011.3324463

1000 rows × 4 columns

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

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

from sklearn.model_selection import train_test_splitX_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 KNeighborsClassifierknc = KNeighborsClassifier()
knc.fit(X_train, y_train)
  1. 结果预测
data["预测结果"] = knc.predict(data.iloc[:,:3])
data.head(10)
0123预测结果
0409208.3269760.95395233
1144887.1534691.67390422
2260521.4418710.80512413
37513613.1473940.42896411
4383441.6697880.13429613
57299310.1417401.03295511
6359486.8307921.21319233
74266613.2763690.54388033
8674978.6315770.74927811
93548312.2731691.50805333
  1. 模型评分
scoreK = knc.score(X_test,y_test)print(scoreK)

代码输出:

0.796

http://www.mrgr.cn/news/39136.html

相关文章:

  • Flash与Cache
  • 迈威通信闪耀工博会,以创新科技赋能工业自动化
  • AI新掌舵:智享AI直播系统:直播界的新浪潮还是真人主播的终结者?
  • Cholesky分解
  • 谷歌地图 | 3D 地图新功能:开发更简单,体验更丰富
  • 联想ThinkPad X13:强悍性能与轻薄便携的完美融合
  • 文件防泄密措施有哪些|6个技巧有效防止文件泄密!
  • Hive数仓操作(三)
  • 四十四、多云/混合云架构设计(安全与合规策略)
  • 基于Hadoop的微博舆情监测分析系统
  • ubuntu18.04安装教程
  • 我使用的网络能打开网页在软件上没网是怎么回事
  • 计算机视觉算法
  • 建筑资质应该怎么选?
  • 今日指数项目实现个股日K线详情功能
  • ps aux | grep smart_webrtc这条指令代表什么意思
  • 【Golang】关于Go语言字符串转换strconv
  • 二分算法总结
  • 使用 React Router v6 在 React 中实现面包屑
  • 简全Java开发环境搭建指南