第一个机器学习应用:鸢尾花分类

目录

1. 特征数据与标签数据

2. 训练数据与测试数据

3. 构建模型机器学习模型

4. 预测与评估

4.1 预测

4.2 评估 

5. 学习小结


准备:采用Scikit- learn中鸢尾花数据集,完成一个简单的机器学习应用,构建第一个机器学习模型。

已知:这些花已经被植物学专家鉴定为三个类别:setosa、versicolor、virginica

问题:要在多个选项(3个鸢尾花类别)中预测其中一个鸢尾花的品种,这是一个分类问题。可能的输出叫作类别。数据集中每朵鸢尾花都属于三个类别之一,所以这是一个三分类问题。单个数据点(一朵鸢尾花)的预期输出是这朵花的品种。对于一个数据点来说,它的品种叫作标签。

关键函数:load_iris() 载入iris数据集

1. 特征数据与标签数据

#鸢尾花⚜️分类
from sklearn.datasets import load_iris
iris_dataset = load_iris()
# 返回一个bunch对象,它直接继承自dict类,与字典类似,由键值对组成。
# 同样可以使用bunch.keys(),bunch.values(),bunch.items()等方法
print(iris_dataset.keys())
# out1:dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 
# 'feature_names', 'filename', 'data_module'])

#鸢尾花的data属性:iris鸢尾花数据集内包含3类分别为setosa、versicolor、virginica
#共150条记录,每类各50个数据,每条记录都有4项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度
#可以通过这4个特征预测鸢尾花卉属于哪一品种


print(type(iris_dataset['data']))
# out2:<class 'numpy.ndarray'>
# 输出表示iris数据集的类型为ndarray类型

print(iris_dataset['data'].shape)
# out3:(150, 4)
# 查看了数据集的形状,表示iris数据集有150朵花,每朵花有4列,即4个特征,
# 机器学习的个体叫作样本,其属性叫作特征,data数组的形状是样本数乘以特征数。

print(iris_dataset['target'].shape)
# out4:(150,)
# 数据集'target'表示标签,即鸢尾花的类别,其数值为150,表明有150个标签。

print(iris_dataset['target_names'])
# out5:['setosa' 'versicolor' 'virginica'] 输出鸢尾花标签的名称
# target_names为'setosa' 'versicolor' 'virginica'

print(iris_dataset['target'])
#out6:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
#0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
#2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
#2 2]
#数字的代表含义由iris['target_names']数组给出:0代表setosa,1代表versicolor,
# 2

print(iris_dataset['data'][:6])

# out6:[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]]

#显示前6行的特征数据,每一列为鸢尾花的1个特征数据,4列分别为鸢尾花的花瓣的长度、宽度,花萼的长度、宽度。

2. 训练数据与测试数据

鸢尾花分为两个子集:

训练集:用于训练模型。

测试集:用于测试训练后模型的性能。

训练集数据用于算法的学习,构建模型。

机器学习将训练好的模型应用于新的数据,判断这个训练的模型是否可用,需要有评估模型性能的方法,故将测试集数据用于评估模型的性能。

# 利用scikit- learn中的train_test_split函数可以将数据划分为训练集和测试集。
from sklearn.model_selection import train_test_split #train_test_split可以返回四个数据集

X_train,X_test,y_train,y_test=train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
# 一般会随机选取一个random_state的值作为参数
print(X_train[:5])

print("X_train:{}".format(X_train[:10]))
print("y_train:{}".format(y_train[:10]))

# X_train:[[5.9 3.  4.2 1.5]
# [5.8 2.6 4.  1.2]
# [6.8 3.  5.5 2.1]
# [4.7 3.2 1.3 0.2]
# [6.9 3.1 5.1 2.3]
# [5.  3.5 1.6 0.6]
# [5.4 3.7 1.5 0.2]
# [5.  2.  3.5 1. ]
# [6.5 3.  5.5 1.8]
# [6.7 3.3 5.7 2.5]]
# y_train:[1 1 2 0 2 0 0 1 2 2]

3. 构建模型机器学习模型

K近邻算法的核心思想是:依据统计学的理论看它所处的位置特征,衡量它周围邻居的数量,而把它归为(或分配)到数量更多的那一类。

在Scikit- learn中,K近邻分类算法是在neighbors模块的KNeighborClassifier类中实现的。需要将这个类实例化为一个对象,才能使用这个模型。注意使用时需要设置模型的参数。

from sklearn.neighbors import KNeighborsClassifier
# 实例化对象,“n_neighbors=1”表示选取一个邻居,knn.fit()表示训练模型
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)

4. 预测与评估

4.1 预测

