sklearn数据集——iris鸢尾花数据集

article/2025/11/10 22:44:16

参考书籍:Python机器学习基础教程

1、初始数据

鸢尾花(Iris)数据集,是机器学习和统计学中一个经典的数据集。它包含在 scikit-learn 的 datasets 模块中。

我们可以调用 load_iris 函数来加载数据:

from sklearn.datasets import load_iris
iris_dataset = load_iris()

load_iris 返回的 iris 对象是一个 Bunch 对象,与字典非常相似,里面包含键和值:

# 查看数据集的keys
print('Keys of iris_dataset: \n{}'.format(iris_dataset.keys()))

输出:

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

可以看到,数据集有很多的keys。

DESCR 键对应的值是数据集的简要说明。我们查看前面的部分内容:

print(iris_dataset['DESCR'][:193] + "\n...")

输出:

.. _iris_dataset:Iris plants dataset
--------------------**Data Set Characteristics:**:Number of Instances: 150 (50 in each of three classes):Number of Attributes: 4 numeric, pre
...

通过上面的描述信息,我们可以知道该数据集包含150条数据,每50条数据属于一个类别,即有三个类别,每一条数据有四个特征。

target_names 键对应的值是一个字符串数组,里面包含我们要预测的花的品种:

print("Target names: {}".format(iris_dataset['target_names']))

输出:

Target names: ['setosa' 'versicolor' 'virginica']

由此,我们可以知道鸢尾花数据集iris包含3类鸢尾花,分别为山鸢尾(Iris-setosa)、杂色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica)

feature_names 键对应的值是一个字符串列表,对每一个特征进行了说明:

print("Feature names: \n{}".format(iris_dataset['feature_names']))

输出:

Feature names: 
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

由此,我们可以知道每条数据包含4个特征:花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)

数据包含在 target 和 data 字段中。data 里面是花萼长度、花萼宽度、花瓣长度、花瓣宽度的测量数据,格式为 NumPy 数组:

print("Type of data: {}".format(type(iris_dataset['data'])))

输出:

Type of data: <class 'numpy.ndarray'>

data 数组的每一行对应一朵花,列代表每朵花的四个测量数据:

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

输出:

Shape of data: (150, 4)

由此,我们可以知道 data 数组中有150行,对应150条花的测量数据,150个样本,有4列,每一列表示一个特征。

我们查看前5条数据:

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

输出:

First five 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.1cm、花萼宽度为3.5cm、花瓣长度为1.4cm、花瓣宽度为0.2cm。

target 数组包含的是测量过的每朵花的品种,是一个一维的 NumPy数组,每朵花对应其中的一个数据:

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

输出:

Shape of target: (150,)

我们从 target_names 键可以知道,鸢尾花数据集有3个品种,这三个品种在 target 数组中被转换为了数字,分别为 0,1,2 :

print("Target:\n{}".format(iris_dataset['target']))

输出:

Target:
[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 00 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 11 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 22 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 22 2]

从这里我们也能看出,鸢尾花数据是没有打乱的,即前 50 个数据是一个类别(setosa),中间 50 个数据是一个类别(versicolor),后 50 个数据是一个类别(virginica)

2、划分数据

通常情况下,我们不能将构建模型的数据用于评估模型。因为我们的模型会一直记住整个训练集,所以对于训练集中的任何数据点总会预测正确的标签。这种“记忆”无法告诉我们模型的泛化(generalize)能力如何(换句话说,在新数据上能否正确预测)。所以我们需要用新数据来评估模型的性能,通常的做法就是将我们的数据集划分为训练集和测试集。

scikit-learn 中的 train_test_split 函数可以打乱数据集并进行拆分:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], test_size=0.25, random_state=0)

train_test_split 函数的第一个参数为要划分的数据,第二个参数为要划分数据的标签,参数 test_size 表示划分出测试集的大小,默认为0.25,random_state 是随机种子,如果指定了这个值,那么每次分割都会生成相同的结果。train_test_split 函数在划分前会默认将数据进行打乱。函数返回 4 个数组,分别为训练数据、测试数据、训练标签、测试标签。

