【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

news2024/10/4 8:16:24

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用,结合场景解决实际问题。包括K-近邻算法,线性回归,逻辑回归,决策树算法,集成学习,聚类算法。K-近邻算法的距离公式,应用LinearRegression或SGDRegressor实现回归预测,应用LogisticRegression实现逻辑回归预测,应用DecisionTreeClassifier实现决策树分类,应用RandomForestClassifie实现随机森林算法,应用Kmeans实现聚类任务。

全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~


共 7 章,44 子模块

K-近邻算法

学习目标

  • 掌握K-近邻算法实现过程
  • 知道K-近邻算法的距离公式
  • 知道K-近邻算法的超参数K值以及取值问题
  • 知道kd树实现搜索的过程
  • 应用KNeighborsClassifier实现分类
  • 知道K-近邻算法的优缺点
  • 知道交叉验证实现过程
  • 知道超参数搜索过程
  • 应用GridSearchCV实现算法参数的调优

1.6 案例:鸢尾花种类预测--数据集介绍

本实验介绍了使用Python进行机器学习的一些基本概念。 在本案例中,将使用K-Nearest Neighbor(KNN)算法对鸢尾花的种类进行分类,并测量花的特征。

本案例目的:

  1. 遵循并理解完整的机器学习过程
  2. 对机器学习原理和相关术语有基本的了解。
  3. 了解评估机器学习模型的基本过程。

1 案例:鸢尾花种类预测

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

2 scikit-learn中数据集介绍

2.1 scikit-learn数据集API介绍

  • sklearn.datasets

  • 加载获取流行数据集

  • datasets.load_*()

    • 获取小规模数据集,数据包含在datasets里
  • datasets.fetch_*(data_home=None)

    • 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
2.1.1 sklearn小数据集
  • sklearn.datasets.load_iris()

加载并返回鸢尾花数据集

img

2.1.2 sklearn大数据集
  • sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

  • subset:'train'或者'test','all',可选,选择要加载的数据集。

  • 训练集的“训练”,测试集的“测试”,两者的“全部”

2.2 sklearn数据集返回值介绍

  • load和fetch返回的数据类型datasets.base.Bunch(字典格式)

  • data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组

  • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
  • DESCR:数据描述
  • feature_names:特征名,新闻数据,手写数字、回归数据集没有
  • target_names:标签名

```python 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) ```

2.3 查看数据分布

通过创建一些图,以查看不同类别是如何通过特征来区分的。 在理想情况下,标签类将由一个或多个特征对完美分隔。 在现实世界中,这种理想情况很少会发生。

  • seaborn介绍

  • Seaborn 是基于 Matplotlib 核心库进行了更高级的 API 封装,可以让你轻松地画出更漂亮的图形。而 Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。

  • 安装 pip3 install seaborn
  • seaborn.lmplot() 是一个非常有用的方法,它会在绘制二维散点图时,自动完成回归拟合

    • sns.lmplot() 里的 x, y 分别代表横纵坐标的列名,
    • data= 是关联到数据集,
    • hue=*代表按照 species即花的类别分类显示,
    • fit_reg=是否进行线性拟合。
  • 参考链接: api链接

```python %matplotlib inline

内嵌绘图

import seaborn as sns import matplotlib.pyplot as plt import pandas as pd

把数据转换成dataframe的格式

iris_d = pd.DataFrame(iris['data'], columns = ['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width']) iris_d['Species'] = iris.target

def 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') ```

image-20190225193311519

2.4 数据集的划分

机器学习一般的数据集会划分为两个部分:

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

划分比例:

  • 训练集:70% 80% 75%
  • 测试集:30% 20% 25%

数据集划分api

  • sklearn.model_selection.train_test_split(arrays, *options)

  • x 数据集的特征值

  • y 数据集的标签值
  • test_size 测试集的大小,一般为float
  • random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
  • return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)

