K-近邻算法之案例:鸢尾花种类预测—流程实现

1 再识K-近邻算法API

  • sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')   【algorithm:选择什么样的算法进行计算,默认是auto】

    • n_neighbors:

      • int,可选(默认= 5),k_neighbors查询默认使用的邻居数
    • algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’}
      • 快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,

        • brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。
        • kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。
        • ball tree是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。

2 案例:鸢尾花种类预测

2.1 数据集介绍

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:

2.2 步骤分析

  • 1.获取数据集
  • 2.数据基本处理
  • 3.特征工程
  • 4.机器学习(模型训练)
  • 5.模型评估

2.3 代码过程

  • 导入模块
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
  • 先从sklearn当中获取数据集,然后进行数据集的分割
# 1.获取数据集
iris = load_iris()# 2.数据基本处理
# x_train,x_test,y_train,y_test为训练集特征值、测试集特征值、训练集目标值、测试集目标值
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
  • 进行数据标准化

    • 特征值的标准化
# 3、特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
  • 模型进行训练预测
# 4、机器学习(模型训练)
estimator = KNeighborsClassifier(n_neighbors=9)   #  实例化一个估计器
estimator.fit(x_train, y_train)
# 5、模型评估
# 方法1:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:\n", y_predict)
print("比对真实值和预测值:\n", y_predict == y_test)
# 方法2:直接计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

运行结果:

总结

  • 在本案例中,具体完成内容有:

    • 使用可视化加载和探索数据,以确定特征是否能将不同类别分开。
    • 通过标准化数字特征并随机抽样到训练集和测试集来准备数据。
    • 通过统计学,精确度度量进行构建和评估机器学习模型。
  • k近邻算法总结

    • 优点:

      • 简单有效
      • 重新训练的代价低  【不需要构建模型】
      • 适合类域交叉样本
        • KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
      • 适合大样本自动分类
        • 该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
    • 缺点:

      • 惰性学习  【只需距离计算,不需模型】

        • KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多
      • 类别评分不是规格化
        • 不像一些通过概率评分的分类
      • 输出可解释性不强
        • 例如决策树的输出可解释性就较强
      • 对不均衡的样本不擅长  【样本不平衡,收集到的数据每个类别占比严重失衡】
        • 当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
      • 计算量较大
        • 目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。

K-近邻算法之案例:鸢尾花种类预测—流程实现相关推荐

  1. python人工智能——机器学习——分类算法-k近邻算法——kaggle案例: Facebook V: Predicting Check Ins

    题目及翻译 Facebook and Kaggle are launching a machine learning engineering competition for 2016. Faceboo ...

  2. 2、python机器学习基础教程——K近邻算法鸢尾花分类

    一.第一个K近邻算法应用:鸢尾花分类 import numpy as np from sklearn.datasets import load_iris from sklearn.model_sele ...

  3. 机器学习算法---K近邻算法

    K近邻算法 1. K-近邻算法简介 1.1 什么是K-近邻算法 根据你的"邻居"来推断出你的类别 K Nearest Neighbor算法⼜叫KNN算法,这个算法是机器学习⾥⾯⼀个 ...

  4. 机器学习:K近邻算法

    一.K-近邻算法简介 1 什么是K-近邻算法 根据你的"邻居"来推断出你的类别 1.1 K-近邻算法(KNN)概念 K Nearest Neighbor算法又叫KNN算法,这个算法 ...

  5. 机器学习算法——系统性的学会使用 K近邻算法(KNN)

    目录 1.K-近邻算法简介 1.1 什么是K-近邻算法 1.2 K-近邻算法(KNN)概念 (1)定义: (2)距离公式: 1.3 电影类型分析 1.4 KNN算法流程总结 2.k近邻算法api初步使 ...

  6. 01. 机器学习笔记01——K近邻算法 , CV_example

    K近邻算法(K-nearest neighbor,KNN算法) 李航博士<统计学习方法> 最近邻(k-Nearest Neighbors,KNN)算法是一种分类算法 应用场景:字符识别.文 ...

  7. 统计学习方法笔记(一)-k近邻算法原理及python实现

    k近邻法 k近邻算法 算法原理 距离度量 距离度量python实现 k近邻算法实现 案例地址 k近邻算法 kkk近邻法(kkk-NN)是一种基本分类和回归方法. 算法原理 输入:训练集 T={(x1, ...

  8. k近邻算法python_k-近邻算法的Python实现

    本篇文章,想向各位介绍一个非常易于实现的机器学习算法:k-近邻算法,众所周知,k-近邻算法是非常常用的分类算法,现在给出k-近邻算法的官方解释:在一个样本数据集,也称作训练样本集,并且样本中每个数据都 ...

  9. python机器学习 | K近邻算法学习(1)

    K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...

最新文章

  1. 江湖永在:金庸先生和阿里人的那些记忆
  2. java8 javafx_Java 8的新增功能(第1部分– JavaFX)
  3. python怎么输入两行_python交互模式下输入换行/输入多行命令的方法
  4. 论文浅尝 | 利用问题生成提升知识图谱问答
  5. 线性代数拾遗(五):矩阵变换的应用
  6. 谷歌浏览器地址栏记录怎么删除 Chrome浏览器地址栏记录清除方法
  7. AOP Aspect Oriented Programming 面向切面编程 Spring
  8. JAVA继承重写的规则
  9. java Exception 处理汇总
  10. 【愣锤笔记】能解决80%场景的Git必会知识点
  11. jqgrid点击搜索无法重置参数问题
  12. Go语言编程快速入门
  13. siamfc++自己学习笔记
  14. 【科普视频】信号在时域和频域上的区别
  15. 【电蜂优选科普】USB数据线接口有哪些类型呢?
  16. android wifi速度太慢,手机连上wifi之后速度比4G还慢?设置好DNS让你体验飞一般的感觉...
  17. iOS开发——仿微信图片浏览交互的实现(向下拖拽图片退出图片浏览器)
  18. One Note 插件NoteHighlight2016安装
  19. c语言零基础第一课:认识c语言
  20. urllib.request.Request的用法

热门文章

  1. 牛!Python 也能实现图像姿态识别溺水行为了!
  2. 这项技术厉害了!让旅行者 2 号从星际空间发首批数据!
  3. 吴甘沙:天外飞“厕”、红绿灯消失,未来无人驾驶将被重新定义 | AI ProCon 2019
  4. 通俗易懂!使用Excel和TF实现Transformer
  5. 用Python解锁“吃鸡”正确姿势
  6. 微信是把“杀猪刀”,还改变了我的表情包
  7. 活动 | 人工智能产学研生态建设研讨会报名开启
  8. SpringCloudAlibaba:Nacos实现原理详解
  9. 比 ELK 更简洁、高效!企业级日志平台后起之秀 Graylog!
  10. 来!一起搭建个永久运行的个人服务器吧!