如何理解sklearn的load_iris函数?解析出的数据是什么格式?
发布于 作者:苏南大叔 来源:程序如此灵动~本文继续讨论sklearn
里面的鸢尾花数据集,在上一篇文章里面,苏南大叔对这个鸢尾花数据集做了简要的描述,也给出了获取鸢尾花数据集的几个途径。那么,本文中,就描述一下sklearn
里面,如何加载自带的iris
鸢尾花数据集。
大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔和计算机代码的故事。本文描述sklearn
加载自带的鸢尾花数据集,返回的数据格式类型,是Bunch
类型,还是tuple
类型,或者是dataframe
类型。测试环境:win10
,python@3.11.0
,pip@23.0.1
,scikit-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 Length
、Sepal Width
、Petal Length
、Petal Width
)所组成的数据data
。 - 由最后一个字段(
target
)所组成的数据target
。 - 对
target
做出合理解释的target_name
。
默认返回值Bunch
类型(ndarray
)
from sklearn.datasets import load_iris
iris = load_iris()
print(type(iris),iris)
默认的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"] | NoneType | None |
下面的代码可以对这个数据集进行一下更直观的还原:
from sklearn import datasets
import pandas as pd
iris = datasets.load_iris()
csv = pd.DataFrame(data=iris.data, columns=iris.feature_names)
print(csv)
返回值Bunch
类型(dataframe
)
from sklearn.datasets import load_iris
iris = load_iris(as_frame=True)
print(type(iris),iris)
需要的数据 | 读取方法 | 类型 | 取值 |
---|---|---|---|
样本数据 | iris["data"] | DataFrame | sl sw pl pw r 0 5.1 3.5 1.4 0.2 |
标签数据 | iris["target"] | Series | 0 0 r 1 0 r 2 0 |
标签说明 | iris["target_names"] | ndarray | ['setosa' 'versicolor' 'virginica'] |
特殊返回值 | iris["frame"] | DataFrame | sl 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)
能够拿到的两个值是:
需要的数据 | 读取方法 | 类型 | 取值 |
---|---|---|---|
样本数据 | 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))
需要的数据 | 读取方法 | 类型 | 取值 |
---|---|---|---|
样本数据 | iris[0] | DataFrame | sl sw pl pw r 0 5.1 3.5 1.4 0.2 |
标签数据 | iris[1] | Series | 0 0 r 1 0 r 2 0 |
样本数据
在鸢尾花数据集里面,最重要的就是“样本数据”了,它们一共有四列,分别是:
英文名 | 中文名 |
---|---|
Sepal Length | 萼片长度 |
Sepal Width | 萼片宽度 |
Petal Length | 花瓣长度 |
Petal Width | 花瓣宽度 |
花瓣很好理解,大家都知道。萼片(花萼)其实就是包裹在花瓣外面的那个最外层的东东。鸢尾花的萼片和花瓣似乎有些难以区分,但是如果类比成大家常见的月季花的话,萼片就是最外层那个绿色的一层,最不起眼的那一层。
相关文章
总结
本文的代码的分析,均来自对sklearn
的_base.py
文件中的load_iris()
的代码解读,无论哪种数据加载方式,都必须解读出data
和target
这两个重要的数据,也就是说机器学习所需要的_X
和_y
数据,才能继续机器学习的后续代码逻辑。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。