```python 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

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)

随机数种子

x_train1, x_test1, y_train1, y_test1 = train_test_split(iris.data, iris.target, random_state=6) x_train2, x_test2, y_train2, y_test2 = train_test_split(iris.data, iris.target, random_state=6) print("如果随机数种子不一致:\n", x_train == x_train1) print("如果随机数种子一致:\n", x_train1 == x_train2) ```

1.7 特征工程-特征预处理

1 什么是特征预处理

1.1 特征预处理定义

scikit-learn的解释

provides several common utility functions and transformer classes to change raw feature vectors into a representation that is more suitable for the downstream estimators.

翻译过来:通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程

特征预处理图

为什么我们要进行归一化/标准化?
  • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级容易影响(支配)目标结果,使得一些算法无法学习到其它的特征
举例:约会对象数据

约会对象数据

我们需要用到一些方法进行无量纲化使不同规格的数据转换到同一规格

1.2 包含内容(数值型数据的无量纲化)

  • 归一化
  • 标准化

1.3 特征预处理API

python sklearn.preprocessing

2 归一化

2.1 定义

通过对原始数据进行变换把数据映射到(默认为[0,1])之间

2.2 公式

归一化公式

作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0

那么怎么理解这个过程呢?我们通过一个例子

归一化计算过程

2.3 API

  • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )

  • MinMaxScalar.fit_transform(X)

    • X:numpy array格式的数据[n_samples,n_features]
  • 返回值:转换后的形状相同的array

2.4 数据计算

我们对以下数据进行运算,在dating.txt中。保存的就是之前的约会对象数据

python milage,Liters,Consumtime,target 40920,8.326976,0.953952,3 14488,7.153469,1.673904,2 26052,1.441871,0.805124,1 75136,13.147394,0.428964,1 38344,1.669788,0.134296,1

  • 分析

1、实例化MinMaxScalar

2、通过fit_transform转换

```python import pandas as pd from sklearn.preprocessing import MinMaxScaler

def minmax_demo(): """ 归一化演示 :return: None """ data = pd.read_csv("dating.txt") print(data) # 1、实例化一个转换器类 transfer = MinMaxScaler(feature_range=(2, 3)) # 2、调用fit_transform data = transfer.fit_transform(data[['milage','Liters','Consumtime']]) print("最小值最大值归一化处理的结果:\n", data)

return None

```

返回结果:

```python milage Liters Consumtime target 0 40920 8.326976 0.953952 3 1 14488 7.153469 1.673904 2 2 26052 1.441871 0.805124 1 3 75136 13.147394 0.428964 1 .. ... ... ... ... 998 48111 9.134528 0.728045 3 999 43757 7.882601 1.332446 3

[1000 rows x 4 columns] 最小值最大值归一化处理的结果: [[ 2.44832535 2.39805139 2.56233353] [ 2.15873259 2.34195467 2.98724416] [ 2.28542943 2.06892523 2.47449629] ..., [ 2.29115949 2.50910294 2.51079493] [ 2.52711097 2.43665451 2.4290048 ] [ 2.47940793 2.3768091 2.78571804]] ```

问题:如果数据中异常点较多,会有什么影响?

异常点对归一化影响

2.5 归一化总结

注意最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。

怎么办?

3 标准化

3.1 定义

通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内

3.2 公式

æ ‡å‡†åŒ–å…¬å¼

作用于每一列,mean为平均值,σ为标准差

所以回到刚才异常点的地方,我们再来看看标准化

  • 对于归一化来说:如果出现异常点,影响了最大值和最小值,那么结果显然会发生改变
  • 对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。

3.3 API

  • sklearn.preprocessing.StandardScaler( )

  • 处理之后每列来说所有数据都聚集在均值0附近标准差差为1

  • StandardScaler.fit_transform(X)

    • X:numpy array格式的数据[n_samples,n_features]
  • 返回值:转换后的形状相同的array

3.4 数据计算

同样对上面的数据进行处理

  • 分析

1、实例化StandardScaler

2、通过fit_transform转换

