三、K值的选择

K值选择问题,李航博士的一书「统计学习方法」上所说:

  1. 选择较小的K值,就相当于用较小的领域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;

  2. 选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。

  3. K=N(N为训练样本个数),则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的类,模型过于简单,忽略了训练实例中大量有用信息。

实际应用中,K值一般取一个比较小的数值,例如采用交叉验证法(简单来说,就是把训练数据在分成两组:训练集和验证集)来选择最优的K值。

  • 近似误差:

    • 对现有训练集的训练误差,关注训练集
    • 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。
    • 模型本身不是最接近最佳模型。
  • 估计误差:
    • 可以理解为对测试集的测试误差,关注测试集,
    • 估计误差小说明对未知数据的预测能力好,
    • 模型本身最接近最佳模型。

KNN中K值大小选择对模型的影响

  • k值过小:

    • 容易受到异常点的影响
    • 容易过拟合
    • 模型过于复杂
  • k值过大:
    • 受到样本均衡的问题
    • 容易欠拟合
    • 模型过于简单

四、案例1:鸢尾花种类预测

1)scikit-learn数据集API介绍
  • sklearn.datasets

    • 加载获取流行数据集
    • datasets.load_*()
      • 获取小规模数据集,数据包含在datasets中
    • datasets.fetch_*(data_home=None)
      • 获取大规模数据,需要从网上下载,函数的第一个参数就是data-Home表示数据集的下载目录。默认是~/scikit_learn_data/
2)scikit-learn小数据集
  • sklearn.datasets.load_iris()

    加载并返回鸢尾花数据集

3)scikit-learn大数据集
  • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

    • subset:“train"或者"test”,"all"可选,选择需要加载的数据集
    • 训练集的"训练",测试集的”测试“,两者的"全部"
4)sklearn数据集返回值介绍
  • load_fetch返回的数据类型都是datasets.base.Bunch(字段格式)

    • data:特征数据数组
    • target:标签数组
    • DESCR:数据描述
    • feature_names:特征名字
    • target_names:标签名字
from sklearn.datasets import load_iris# 获取鸢尾花数据集
iris = load_iris()
print("鸢尾花数据集的返回值:\n", iris)
# 返回值是一个继承自字典的Bench
print("鸢尾花的特征值:\n", iris.data)
print("鸢尾花的目标值:\n", iris.target)
print("鸢尾花特征的名字:\n", iris.feature_names)
print("鸢尾花目标值的名字:\n", iris.target_names)
print("鸢尾花的描述:\n", iris.DESCR)
5)查看数据分布
  • seaborn介绍

    • Seaborn是基于Matplotlib核心库对其进行了更高级的API封装,可以轻松画出更漂亮的图形。而Seabor的漂亮主要体现在配色更加舒服以及图形元素的样式更加细腻。
    • 安装pip3 install seaborn
    • seaborn.Implot()是一个非常有用的方法,它在绘制二维散点图的时候,自动完成回归拟合。
      • sns.Implot(x,y): x,y分别代表横纵坐标的列名
      • data 关联的数据集
      • hut 代表按照什么分类方式显示
      • fit_reg 是否进行线性拟合
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pdiris = load_iris()
iris_d = pd.DataFrame(iris.data,columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
iris_d['Species'] = iris.targetdef plot_iris(iris,col1,col2):sns.lmplot(x = col1, y = col2,data=iris,hue='Species',fit_reg=False)plt.xlabel(col1)plt.ylabel(col2)plt.title("鸢尾花种类分布图!!")plt.show()plot_iris(iris_d,'Petal_Width','Sepal_Length')
6)数据集的划分

一般数据集划分为两个部分:

  • 训练数据:用于训练,构建模型
  • 测试数据:用于模型检验,评估模型是否有效

划分比例:

  • 训练集:70%~80%
  • 测试集:20%~30%
数据集划分的API
  • sklearn.model_selection.train_test_split(arrays,*options)

    • 参数:

      • x 数据集的特征值
      • y 数据集的标签值
      • test_size 测试继的大小,一般为float
      • random_state 随机数种子。不同的种子会造成不同的随机结果,相同的种子结果相同
    • return
      • x_train,x_test,y_train,y_test
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 1.获取鸢尾花数据集
iris = load_iris()
# 对鸢尾花数据集进行分割
# 训练特征值、测试特征值、训练目标值、测试目标值
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
print("x_train:\n", x_train.shape)

