【ML】KNN 原理 + 实践(基于sklearn)

  • 原理介绍
    • 基本原理
    • K的选取
    • 特征归一化
      • 什么是归一化?为什么要归一化?
      • 如何归一化?
  • 实践
    • 数据集
    • 加载数据
    • 可视化数据,观察规律
    • 训练数据
    • 预测 + 评估

原理介绍

一图胜千言:

基本原理

  1. 首先,KNN算法是监督算法(即每个训练数据是有一个标签的)。
  2. KNN算法很简单,一句话,新的点(比如上图的绿色点)的周围哪种类型的点多就把它归到哪一类。如上图,绿色是待归类点。以绿色点为中心,对于内部的实心圆内,有两个红色三角形和一个蓝色正方形,所以判定绿色属于红色三角形一类。而如果以外围的虚线圆为判定条件,则蓝色正方形占多数,则判定绿色点属于蓝色正方形一类。
  3. K值是什么?即用来判定时选择周围多少个点作为判定条件。比如上图中如果选择K=3,则为实心圆所示,如果选择K=5,则为虚线圆所示。

(这里大家注意区分于KMeans, KMeans的k值是聚类的数量,而KNN是周围的点的数量)

大家很容易发现,其实按照新的点周围画圆而不是数点的方式也可以达到归类目的,也确实有相关的算法:sklearn.RadiusNeighborsClassifier,有兴趣可以看看。

K的选取

  1. 如果k选择的太小,比如k=1,则表示新点会被划分到离它最近的点为一类,很容易想像,如果数据中存在一些噪声点,则很容易误判。(模型更复杂,过拟合)
  2. 如果k选择的太大,比如K=N,则新的点永远属于样本中占多数的点。(模型太简单,欠拟合)
  3. 那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)相关推荐

  1. ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注

    ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注 目录 输出结果 实现代码 输出结果 实现代码 import numpy as np import matplotlib.pyp ...

  2. 【机器学习】回归模型评价指标原理与基于sklearn的实现

    1 前言 回归任务是机器学习中常见的任务,特别是涉及到具体的发电量预测.风力预测等工业任务时,有非常多的应用场景.回归任务不同于分类任务,回归任务的预测值一般是连续的数,分类任务的预测值则是离散的值( ...

  3. ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测

    ML之分类预测:基于sklearn库的七八种机器学习算法利用糖尿病(diabetes)数据集(8→1)实现二分类预测 目录 输出结果 数据集展示 输出结果 1.k-NN 2.LoR 4.DT 5.RF ...

  4. 【ML】主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn)

    [ML]主成分分析 PCA(Principal Component Analysis)原理 + 实践 (基于sklearn) 原理简介 实践 数据集 数据处理 使用KNN模型进行分类预测(为了和PCA ...

  5. 【ML】异常检测(anomaly detection)原理 + 实践 (基于sklearn)

    [ML]异常检测(anomaly detection)原理 + 实践 (基于sklearn) 原理简介 实践 加载数据 可视化数据(观察规律) 训练模型 预测和展示 调整异常值为20%的情况 原理简介 ...

  6. 【ML】决策树(Decision tree)原理 + 实践 (基于sklearn)

    [ML]决策树(Decision tree)原理 + 实践 (基于sklearn) 原理介绍 简要介绍 原理 得分函数(信息熵) 实战 数据集 数据处理 训练 预测+评估 绘制决策树 原理介绍 简要介 ...

  7. 【ML】KMeans 原理 + 实践(基于sklearn)

    [ML]KMeans 实践(基于sklearn) 原理 读取数据 可视化数据(观察规律) 训练 预测 + 可视化 原理 下面做原理简要介绍: KMeans是一个非监督学习算法,对于关键的K值即我们希望 ...

  8. 【ML】Mean-Shift 原理 + 实践(基于sklearn)

    [ML]Mean-Shift 原理 + 实践(基于sklearn) 原理 实践 生成数据 训练 预测+评估 原理 取数据集中的一个点为X,以此点为中心画一个半径为R的圆,圆内共有点数量假设为K. 以此 ...

  9. 【ML】异常检测、PCA、混淆矩阵、调参综合实践(基于sklearn)

    [ML]异常检测.PCA.混淆矩阵.调参综合实践(基于sklearn) 加载数据 可视化数据 异常点检测 PCA降维 使用KNN进行分类并可视化 计算混淆矩阵 调节n_neighbors参数找到最优值 ...

最新文章

  1. 【NLP】 NLP专栏栏主自述,说不出口的话就交给AI说吧
  2. oracle 启动监听报错TNS-12547: TNS:lost contact
  3. 使用Java JdbcTemplate对mySQL进行CRUD增删改查操作
  4. mysql 51 bin_mysqldump和bin-log备份以及恢复示例
  5. 精彩回顾|2021 中国 .NET 开发者峰会
  6. 1个月教你学会用Python实现机器学习
  7. c语言计算机培训,C语言计算机基础学习||新手入门必看
  8. 拓端tecdat|R语言K-means和层次聚类分析癌细胞系微阵列数据和树状图可视化比较
  9. HTMLTestRunnerNew 测试报告详解
  10. MyBatis详解(一):入门程序
  11. 【计算机毕业设计】512网上商城购物系统
  12. 粉红色梦幻唯美的家庭相册模板
  13. 如何在未越狱的iOS 设备上安装 ipa
  14. 如何一步步实现异步上传图片并预览图片(异步加载图片)
  15. map在python中是什么意思_【后端开发】map在python中什么意思
  16. openlayer5 半径不准 画圆_openlayers绘制圆形时设置半径以米为单位
  17. UCOSIII---共享资源
  18. Android 数据库对比
  19. 使用VC++ ATL实现iStylePDF的COM插件
  20. 实验6  不是结束,而是开始

热门文章

  1. android前端开发工具,分享七个非常有用的Android开发工具和工具包
  2. css实现提示信息,纯CSS 实现tooltip 内容提示信息效果
  3. wsappx关不掉_教你wsappx进程如何关
  4. 做好如何融洽处理人际关系文章 把握是前言
  5. 2.89亿元寻求股权转让“接盘侠”!紫光存储风波未平,紫光德瑞风云再起
  6. 60款酷毙了的国外名片设计作品欣赏(下篇)
  7. 几年前放在硬盘里的RMVB视频,为什么现在看很模糊?
  8. 仿腾讯手机管家快捷中心功能的实现方案
  9. html5 meter样式,使用HTML5“meter”元素
  10. python正则表达式匹配所有顶级域名