【ML】KNN 原理 + 实践(基于sklearn)
【ML】KNN 原理 + 实践(基于sklearn)
- 原理介绍
- 基本原理
- K的选取
- 特征归一化
- 什么是归一化?为什么要归一化?
- 如何归一化?
- 实践
- 数据集
- 加载数据
- 可视化数据,观察规律
- 训练数据
- 预测 + 评估
原理介绍
一图胜千言:
基本原理
- 首先,KNN算法是监督算法(即每个训练数据是有一个标签的)。
- KNN算法很简单,一句话,新的点(比如上图的绿色点)的周围哪种类型的点多就把它归到哪一类。如上图,绿色是待归类点。以绿色点为中心,对于内部的实心圆内,有两个红色三角形和一个蓝色正方形,所以判定绿色属于红色三角形一类。而如果以外围的虚线圆为判定条件,则蓝色正方形占多数,则判定绿色点属于蓝色正方形一类。
- K值是什么?即用来判定时选择周围多少个点作为判定条件。比如上图中如果选择K=3,则为实心圆所示,如果选择K=5,则为虚线圆所示。
(这里大家注意区分于KMeans, KMeans的k值是聚类的数量,而KNN是周围的点的数量)
大家很容易发现,其实按照新的点周围画圆而不是数点的方式也可以达到归类目的,也确实有相关的算法:sklearn.RadiusNeighborsClassifier,有兴趣可以看看。
K的选取
- 如果k选择的太小,比如k=1,则表示新点会被划分到离它最近的点为一类,很容易想像,如果数据中存在一些噪声点,则很容易误判。(模型更复杂,过拟合)
- 如果k选择的太大,比如K=N,则新的点永远属于样本中占多数的点。(模型太简单,欠拟合)
- 那K怎么选取呢?其实没有太好的办法,通过反复进行交叉实验选择最好的K值。
特征归一化
什么是归一化?为什么要归一化?
直接举例,比如有3个点计算到0点的距离(假设两个维度:x,y),A点=(1000,1),B点=(100,2), C点=(2100,3). 则有距离为:
A距离= 10002+12\sqrt{1000^2+1^2}10002+12
B距离= 10002+22\sqrt{1000^2+2^2}10002+22
C距离= 20002+32\sqrt{2000^2+3^2}20002+32
我们发现,x值对结果影响太大,导致y维度容易被忽略,为了保证两个维度重要性相同,则需要进行归一化。
如何归一化?
举例:拿某一维度的所有值的和为分母,原值为分子。比如以上三个点归一化为:
x维度的和= 2000+1000+1000=40002000+1000+1000=40002000+1000+1000=4000
y维度的和= 1+2+3=61+2+3=61+2+3=6
A=(1000/4000,1/6)=(0.25,0.167)A=(1000/4000,1/6)=(0.25,0.167)A=(1000/4000,1/6)=(0.25,0.167)
B=(1000/4000,2/6)=(0.25,0.333)B=(1000/4000,2/6)=(0.25,0.333)B=(1000/4000,2/6)=(0.25,0.333)
C=(2000/4000,3/6)=(0.5,0.5)C=(2000/4000,3/6)=(0.5,0.5)C=(2000/4000,3/6)=(0.5,0.5)
实践
数据集
https://www.kaggle.com/datasets/mukeshmanral/knn-dataset
加载数据
import numpy as np
import pandas as pd data = pd.read_csv('/kaggle/input/knn-dataset/knn-data/1.ushape.csv')
data.head()
可视化数据,观察规律
y = data.iloc[:,2]
X = data.iloc[:,0:1]from matplotlib import pyplot as plt
plt.scatter(data.iloc[:,[0]][y == 1],data.iloc[:,[1]][y == 1])
plt.scatter(data.iloc[:,[0]][y == 0],data.iloc[:,[1]][y == 0])
训练数据
from sklearn.neighbors import KNeighborsClassifier
# n_neighbors参数默认为5
KNN = KNeighborsClassifier(n_neighbors=3)
KNN.fit(X, y)
预测 + 评估
y_predict = KNN.predict(X)
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y, y_predict)
print(accuracy)
输出:0.8888888888888888
(通过尝试k=1-7),当k=1时候,accuracy=1(显然为1,因为找到的都是自己),不合理,然后尝试了其他k,发现k=3时最好,所以选择3.
【ML】KNN 原理 + 实践(基于sklearn)相关推荐
- ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注
ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注 目录 输出结果 实现代码 输出结果 实现代码 import numpy as np import matplotlib.pyp ...
- 【机器学习】回归模型评价指标原理与基于sklearn的实现
1 前言 回归任务是机器学习中常见的任务,特别是涉及到具体的发电量预测.风力预测等工业任务时,有非常多的应用场景.回归任务不同于分类任务,回归任务的预测值一般是连续的数,分类任务的预测值则是离散的值( ...
- ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测
ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测 目录 输出结果 数据集展示 输出结果 1.k-NN 2.LoR 4.DT 5.RF ...
- 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)
[ML]主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn) 原理简介 实践 数据集 数据处理 使用KNN模型进行分类预测(为了和PCA ...
- 【ML】异常检测(anomaly detection)原理 + 实践 (基于sklearn)
[ML]异常检测(anomaly detection)原理 + 实践 (基于sklearn) 原理简介 实践 加载数据 可视化数据(观察规律) 训练模型 预测和展示 调整异常值为20%的情况 原理简介 ...
- 【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)
[ML]决策树(Decision tree)原理 + 实践 (基于sklearn) 原理介绍 简要介绍 原理 得分函数(信息熵) 实战 数据集 数据处理 训练 预测+评估 绘制决策树 原理介绍 简要介 ...
- 【ML】KMeans 原理 + 实践(基于sklearn)
[ML]KMeans 实践(基于sklearn) 原理 读取数据 可视化数据(观察规律) 训练 预测 + 可视化 原理 下面做原理简要介绍: KMeans是一个非监督学习算法,对于关键的K值即我们希望 ...
- 【ML】Mean-Shift 原理 + 实践(基于sklearn)
[ML]Mean-Shift 原理 + 实践(基于sklearn) 原理 实践 生成数据 训练 预测+评估 原理 取数据集中的一个点为X,以此点为中心画一个半径为R的圆,圆内共有点数量假设为K. 以此 ...
- 【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)
[ML]异常检测.PCA.混淆矩阵.调参综合实践(基于sklearn) 加载数据 可视化数据 异常点检测 PCA降维 使用KNN进行分类并可视化 计算混淆矩阵 调节n_neighbors参数找到最优值 ...
最新文章
- 【NLP】 NLP专栏栏主自述,说不出口的话就交给AI说吧
- oracle 启动监听报错TNS-12547: TNS:lost contact
- 使用Java JdbcTemplate对mySQL进行CRUD增删改查操作
- mysql 51 bin_mysqldump和bin-log备份以及恢复示例
- 精彩回顾|2021 中国 .NET 开发者峰会
- 1个月教你学会用Python实现机器学习
- c语言计算机培训,C语言计算机基础学习||新手入门必看
- 拓端tecdat|R语言K-means和层次聚类分析癌细胞系微阵列数据和树状图可视化比较
- HTMLTestRunnerNew 测试报告详解
- MyBatis详解(一):入门程序
- 【计算机毕业设计】512网上商城购物系统
- 粉红色梦幻唯美的家庭相册模板
- 如何在未越狱的iOS 设备上安装 ipa
- 如何一步步实现异步上传图片并预览图片(异步加载图片)
- map在python中是什么意思_【后端开发】map在python中什么意思
- openlayer5 半径不准 画圆_openlayers绘制圆形时设置半径以米为单位
- UCOSIII---共享资源
- Android 数据库对比
- 使用VC++ ATL实现iStylePDF的COM插件
- 实验6 不是结束,而是开始
热门文章
- android前端开发工具,分享七个非常有用的Android开发工具和工具包
- css实现提示信息,纯CSS 实现tooltip 内容提示信息效果
- wsappx关不掉_教你wsappx进程如何关
- 做好如何融洽处理人际关系文章 把握是前言
- 2.89亿元寻求股权转让“接盘侠”!紫光存储风波未平,紫光德瑞风云再起
- 60款酷毙了的国外名片设计作品欣赏(下篇)
- 几年前放在硬盘里的RMVB视频,为什么现在看很模糊?
- 仿腾讯手机管家快捷中心功能的实现方案
- html5 meter样式,使用HTML5“meter”元素
- python正则表达式匹配所有顶级域名