机器学习入门实战1:鸢尾花分类

花名:鸢尾花
别名:爱丽丝、蓝蝴蝶、紫蝴蝶
花语:爱的使者、长久思念
花期:5-6月
颜色:蓝色、紫色、白色、粉色等
鸢尾花主要色彩为蓝紫色,有“蓝色妖姬”的美誉,因花瓣形如鸢鸟尾巴而得名,有蓝、紫、黄、白、红等颜色。鸢尾的英文名Iris,源于希腊语,是希腊神话中彩虹女神爱丽丝的名字。...

错了,这不是一篇植物科普,重来...

假如我们都非常热爱植物,收集到一些鸢尾花,每朵鸢尾花经过测量,得到一些数据:

花瓣长度和宽度,花萼长度和宽度,测量单位均为厘米。

同时,我们得到了一组被植物专家鉴定后的数据,这些花属于setosa、versicolor或virginica三个品种之一。我们想利用机器学习模型,通过已知品种的测量数据,预测鸢尾花的品种。

这里根据上次内容(机器学习machine learning-CSDN博客),可知我们掌握数据中有预期输出,属于监督学习问题。分析问题,我们要在多个选项中预测是否为某一种鸢尾花品种。可知,这是一个分类(classification)问题。鸢尾花的种类(预期输出)叫做类别(class)。测量数据来自的鸢尾花都属于三个类别之一。可推断这是一个三分类问题。单个数据点(一朵鸢尾花测量数据)的预期输出是这朵花的品种,品种又叫做标签(label)。

1. 数据采集

这些鸢尾花(Iris)数据集,其实是机器学习的经典数据集,包含在scikit-learn的datasets模块中(Python这些库为什么这么香是有原因的)。通过load_iris函数加载数据:

from sklearn.datasets import load_iris
iris_dataset = load_iris()
#load_iris返回iris对象是一个Bunch对象,类似字典,包含键和值
print("Keys of iris_dataset: \n{}".format(iris_dataset.keys()))

结果:

Keys of iris_dataset:
dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])

数据包含在target和data字段中,data里是花萼长度、花萼宽度、花瓣长度、花瓣宽度等测量数据,格式为NumPy数组;target_names键对应的值是一个字符串数组,里面包含要预测的品种;DESCR键对应的值是数据集的简要说明。feature_names键对应的值是一个字符串列表,对每一个特征进行了说明。

print("Shape of data: {}".format(iris_dataset['data'].shape))

结果:

Shape of data: (150, 4)

数组中包含150朵花的测量数据。在机器学习中,个体叫做样本(sample),其属性叫做特征(feature)。data数组的形状(shape)是样本数乘以特征数。取前10个样本特征数值:

print("First ten rows of data:\n{}".format(iris_dataset['data'][:10]))

结果:


First ten rows of data:
[[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]
 [5.4 3.9 1.7 0.4]
 [4.6 3.4 1.4 0.3]
 [5.  3.4 1.5 0.2]
 [4.4 2.9 1.4 0.2]
 [4.9 3.1 1.5 0.1]]

前五朵宽度都是0.2cm,第六朵花萼最长5.4cm。target数组包含测量过的每朵花品种,是一个Numpy数组:

上述数字的代表含义由iris['target_names']数组给出:0代表setosa,1代表versicolor,2代表virginca。

2. 测试模型效果:训练数据&测试数据

如何相信,我们利用数据构建的这个预测鸢尾花的机器学习模型,它是有效的。还用刚才的训练数据吗?当然不行,他们用于预测时已经是正确的标签了。也就是这些数据无法证明模型的有效性,即泛化(generalize)能力。所以需要用新的数据来评估模型的有效性。也就是没有在训练数据中出现过的。有一种常用的办法,将收集好的带标签的数据(即150朵花的测量数据)分为两组。一组数据用于构建机器学习模型,叫训练数据(training data)或训练集(training set),另一组用来评估模型性能,叫做测试数据(test data),或测试集(test set)。

用什么划分数据集?scikit-learn中的train_test_split函数可以将数据集分组。利用它将75%的数据作为训练集,余下的25%作为测试集。当然75%和25%还可以随意调节,但是这个比例通常效果较好。