问题:发现一朵鸢尾花,花萼长5cm、宽2.9cm,花瓣长1cm、宽0.2cm,这朵花属于哪个品种?

# 将输入数据放在一个numpy数组中,使用predict方法进行预测

import numpy as np
Xnew = np.array([[5, 2.9, 1, 0.2]])
prediction = knn.predict(Xnew)
print("Prediction:{}".format(prediction))
print("Predictiontargetname:{}".format(iris_dataset['target_names'][prediction]))

# out8:
# Prediction:[0]
# Predictiontargetname:['setosa']

ValueError: Expected 2D array, got 1D array instead: array=[5. 2.9 1. 0.2]. Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

包错原因:Xnew = np.array([5, 2.9, 1, 0.2])

订正:Xnew = np.array([[5, 2.9, 1, 0.2]])

注意:

在建立一个数组的时候要将其转换为二维数组的一行,因为该函数的输入数据必须满足之前提到的约定:二维数组。

4.2 评估 

用到之前创建的测试集。

通过计算精度来衡量模型的性能,精度就是品种预测正确的花所占的比例。

print("Test set score:{}".format(knn.score(X_test,y_test)))

# out9: Test set score:0.9736842105263158

5. 学习小结

习题见上一篇博客!


(2023年4月19日 23:40首次发布) 

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

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

相关文章

leetcode 879. Profitable Schemes(有利润的计划)

有几个工程&#xff0c;每个工程需要group[ i ]个人去做&#xff0c;做完了可以得到profit[ i ]的利润。 现有2个限制条件&#xff1a; 人数上限是n, 且参加了一个工程的人不能再参加其他工程。 利润下限minProfit, 至少要获得minProfit的利润。 问有多少种工程的选法&#xff…

XHR 和 AJAX 的结合 - API 测试

大家好&#xff0c;之前一期介绍了怎样通过工具类进行对API 接口测试&#xff0c;这一期将演示如何手写一个 Ajax的请求。 什么是 XHR ? 全称为 XMLHttpRequest &#xff0c;它是浏览器内置的对象&#xff0c;使得 JavaScript 可以发送 HTTP 请求。 什么是Ajax ? Ajax是一种用…

monocle3轨迹分析

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> monocle3与PAGA有点类似&#xff0c;在UMAP图上显示轨迹图&#xff0c;没有了树状的结构。 原理、图的理解&#xff0c;可以参考Reference中的链接 安装 ubuntu sudo apt install libudunits2-dev libgdal-dev R spee…

Python 基础(十):元组

❤️ 博客主页&#xff1a;水滴技术 &#x1f338; 订阅专栏&#xff1a;Python 入门核心技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; 文章目录 一、声明元组二、访问元组三、修改元组变量四、遍历元组五、切片六、常用函数和方法6.…

MySQL_第13章_约束

第13章_约束 1. 约束(constraint)概述 1.1 为什么需要约束 数据完整性&#xff08;Data Integrity&#xff09;是指数据的精确性&#xff08;Accuracy&#xff09;和可靠性&#xff08;Reliability&#xff09;。它是防止数据库中存在不符合语义规定的数据和防止因错误信息…

【设计模式】深入浅出--外观模式

文章目录 前言一、外观模式介绍二、案例场景三、外观模式优缺点四、外观模式应用场景总结 前言 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别&#xff0c;如果是自己泡茶需要自行准备茶叶、茶具和开水&#xff0c;而去茶馆喝茶&#xff0c;最简单的方式就是跟茶馆服务员…

【UE】暂停游戏界面及功能实现

效果 步骤 1. 首先在项目设置中添加一个暂停的操作映射 2. 新建一个控件蓝图&#xff0c;命名为“PauseMenuWidget” 3. 打开“ThirdPersonCharacter”&#xff0c;添加一个布尔类型变量&#xff0c;命名为“isScreenShow”&#xff0c;用于判断当前玩家是否打开了暂停界面 在…

S7-200 SMART 和 S7-1200PLC进行PROFINET IO通信

从 S7-200 SMART V2.5 版本开始,S7-200 SMART 开始支持做 PROFINET IO 通信的智能设备。因此,两个 S7-200 SMART 之间可以进行 PROFINET IO 通信,一个CPU 作PROFINET IO 控制器,一个 CPU 作 PROFINET 通信的设备。组态的时候有两种方法,一种是通过硬件目录组态另外一种是通…

原理+配置+实战,Canal一套带走

前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后&#xff0c;顿时产生了浓厚的兴趣。今天&#xff0c;就让我们跟随阿Q的脚步&#xff0c;一起来揭开它神秘的面纱吧。 简介 canal 翻译为管道&#xff0c;主要用途是基于 M…