我们可以看一下训练和测试集的形状:

print("X_train shape: {}".format(X_train.shape))
print("y_train shape: {}".format(y_train.shape))
print("X_test shape: {}".format(X_test.shape))
print("y_test shape: {}".format(y_test.shape))

输出:

X_train shape: (112, 4)
y_train shape: (112,)
X_test shape: (38, 4)
y_test shape: (38,)

3、可视化数据

pandas 的 DataFrame 格式可以使用类似 Excel 表格形式查看数据,我们可以将 numpy 格式的鸢尾花数据转换为 pandas DataFrame:

import pandas as pd
# columns 表示使用鸢尾花的特征名作为每一列的列名
df = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
# 添加一列,列名为 label ,数据为标签数据
df['label'] = iris_dataset.target
df

接下来,使用图的方式可视化数据,但这里有一个问题。一条鸢尾花数据包含四个特征,而我们在电脑上难以对多于 3 个特征的数据集作图。解决这个问题的一种方法是绘制散点图矩阵(pair plot),从而可以两两查看所有的特征。

 pandas 有一个绘制散点图矩阵的函数,叫作 scatter_matrix。矩阵的对角线是每个特征的直方图,其他位置为通过两两特征绘制的散点图:

# 将数据data转换为DataFrame格式
# 利用iris_dataset.feature_names中的字符串对数据列进行标记
iris_dataframe = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
# 利用DataFrame创建散点图矩阵,按标签target着色
grr = pd.plotting.scatter_matrix(iris_dataframe, c=iris_dataset.target, figsize=(10, 10), marker='o',hist_kwds={'bins': 50}, s=50, alpha=.8)

参数 c 表示按照标签对数据点着色,即属于不同类别的数据点的颜色不同,figsize 表示图的大小为 10×10 ,marker 表示使用大圆点表示每一个数据点,hist_kwds 是与hist相关的字典参数,s 表示每个点的面积,alpha 表示点的透明度。

 4、补充(其他的数据集)

从以上的内容我们可以知道,鸢尾花数据集是一个三分类数据集,sklearn 还提供了一些常用的数据集:

威斯康星州乳腺癌数据集

威斯康星州乳腺癌数据集(简称 cancer),里面记录了乳腺癌肿瘤的临床测量数据。

每个肿瘤都被标记为“良性”(benign,表示无害肿瘤)或“恶性”(malignant,表示癌性肿瘤),其任务是基于人体组织的测量数据来学习预测肿瘤是否为恶性。

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
print("cancer.keys(): \n{}".format(cancer.keys()))

输出:

cancer.keys():
dict_keys(['feature_names', 'data', 'DESCR', 'target', 'target_names'])

包含在 scikit-learn 中的数据集通常被保存为 Bunch 对象,里面包含真实数据以及一些数据集信息。关于 Bunch 对象,你只需要知道它与字典很相似,而且还有一个额外的好处,就是你可以用点操作符来访问对象的值(比如用 bunch.key 来代替 bunch['key'])。

数据集信息:

  • 这是一个二分类数据集
  • 这个数据集共包含 569 个数据点,每个数据点有 30 个特征
  • 在 569 个数据点中,212 个被标记为恶性,357 个被标记为良性

波士顿房价数据集

与这个数据集相关的任务是,利用犯罪率、是否邻近查尔斯河、公路可达性等信息,来预测 20 世纪 70 年代波士顿地区房屋价格的中位数。

from sklearn.datasets import load_boston
boston = load_boston()

数据集信息:

  • 这是一个回归数据集
  • 这个数据集包含 506 个数据点和 13 个特征

http://chatgpt.dhexx.cn/article/xrn5kTjY.shtml

相关文章

重拾Iris鸢尾花数据集分析

