我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文继续讨论sklearn里面的鸢尾花数据集,在上一篇文章里面,苏南大叔对这个鸢尾花数据集做了简要的描述,也给出了获取鸢尾花数据集的几个途径。那么,本文中,就描述一下sklearn里面,如何加载自带的iris鸢尾花数据集。

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - sklearn-load-iris
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-1)

大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔和计算机代码的故事。本文描述sklearn加载自带的鸢尾花数据集,返回的数据格式类型,是Bunch类型,还是tuple类型,或者是dataframe类型。测试环境:win10python@3.11.0pip@23.0.1scikit-learn@1.2.2

加载方式预览load_iris()

sklearn里面内置鸢尾花数据集!是个csv文件!所以,load_iris()仅仅是读取这个已经存在于本地的csv文件而已!没有什么不可理解,sklearn的命名,已经表明了自己的立场:learn

load_iris()的函数原型是:

load_iris(*, return_X_y=False, as_frame=False)

获得机器学习代码中,所需要的数据变量为三个。

  • 由四个字段(Sepal LengthSepal WidthPetal LengthPetal Width)所组成的数据data
  • 由最后一个字段(target)所组成的数据target
  • target做出合理解释的target_name

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - load_iris_1
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-2)

默认返回值Bunch类型(ndarray

from sklearn.datasets import load_iris
iris = load_iris()
print(type(iris),iris)

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - load_iris_2
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-3)

默认的load_iris()的返回值是个sklearn自定义的Bunch类型。并且对于sklearn自带的datasets来说,这个Bunch类型的返回值,还具有一些特定的key。比如:

print(type(iris["data"]),iris["data"])
print(type(iris["target"]),iris["target"])
print(type(iris["target_names"]),iris["target_names"])
print(iris.feature_names)   # 每一列数据的解释,实际的列名
print(iris.filename)        # 真实的数据库`csv`文件地址
print(iris.frame)
print(iris.data_module)
print(iris.DESCR)
这个Bunch类型,看着有些眼晕吧?其实就是个加强版的dict类型,但是写法更自由一些。

这些数据看着蛮多,对于机器学习来说,仅仅需要.data.target,以及对.target做出解释的.target_names

需要的数据读取方法类型取值
样本数据iris["data"]ndarray[[5.1 3.5 1.4 0.2]]
标签数据iris["target"]ndarray[0 0 0]
标签说明iris["target_names"]ndarray['setosa' 'versicolor' 'virginica']
列名iris["feature_names"]ndarray['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
特殊返回值iris["frame"]NoneTypeNone

下面的代码可以对这个数据集进行一下更直观的还原:

from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
csv = pd.DataFrame(data=iris.data, columns=iris.feature_names)
print(csv)

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - 鸢尾花数据集
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-4)

返回值Bunch类型(dataframe

from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
print(type(iris),iris)

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - load_iris_3
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-5)

需要的数据读取方法类型取值
样本数据iris["data"]DataFramesl sw pl pw r 0 5.1 3.5 1.4 0.2
标签数据iris["target"]Series0 0 r 1 0 r 2 0
标签说明iris["target_names"]ndarray['setosa' 'versicolor' 'virginica']
特殊返回值iris["frame"]DataFramesl sw pl pw target r 0 5.1 3.5 1.4 0.2 0

可以看到:
虽然整体上还是一个Bunch类型,但是,主要的返回值数据类型,都发生了变化。特别是iris["frame"],变化最明显。

返回值tuple类型(ndarray)

一个参数return_X_y=True扭转大局,返回值从一个奇怪的Bunch类型变成了更常见的tuple类型。

from sklearn.datasets import load_iris
iris = load_iris(return_X_y=True)
print(type(iris),iris)

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - load_iris_4
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-6)

能够拿到的两个值是:

需要的数据读取方法类型取值
样本数据iris[0]ndarray[[5.1 3.5 1.4 0.2]]
标签数据iris[1]ndarray[0 0 0]

返回值tuple类型(DataFrame)

from sklearn.datasets import load_iris
iris = load_iris(return_X_y=True,as_frame=True)
print(iris,type(iris))

苏南大叔:如何理解sklearn的load_iris函数?解析出的数据是什么格式? - load_iris_5
如何理解sklearn的load_iris函数?解析出的数据是什么格式?(图7-7)

需要的数据读取方法类型取值
样本数据iris[0]DataFramesl sw pl pw r 0 5.1 3.5 1.4 0.2
标签数据iris[1]Series0 0 r 1 0 r 2 0

样本数据

在鸢尾花数据集里面,最重要的就是“样本数据”了,它们一共有四列,分别是:

英文名中文名
Sepal Length萼片长度
Sepal Width萼片宽度
Petal Length花瓣长度
Petal Width花瓣宽度

花瓣很好理解,大家都知道。萼片(花萼)其实就是包裹在花瓣外面的那个最外层的东东。鸢尾花的萼片和花瓣似乎有些难以区分,但是如果类比成大家常见的月季花的话,萼片就是最外层那个绿色的一层,最不起眼的那一层。

相关文章

总结

本文的代码的分析,均来自对sklearn_base.py文件中的load_iris()的代码解读,无论哪种数据加载方式,都必须解读出datatarget这两个重要的数据,也就是说机器学习所需要的_X_y数据,才能继续机器学习的后续代码逻辑。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    sklearn