```python import pandas as pd from sklearn.preprocessing import StandardScaler

def stand_demo(): """ 标准化演示 :return: None """ data = pd.read_csv("dating.txt") print(data) # 1、实例化一个转换器类 transfer = StandardScaler() # 2、调用fit_transform data = transfer.fit_transform(data[['milage','Liters','Consumtime']]) print("标准化的结果:\n", data) print("每一列特征的平均值:\n", transfer.mean_) print("每一列特征的方差:\n", transfer.var_)

return None

```

返回结果:

```python milage Liters Consumtime target 0 40920 8.326976 0.953952 3 1 14488 7.153469 1.673904 2 2 26052 1.441871 0.805124 1 .. ... ... ... ... 997 26575 10.650102 0.866627 3 998 48111 9.134528 0.728045 3 999 43757 7.882601 1.332446 3

[1000 rows x 4 columns] 标准化的结果: [[ 0.33193158 0.41660188 0.24523407] [-0.87247784 0.13992897 1.69385734] [-0.34554872 -1.20667094 -0.05422437] ..., [-0.32171752 0.96431572 0.06952649] [ 0.65959911 0.60699509 -0.20931587] [ 0.46120328 0.31183342 1.00680598]] 每一列特征的平均值: [ 3.36354210e+04 6.55996083e+00 8.32072997e-01] 每一列特征的方差: [ 4.81628039e+08 1.79902874e+01 2.46999554e-01] ```

3.5 标准化总结

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

未完待续, 同学们请等待下一期

全套笔记和代码自取移步gitee仓库: gitee仓库获取完整文档和代码

感兴趣的小伙伴可以自取哦,欢迎大家点赞转发~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1457390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于四足机器人和机械臂的运动控制系统(一)

文章目录 一、项目框架二、设计内容与功能需求1. 导航与路径规划2. 视觉感知3. 运动控制4. 精准遥控5. 环境探测6. 云端监控与数据分析7. 人机协同8. 充电桩9. 紧急响应与救援 三、硬件设计1. 四足机器人2. 机械臂3. 机器主控板4. 遥控器板5. 舵机驱动板 四、软件设计1. 环境2.…

【机器学习笔记】14 关联规则

关联规则概述 关联规则(Association Rules)反映一个事物与其他事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物就能够通过其他事物预测到。 关联规则可以看作是一种IF-THEN关系。…

Sora:最强文生视频工具

Sora是什么 Sora,是一款能够根据文本创建出逼真的、富有想象力场景的AI模型。Sora能够娴熟地创造出高达一分钟的高清视频,其视觉内容丰富多样,分辨率精准无误。Sora的强大之处在于,它通过在视频和图像的压缩潜在空间中进行训练&a…

[ai笔记10] 关于sora火爆的反思

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第10篇分享! 最近sora还持续在技术圈、博客、抖音发酵,许多人都在纷纷发表对它的看法,这是一个既让人惊喜也感到焦虑的事件。openai从2023年开始,每隔几个…

SpringSecurity + OAuth2 详解

SpringSecurity入门到精通 ************************************************************************** SpringSecurity 介绍 **************************************************************************一、入门1.简介与选择2.入门案例-默认的登录和登出接口3.登录经过了…

笑营宝课后延时服务选课报名管理系统简介

课后延时服务是在“双减”政策背景下推向全国的校园服务。开展丰富多彩的课后服务,既解决家长负担,又能在校内提供作业辅导及素质提升课程,实现教育公平。是解决孩子三点半放学之后的校园服务,但也需要最大限度的降低学校老师的工…

基于java的企业校园招聘平台的设计与实现

分享一个自己的毕业设计,想要获取源码的同学加V:qq2056908377 链接:https://pan.baidu.com/s/1It0CnXUvc9KVr1kDcHWvEw 提取码:1234 摘要: 摘要:本毕业设计旨在设计和实现一个企业校园招聘平台&#xf…

【详细流程】vue+Element UI项目中使用echarts绘制圆环图 折线图 饼图 柱状图