最近我又又又开始了我的机器学习道路&#xff0c;并且回过头来重新看了一遍Iris数据分析&#xff0c;作为机器学习里面最经典的案例之一&#xff0c;鸢尾花既是我入门机器学习到放弃的地方&#xff0c;又是再次细读之后给予我灵感的地方。 下面介绍一下这次灵感之旅&am…

Python-鸢尾花数据集Iris 数据可视化 :读取数据、显示数据、描述性统计、散点图、直方图、KDE图、箱线图

本博客运行环境为Jupyter Notebook、Python3。使用的数据集是鸢尾花数据集&#xff08;Iris&#xff09;。主要叙述的是数据可视化。 IRIS数据集以鸢尾花的特征作为数据来源&#xff0c;数据集包含150个数据集&#xff0c;有4维&#xff0c;分为3 类&#xff0c;每类50个数据&a…

《机器学习》分析鸢尾花数据集

转载地址&#xff1a;https://www.cnblogs.com/mandy-study/p/7941365.html 分析鸢尾花数据集 下面将结合Scikit-learn官网的逻辑回归模型分析鸢尾花示例&#xff0c;给大家进行详细讲解及拓展。由于该数据集分类标签划分为3类&#xff08;0类、1类、2类&#xff09;&#xff…

笔记篇二:鸢尾花数据集分类

目录 一、鸢尾花数据集 二、逻辑回归分析 三、逻辑回归实现鸢尾花数据集分类 四、散点图绘制 一、鸢尾花数据集 1、问题 Iris 鸢尾花数据集是一个经典数据集&#xff0c;在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录&#xff0c;每类各 5…

IRIS鸢尾花数据集(多种格式)-下载地址

最近看的例子有用到IRIS数据集&#xff0c; 个人找了半天&#xff0c;才找到合适格式的数据集。 因此&#xff0c;将我找到的数据集分享给大家&#xff0c;以免大家像我一样找很久。 我这里有3种格式的数据集&#xff0c;分别是&#xff1a; 1. iris.csv 2. Iris.data 3.…

鸢尾花数据集基本用法

Iris鸢尾花数据集是一个经典的数据集。 包含3类共150条记录&#xff0c;每类各50项数据&#xff0c;每一条记录都有四个体征。 可以通过这四个特征来预测鸢尾花属于哪一个品种。 一.鸢尾花数据集 首先导入数据集&#xff0c;用pandas读入iris.csv数据集&#xff0c;读取后的…

鸢尾花(iris)数据集分析

原文链接&#xff1a;https://www.jianshu.com/p/52b86c774b0b Iris 鸢尾花数据集是一个经典数据集&#xff0c;在统计学习和机器学习领域都经常被用作示例。数据集内包含 3 类共 150 条记录&#xff0c;每类各 50 个数据&#xff0c;每条记录都有 4 项特征&#xff1a;花萼长度…

鸢尾花(iris)数据集

鸢尾花&#xff08;iris&#xff09;数据集 更新时间&#xff1a;2021-03-21 01:01:09标签&#xff1a;数据集 鸢尾花 说明 机器学习教程 正在计划编写中&#xff0c;欢迎大家加微信 sinbam 提供意见、建议、纠错、催更。 鸢【音&#xff1a;yuān】尾花&#xff08;Iris&a…

数据分析——鸢尾花数据集

鸢尾花数据集 Iris 鸢尾花数据集内包含 3 类分别为山鸢尾&#xff08;Iris-setosa&#xff09;、变色鸢尾&#xff08;Iris-versicolor&#xff09;和维吉尼亚鸢尾&#xff08;Iris-virginica&#xff09;&#xff0c;共 150 条记录&#xff0c;每类各 50 个数据&#xff0c;每…

机器学习--鸢尾花数据集实战