EEG源定位

导读 自从脑电图(EEG)被发现以来&#xff0c;人们希望EEG能提供一个了解大脑的窗口&#xff0c;研究人员一直试图用EEG无创定位大脑中产生头皮电位的神经元活动。20世纪50年代的早期探索使用电场理论从头皮电位分布推断大脑中电流偶极子的位置和方向&#xff0c;引发了大量定量…

2023美赛春季赛Z题模型代码

已经完成模型代码&#xff0c;仅供大家参考&#xff0c;需要更多请看文末 一、问题分析 首先需要收集与奥运会举办城市/国家相关的历史数据。这需要涉及诸如经济、土地利用、人类满意度&#xff08;包括运动员和观众&#xff09;、旅行、基础设施建设、环境影响等多个方面。数…

日常项目技术方案脉络

开篇引砖 软件在其生命周期中&#xff0c;当其进入稳定期后&#xff0c;大部分时间都处于迭代更新维护阶段。在这漫长的三年甚至五年的存活期内&#xff0c;我们需要面对林林种种大大小小的需求。今天我们就聊聊在这段期间&#xff0c;如何快速产出一份合格的技术方案。 方案给…

Banana Pi BPI-Centi-S3 使用MicroPython编程显示JPG图片

BPI-Centi-S3是我们新推出的一款板载1.9英寸彩屏的小尺寸ESP32-S3开发板&#xff01; BPI-Centi-S3 banana-pi wiki BPI-Centi-S3 bpi-steam wiki 1 关键特性 ESP32-S3&#xff0c;Xtensa 32 bit LX72M PSRAM , 8M FLASH2.4G WIFI &#xff0c;Bluetooth 5 &#xff0c;Blue…

基于鲸鱼算法的极限学习机(ELM)回归预测-附代码

基于鲸鱼算法的极限学习机(ELM)回归预测 文章目录 基于鲸鱼算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于鲸鱼算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用鲸鱼算法对极限学习机进行优化&#xff0c;并…

微服务学习之面试知识相关总结(Nacos、MQ)

文章目录 壹 微服务Nacos1.1 SpringCloud常见组件1.2 Nacos的服务注册表结构1.3 Nacos如何支撑内部数十万服务注册压力1.4 Nacos避免并发读写冲突问1.5 Nacos与Eureka的区别1.6 Sentinel的限流与Gateway的限流的差别1.7 Sentinel的线程隔离与Hystix的线程隔离的差别 贰 MQ知识2…

7款神仙级非常漂亮的 Linux 操作系统UI,你都用过吗

Linux 的发行版有很多&#xff0c;这里罗列7个漂亮的 Linux 发行版&#xff0c;可以说是Linux操作系统界的颜值担当了。 1、elementary OS 网站&#xff1a;https://elementaryos.cn elementary OS操作系统是最漂亮的Linux发行版之一。它基于macOS外观&#xff0c;同时为Linu…

C# 特性(Attribute)

一、特性&#xff08;Attribute&#xff09;定义 特性&#xff08;Attribute&#xff09;是用于在运行时传递程序中各种元素&#xff08;比如类、方法、结构、枚举、组件等&#xff09;的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。 特性使用中括号…

AI智能课程第一讲:chatgpt介绍

AI应用现状 用AI艺术创作 一个小女孩打折手电筒在侏罗世纪公园找恐龙。 AI用于医疗行业 AI辅助驾驶 AI广告投放上的应用 什么是chatgpt&#xff1f; chatgpt相关技术的发展 为什么用chatgpt写代码会特别的快呢&#xff1f; 因为它集成了GitHub上所有开发者的库公用资源&…

供需两端催化口腔医疗服务市场增长 未来将呈现线上化、智能化、品质化三大趋势

一、口腔医疗服务行业概述 口腔由唇、颊、舌、腭、涎腺、牙和颌骨等部分组成。口腔疾病种类繁多&#xff0c;伴随人全生命周期&#xff0c;常见疾病有龋病、牙周疾病、牙髓病、根尖周病、牙齿缺损、错颌畸形等&#xff0c;多数口腔疾病的发病率高&#xff0c;诊疗需求大。除此…

原型设计工具即时设计、Axure、Figma、Sketch,哪个更好用?

在线网页原型图设计软件的使用与桌面端相比具备优势&#xff0c;因为在线网页原型图设计软件的使用全程不需要安装&#xff0c;而且在线网页原型图设计软件也没有任何地点上的限制&#xff0c;更主要的是在线网页原型图设计软件在操作系统上也没有限制&#xff0c;不论是现在使…