vueElement UI项目中数据分析功能需要用到圆环图 折线图 饼图 柱状图等,可视化图形分析 安装流程及示例 1.安装依赖 npm install echarts --save2.在main.js中引入并挂载echarts import echarts from echarts Vue.prototype.$echarts echarts3.在需要使用echart…

代码随想录刷题笔记-Day20

1. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/ 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q&#x…

RecombiMAb anti-mouse CD40,FGK4.5-CP133单克隆抗体

FGK4.5-CP133单克隆抗体是原始FGK4.5单克隆抗体的重组嵌合型抗体。可变结构域序列与原始FGK4.5克隆号相同,但是恒定区序列已经从大鼠IgG2a变为小鼠IgG2a。FGK4.5-CP133抗体像原始大鼠IgG2a抗体一样,不包含Fc突变。 FGK4.5-CP133单克隆抗体能与小鼠CD40(也…

压缩感知(Compressed Sensing,CS)的基础知识

压缩感知(Compressed Sensing,CS)是一种用于信号处理的技术,旨在以少于奈奎斯特采样定理所要求的样本频率来重构信号。该技术利用信号的稀疏性,即信号可以用较少的非零系数表示。压缩感知在图像获取中的应用使得在采集…

阿里云个人建站笔记

导航 一、购买ECS服务器二、配置mysql(一)安装Mysql步骤一:安装mysql步骤二:配置MySQL步骤三:远程访问MySQL数据库 (二)给实例配置安全组策略(三)设置防火墙 一、购买ECS…

防御保护——综合实验

拓扑图 实验需求: 1.Fw1和Fw2组成主备模式的双机热备 2.DMZ区存在两台服务器,现在要求生产区的设备仅能在办公时间(9:00-18:00)访问,办公区的设备全天都可以访问。 3.办公区设备可以通过电信链路和移动链路上网(多对多…

Linux 实例常用内核参数介绍—容器访问外部网络之ip_forward数据包转发

文章目录 1 问题解决1.1 问题1.2 原因1.3 解决临时打开永久打开 下面为扩展内容Linux 实例常用内核参数介绍:[https://cloud.tencent.com/document/product/213/46400](https://cloud.tencent.com/document/product/213/46400) 2 net.ipv4.ip_forward内核参数通俗解释3 在Linux…

[office] EXCEL怎么制作大事记图表- #学习方法#其他

EXCEL怎么制作大事记图表? 在宣传方面,经常会看到一些记录历史事件、成长历程的图,非常的直观、好看(如下图所示)。那么是怎么做到呢呢?这里我们介绍一下用EXCEL表格快速做出事件记录图的方法。 1、首先,做出基础表格(如下图一所示)。表格…

nacos部署

简介 Nacos 阿里巴巴推出来的开源项目,是更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 Nacos 致力于发现、配置和管理微服务,并提供简单易用的特性集,能够快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 更…

金三银四,全网最详细的软件测试面试题总结

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所…

LeetCode每日一题【26.删除有序数组中的重复项】

题目如下: 思路: 双指针,开始时left指向首元素,right指向下一个元素。当left对应元素与right对应元素相同时,向后移动right;当不相同时,先往后移动left,再把right所指元素赋值给lef…

150173-73-2,BODIPY 558/568 NHS 活化酯,一种具有稳定荧光属性的黄色染料

您好,欢迎来到新研之家 文章关键词:150173-73-2,BODIPY 558/568 NHS 活化酯,BODIPY 558/568 NHS ester ,BODIPY 558/568 NHS 一、基本信息 产品简介:BODIPY 558/568具有高度的量子产率和消光系数&#x…

【ansible】通过role角色部署lnmp架构

目录 一、roles模块的介绍 二、roles的目录层次 2.1 roles 内各目录含义解释 三、在一个playbook中使用roles模块的步骤 四、实操 步骤一:完成目录的准备 步骤二:完成nginx的roles创建和测试 1.准备nginx.repo文件到files子目录中 2.完成vars目…