scikit-learning中的数据通常用大写的X标识,而标签用小写的y标识,类似数学公式f(x)=y。train_test_split函数利用伪随机数生成器将数据集打乱,避免结果标签因过于集中预测不准。利用random_state参数指定随机生成数据。

3. 观察数据

检查数据,发现异常值和特殊值,比如单位不同,空值等等,有可能需要用数据清洗,使得数据更干净,或可直接使用。还可以将其可视化,绘制散点图(scatter plot)。有些数据特征要多于2个,有可能是3个或4个,无法使用二维图像表示,还可以使用散点图矩阵(pair plot)。绘制训练集中特征的散点图矩阵,方法如下:

需要使用mglearn模块,将Numpy数组转换成pandas DataFrame。用scatter_matrix绘制散点图函数绘制图形。

#用X_train中的数据创建DataFrame
#用iris_dataset.feature_names中的字符对数据列进行标记
iris_dataframe = pd.DataFrame(X_train,columns=iris_dataset.feature_names)
#利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',hist_kwds={'bins':20},s=60,alpha=.8,cmap=mglearn.cm3)

三个颜色三个类别,说明模型有效性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vi编辑器

目录 一、文本编辑器vi命令 1.作用: 2.vi和vim 二、vi编辑器的三种模式 三、输入模式 四、命令模式 五、末行模式 一、文本编辑器vi命令 1.作用: 创建或修改文本文件 维护Linux系统中的各种配置文件 2.vi和vim vi:类UNIX操作系统的默认文本编辑器…

揭示空间依赖性:运用先进自相关技术挖掘地理数据中的规律

原文地址:deciphering-spatial-dependence-unlocking-patterns-in-geographical-data-through-advanced 2024 年 4 月 9 日 简介 空间自相关分析是用于衡量和分析一组空间数据点在地理空间中相关程度的统计方法。该技术是空间分析和地理信息系统 (GIS) 的组成部分…

第十五届蓝桥杯c++b组赛后复盘和真题展示

题目变成八道了,分数一百分可能,感觉拿奖难度还是很高 第一题是一个简单的握手问题 答案算出来1204,纯手写 第二题是 物理题 纯蒙,随便猜了个轨迹,答案具体忘了,最后是 .45 第三题暴力 第四题 我是傻逼…

分布式技术--------------ELK大规模日志实时收集分析系统

目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.…

【C++】详解类的--封装思想(让你丝滑的从C语言过度到C++!!)

目录 一、前言 二、【面向过程】 与 【面向对象】 三、结构体 与 类 🍎C中结构体的变化 🍉C中结构体的具体使用 🍐结构体 --> 类 ✨类-----语法格式: ✨类的两种定义方式: 四、类的访问限定符及封装【⭐】 …

python--4函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归

学习目标: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归 学习内容: 函数def,本质、值传递、引用传递、默认值参数、*参数名、**变量、lambda [参数]: 函数、偏函数、递归 目录 学习目标&…

【零基础学鸿蒙】ArkTS开发语言介绍

在之前的教学中,我们学习了下载安装DevEco Studio等相关知识。今天开始讲ArkTS 1.1 TypeScrip快速入门 学习TypeScript对于HarmonyOS应用开发至关重要。在HarmonyOS中,主力编程语言为ArKTS,它是基于TypeScript的一种语言,其通过…

Vue 3 项目中如何使用 TypeScript 类型来优化 Vuex 的状态管理?

