2. 了解数据集

人工智能或者数据分析是基于数据的科学,我们需要对我们的数据进行初步收集整理后才能 进行下一步的实质性工作。 在searborn或者sklearn模块中,有一些内置数据集 可以让我们方便的使用,一般被当做课堂案例。

2.1. Seaborn鸢尾花(Iris)数据集

Iris也称鸢尾花卉数据集,是常用的分类实验数据集。

鸢尾花

  • R.A. Fisher于1936年收集整理的
  • 包含3种植物种类,分别是:
    • 山鸢尾(setosa)
    • 变色鸢尾(versicolor)
    • 维吉尼亚鸢尾(virginica)
  • 每类50个样本,共150个样本
  • 包含4个特征变量,1个类别变量
  • 4个特征为:
    • 花萼长度
    • 花萼宽度
    • 花瓣长度
    • 花瓣宽度
  • 以及1个类别变量
# Iris问题 seaborn数据集
import seaborn as sns
iris = sns.load_dataset('iris')
iris.head()
sepal_length sepal_width petal_length petal_width species
0 5.1 3.5 1.4 0.2 setosa
1 4.9 3.0 1.4 0.2 setosa
2 4.7 3.2 1.3 0.2 setosa
3 4.6 3.1 1.5 0.2 setosa
4 5.0 3.6 1.4 0.2 setosa

上面所列出的是Iris数据集的一个简单描述。

2.2. 几个常用数据相关概念

  • 特征(Feature): 数据的表头通常被称为特征, 可以理解为数据的标签,例如sepal_length
  • 样本(Sample): 标准每一行为一个样本,用来表示一个具体的数据
  • 一个特征矩阵就是维度为[n_samples, n_features]的二维矩阵
  • 特征矩阵:
    这是一个为二位表格形式的数据,类似Excel表示的形式,我们通常把这类二维数组或者矩阵形式 表示的数据称为特征矩阵, 通常被简记为X(大写X)。通常可以用pandas.DataFrame或者SciPy的稀疏矩阵
  • 目标数组:
    目标数组一遍标记为y,一般是和样本总数长度一致的一维数组,例如上面数据的species列

2.3. Scikit-learn数据集表示方法

sklearn的数据集相比较seaborn复杂一些,毕竟面对的工作方向不同。

2.3.1. SKlearn数据集的获取

Sklearn把数据集分成了三大类,常见scikit-learn的数据集获取有三个方法:

  • 自带的小数据集:
    • 数据包含在datasets里
    • 一般使用load_XXX加载
    • 包含波士顿房价,鸢尾花,乳腺癌等。
  • 自带的大数据集
    • 需要从互联网上下载
    • 使用fetch_XXX进行下载
    • 需要指定data_home表示数据集下载的目录,默认 ~/scikit_learn_data/
    • 要修改默认目录,可以修改环境变量SCIKIT_LEARN_DATA
  • 自动生成数据
    • 还可以自己生成实验数据
    • 通过函数datasets.make_xxx

2.3.2. datasets.base.Bunch类

Sklearn数据集是加工后的数据,不是简单一堆数字,对数据集sklearn有自己独特的描述方法, load_XX和 fetch_XX 函数返回的数据类型是 datasets.base.Bunch,本质上是一个 dict,它的键值对可用通过对象的属性方式访问。

Bunch主要包含以下属性:

  • data:特征数据数组,是 n_samples * n_features 的二维 numpy.ndarray 数组
  • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
  • DESCR:数据描述
  • feature_names:特征名
  • target_names:标签名

其中对数据集的其他操作主要包括数据集目录的获取,删除等:

  • datasets.get_data_home: 数据集目录
  • datasets.clear_data_home(data_home=None): 删除所有下载数据
# 得到数据集的默认存放地址
from sklearn.datasets import *

rst = get_data_home()
print(rst)
C:\Users\augsnano\scikit_learn_data

下面我们看下sklearn中Iris数据集的具体信息:

# Iris问题
#装载数据集
from sklearn.datasets import load_iris

# 载入实验数据
iris_dataset = load_iris()
 
# 了解实验数据

#花瓣花萼数据
print("Features Names: {} \n".format(iris_dataset.feature_names))
print(" \nThe first 5 datas:   \n {}".format(iris_dataset.data[:5]))

#结果数据
print(" \nTargetName:\n {}".format(iris_dataset.target_names))
print(" \nThe first 5 targets:\n {}".format(iris_dataset.target[::10]))

#数据即的键值
print(" \nAll Keys: \n {}".format(iris_dataset.keys()))
 
Features Names: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 

 
The first 5 datas:   
 [[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]]
 
TargetName:
 ['setosa' 'versicolor' 'virginica']
 
The first 5 targets:
 [0 0 0 0 0 1 1 1 1 1 2 2 2 2 2]
 
All Keys: 
 dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])