Iris数据集实战 本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视化部分进行了重点介绍. 环境 win8, python3.7, jupyter notebook 目录 1. 项目背景 2. 数据概览 3. 特征工程 4. 构建模型 正文 1. 项目背景 鸢尾属(拉丁学名&#xff1a;Iris L.), …

sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类

后面对Sklearn的学习主要以《Python机器学习基础教程》和《机器学习实战基于scikit-learn和tensorflow》&#xff0c;两本互为补充进行学习&#xff0c;下面是开篇的学习内容。 1 初识数据 iris数据集的中文名是安德森鸢尾花卉数据集&#xff0c;英文全称是Anderson’s Iris d…

机器学习——鸢尾花数据集

机器学习——鸢尾花数据集 数据集简介导入数据集可视化主成分分析 鸢尾花数据集即iris iris数据集文件&#xff1a; https://pan.baidu.com/s/1saL_4Q9PbFJluU4htAgFdQ .提取码&#xff1a;1234 数据集简介 数据集包含150个样本&#xff08;数据集的行&#xff09;数据集包含…

实验一:鸢尾花数据集分类

实验一&#xff1a;鸢尾花数据集分类 一、问题描述 利用机器学习算法构建模型&#xff0c;根据鸢尾花的花萼和花瓣大小&#xff0c;区分鸢尾花的品种。实现一个基础的三分类问题。 二、数据集分析 Iris 鸢尾花数据集内包含 3 种类别&#xff0c;分别为山鸢尾&#xff08;Iris…

C++优化之使用emplace

在C开发过程中&#xff0c;我们经常会用STL的各种容器&#xff0c;比如vector&#xff0c;map&#xff0c;set等&#xff0c;这些容器极大的方便了我们的开发。在使用这些容器的过程中&#xff0c;我们会大量用到的操作就是插入操作&#xff0c;比如vector的push_back&#xff…

C++ emplace_back

概述 在C11中&#xff0c;在引入右值的升级后&#xff0c;调用push_back变的更为高效&#xff0c;原本需要调用构造函数构造这个临时对象&#xff0c;然后调用拷贝构造函数将这个临时对象放入容器中。在C11升级后&#xff0c;只需要调用构造函数&#xff0c;然后调用移动拷贝函…

list容器下的 emplace_front() splice() 函数

目录 emplace_front()splice()作者的坑时间复杂度注意点&#xff1a;疑惑处 emplace_front() emplace中文为安置&#xff0c;那么这个函数就是安置到什么什么前面。 void emplace_front(value_type val) ;时间复杂度&#xff1a;O(1) splice() splice译为粘接&#xff0c;作用…

C++优化之使用emplace、emplace_back

在C开发过程中&#xff0c;我们经常会用STL的各种容器&#xff0c;比如vector&#xff0c;map&#xff0c;set等。在使用这些容器的过程中&#xff0c;我们会大量用到的操作就是插入操作&#xff0c;比如vector的push_back&#xff0c;map的insert&#xff0c;set的insert。这些…

emplace_back深度剖析

一&#xff0c;emplace_back和push_back 1&#xff0c;直接插入对象&#xff1a;emplace_back和push_back无区别 ①当传递已经存在的对象时&#xff0c;是无区别的 #include <iostream> #include <vector>using namespace std;/* C11 STL 容器 push/inser…

push_back和emplace_back区别

在使用vector容器时&#xff0c;往容器里添加元素时&#xff0c;有push_back和emplace_back两种方法&#xff0c;一般用得最多得是push_back&#xff0c;下面看看这两种方法得区别&#xff1a; push_back源码&#xff0c;有重载得左值和右值&#xff0c;关于左值和右值可以查看…

C++11之emplace_back

在之前的学习中&#xff0c;了解到在STL中&#xff0c;进行插入元素的时候&#xff0c;有insert和push两种选择方式&#xff0c;而在有了右值引用和移动语义的时候&#xff0c;就提出了更高效的插入方法&#xff1a;emplace_back&#xff0c;下面来介绍一下C11新特性中的emplac…