在 Vue 3 项目中,使用 TypeScript 可以极大地优化 Vuex 的状态管理,提供更强的类型检查和更好的开发体验。以下是一些使用 TypeScript 来优化 Vuex 状态管理的方法: 定义状态类型: 使用 TypeScript 的接口(Interfaces&…

spring 集成 mybatis

spring 集成 mybatis 1、spring对junit的支持1.1、对junit4的支持1.2 对junit5的支持 2、Spring6集成MyBatis3.52.1 实现步骤2.2 实现 1、spring对junit的支持 1.1、对junit4的支持 依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…

Oracle获取对象的DDL创建语句

1.命令行方式&#xff08;如&#xff1a;sqlplus&#xff09; ## 用户 select dbms_metadata.get_ddl(USER,TEST) from dual;## 表 select dbms_metadata.get_ddl(TABLE,TEST,T1) from dual;## 表空间 select dbms_metadata.get_ddl(TABLESPACE,TBS_NAME) from dual;## 索引 s…

NetSuite 销售订单页面选择客户后停滞问题研究

随着用户环境中定制内容的增加&#xff0c;用户会发现Sales Order中选择Customer时的页面停滞时间会变长。这让用户感到很疑惑。 我们初步研究了一下这个问题&#xff0c;两个变量比较显著&#xff1a; •Form的页签数量•脚本的挂载数量 试验数据 1. 多页签&#xff0c;无…

prompt 工程整理(未完、持续更新)

工作期间会将阅读的论文、一些个人的理解整理到个人的文档中&#xff0c;久而久之就积累了不少“个人”能够看懂的脉络和提纲&#xff0c;于是近几日准备将这部分略显杂乱的内容重新进行梳理。论文部分以我个人的理解对其做了一些分类&#xff0c;并附上一些简短的理解&#xf…

【JavaEE多线程】理解和管理线程生命周期

目录 ThreadThread类的常用构造方法Thread类的常见属性启动一个线程-start()终止一个线程等待一个线程-join()线程的状态 Thread Thread 就是在 Java 中&#xff0c;线程的代言人。系统中的一个线程&#xff0c;就对应到 Java 中的一个 Thread 对象。围绕线程的各种操作&#…

Windows下安装myBase Desktop 8

下载 官网下载&#xff1a; Latest Version Downloads 安装 1.下载好安装包后&#xff0c;直接解压用鼠标双击安装文件“Mybase-Desktop-Ver8218-Win64.exe”进入安装向导 2.点击选择“Iaccept the agreement”同意相关协议,随后点击“next” 3.点击“next” 4.选择安装位置&am…

uni-app的页面中使用uni-map-common的地址解析(地址转坐标)功能,一直报请求云函数出错

想在uni-app的页面中使用uni-map-common的地址解析&#xff08;地址转坐标&#xff09;功能&#xff0c;怎么一直报请求云函数出错。 不看控制台啊,弄错了控制台&#xff0c;就说怎么一直没有打印出消息。 所以开始换高德地图的&#xff0c;昨天申请了两个 一开始用的第二个web…

Linux:Zabbix + Grafana10.4.2(3)

1.部署zabbix 下面这篇文章写了详细的部署zabbix过程 &#xff0c;使用的centos9系统 Linux&#xff1a;部署搭建zabbix6&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/137426966?spm1001.2014.3001.5501下面这篇文章使用的是centos7…

HBuilderX 的 CLI 命令行工具

1. cli 介绍 官方介绍&#xff1a;开发者可以通过 cli 命令行指示HBuilderX进行启动、打包、登录等操作 2. 快速启动 Mac 如果 shell 是 zsh&#xff0c;进入终端&#xff0c;在环境变量文件 ~/.zshrc 中添加以下内容&#xff0c;重新打开终端生效 alias hbopen $1 -a /Appli…

【蓝桥杯 2018 省】分数 题解(Excel+提交答案)

问题描述 求等比数列 1 / 1 1 / 2 1 / 4 1 / 8 1 / 16 … 1/1 1/2 1/4 1/8 1/16 \ldots 1/11/21/41/81/16… 的和&#xff0c;其中每项是前一项的一半&#xff0c;如果一共有20项&#xff0c;求这个和是多少&#xff0c;结果用分数表示出来。例如&#xff0c;对于前…

智慧公厕功能与应用

智慧公厕是智慧城市建设中极为重要的组成部分&#xff0c;它以其先进的功能和智能化的应用&#xff0c;为市民提供舒适、便利、安全的卫生设施。下面将以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例项目现场实景实图实例&#xff0c;深入探讨智慧公厕的…

openGauss 之min/max 优化代码走读

一. 前言 在openGuass中&#xff0c;如果对索引列执行max/min操作,openGauss会优化成只读取索引的最前/后的一行数据&#xff0c;避免了对整表数据进行读取和聚合操作&#xff0c;如下所示&#xff1a; 二. min/max优化代码走读 1. 首先需要将min/max 算子转成成执行计划中降序…