K-近邻算法之K值的选择(带案例)相关推荐

  1. k近邻算法之 k值的选择

    k近邻算法之 k值的选择 举例说明: K值过小:  [过拟合] ​ 容易受到异常点的影响   [如:美人鱼本身就是喜剧片,假如统计的时候记为动作片,则对预测值的影响太大] k值过大:  [欠拟合] ​ ...

  2. 一文搞懂K近邻算法(KNN),附带多个实现案例

    简介:本文作者为 CSDN 博客作者董安勇,江苏泰州人,现就读于昆明理工大学电子与通信工程专业硕士,目前主要学习机器学习,深度学习以及大数据,主要使用python.Java编程语言.平时喜欢看书,打篮 ...

  3. kNN算法(k近邻算法,k Nearest Neighbor)

    主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...

  4. k近邻算法中k值得选择

    k值得选择会对k近邻的结果产生重大的影响  如果选择较小的K值,就相当于用较小的邻域中的训练实例进行预测,"学习"的近似误差会减小,只有输入实例较近的训练实例才会对预测结果起作用. ...

  5. 【机器学习入门】(1) K近邻算法:原理、实例应用(红酒分类预测)附python完整代码及数据集

    各位同学好,今天我向大家介绍一下python机器学习中的K近邻算法.内容有:K近邻算法的原理解析:实战案例--红酒分类预测.红酒数据集.完整代码在文章最下面. 案例简介:有178个红酒样本,每一款红酒 ...

  6. 距离产生美?k近邻算法python实现

    https://blog.csdn.net/red_stone1/article/details/80607960 1. 什么是k近邻算法? k最近邻(k-Nearest Neighbor,kNN)分 ...

  7. 机器学习实战之K近邻算法

    k近邻算法概述 简单地说,K近邻算法采用测量不同特征值之间的距离方法进行分类. 优 点 :精度高.对异常值不敏感.无数据输入假定. 缺点:计算复杂度高.空间复杂度高. 适用数据范围:数值型和标称型. ...

  8. K近邻算法的kd树实现

    k近邻算法的介绍 k近邻算法是一种基本的分类和回归方法,这里只实现分类的k近邻算法. k近邻算法的输入为实例的特征向量,对应特征空间的点:输出为实例的类别,可以取多类. k近邻算法不具有显式的学习过程 ...

  9. k近邻算法_图穷匕见:K近邻算法与手写数字识别

    机器学习算法是从数据中产生模型,也就是进行学习的算法.我们把经验提供给算法,它就能够根据经验数据产生模型.在面对新的情况时,模型就会为我们提供判断(预测)结果.例如,我们根据"个子高.腿长. ...

  10. 机器学习算法系列之K近邻算法

    本系列机器学习的文章打算从机器学习算法的一些理论知识.python实现该算法和调一些该算法的相应包来实现. 目录 K近邻算法 一.K近邻算法原理 k近邻算法 通俗解释 近邻距离的度量 k值的选择 KN ...

最新文章

  1. AI 算法给手画线稿自动上色指南来了
  2. 使用 Kanban精益创新
  3. 查询反模式 - 隐式的列
  4. 用c语言求最大公约数的流程图,如何用c语言求最大公约数和最小公倍数
  5. 图片也要查重了?期刊用AI审论文防造假,旋转/翻转/拉伸都不行
  6. 以太坊构建DApps系列教程(六):使用定制代币进行投票
  7. 锋神教我数据库,吴大哥教我写文档——其一
  8. SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法
  9. spring beans 的类型
  10. oracle反生异常会回滚吗,Oracle transaction rollback 事务异常回滚问题分析
  11. 6 数据的表现形式常量以及常量的几种类型
  12. ubutnu18.04/20.04 接入HDMI显示器后,在 root用户下不能播放声音之解决方案
  13. java 指令发送短信_Java短信发送机的实现
  14. python数据可视化读取excell文件绘制图像详细教程
  15. Web of Science 数据库导出记录中各个字段的含义
  16. K13252 [国王游戏2]
  17. 读书档案-心流:最优体验心理学
  18. [16]质量控制工具 因果图-帕累托图-直方图-趋势图等
  19. STM32小四轴超低成本方案开源项目
  20. macbook pro升级SSD

热门文章

  1. 关于2022年10月谷歌浏览器无法使用翻译功能的解决办法
  2. Arduino与Proteus仿真实例-密码门禁控制仿真
  3. ipad还能横行霸道多久
  4. 厦门故事(三):枫叶随风飘落,重重地摔在了地面上
  5. ——廖一梅《像我这样笨拙地生活》经典语录
  6. python中的format什么意思
  7. 相机标定 calib3d 学习笔记
  8. 基于51单片机的超声波测距仪测液位及报警方案原理图设计
  9. 归一化谱聚类NCUT(matlab实现)
  10. 量子物理史话 第三章 火流星