scikit数据集学习
说明
最近主要想慢慢学习一下scikit-learn相关的知识,并且想把学习过程中的东西记录下来。
scikit 数据集
scikit-learn自带了好多数据集,它基本能满足机器学习各个领域数据。
- 简单加载数据集
- 导入加载数据模块
from sklearn import datasets
数据集模块当中有各种各样的数据集,可以通过观察源码了解一下,也可以查看官方自带帮助文档了解。
- 源码
观察源码看到可以加载这么多数据集.
源码_datasets.PNG- 官方教程
这个更权威和具体一点,建议可以多看看官方的这个教程.
scikit中数据集主要分为两个部分:加载数据集和生成数据集.
scikit可以自己生成你所需要的数据集(具体查看帮助文档).
2.导入数据
# 加载数据集
iris = datasets.load_iris() # 导入iris数据集
boston = datasets.load_boston() # 导入房价预测模型
digits = datasets.load_digits() # 导入digits数据集
返回的是数据对象,通过函数dir()查看对象的属性
# 查看对象属性
print('iris ',dir(iris)) # 查看iris属性
print('digits',dir(digits)) # 查看digits属性
print('boston',dir(boston)) #查看boston属性
可以看到各个对象所携有的属性
iris ['DESCR', 'data', 'feature_names', 'target', 'target_names']
digits ['DESCR', 'data', 'images', 'target', 'target_names']
boston ['DESCR', 'data', 'feature_names', 'target']
其中:
- 'DESCR'表示的是对数据集的描述
- 'data'表示数据集中的特征
- 'target'表示数据的标签 (由于数据集都是监督学习 所以都有特征和标签)
- 'feature_names'表示的特征代表的含义
- 'target_names'表示标签数字对应的含义
- 'images'表示图片大小
解释一下: 前面3个基本所有监督学习数据基本都共有的,对数据的描述('DESCR')、特征('data')、标签('target')
第4个代表数据集中每个特征中对应的含义.
比如查看iris.data的大小和iris.feature_names值
print(iris.data.shape) # 查看数据集特征形状
print(iris.feature_names)
输出结果
(150, 4)
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
表示iris数据集中一共有150个样本点,每个样本有4种特征,特征的具体数值存放在data中.但每种特征代表含义存放在fea_names中.第一个特征代表'sepal length (cm)',第二个特征代表 'sepal width (cm)' ,等等
第5个标签代表 的不同target值代表的具体含义.
由于iris 和 digits 数据集是分类数据集,所以它们的标签是有具体含义。而回归问题的话,是回归到具体数值(不需要不同数值代表不同含义)。
比如:查看iris的target值和target_names值
print(iris.target)
print(iris.target_names)
输出结果
[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]
['setosa' 'versicolor' 'virginica']
target 中有三种值0 1 2 ,而target_names有3个值. 当标签值为0 样本标签为'setosa'
1 -- 'versicolor' 2 -- 'virginica' 存在一一对应的关系.
不过会发现digits没有feature_names属性,原因是因为该数据集是图片,它的特征是像素点,所以不需要特征没有实质含义,所以没有feature_names属性,但有images属性,他表示图片的长宽.
print(digits.data.shape)
print(digits.images.shape)
输出结果:
(1797, 64)
(1797, 8, 8)
上一个表示数据集一共有1797个样本,每个数据集有64个特征.
第二个表示数据集有1797个样本,每个样本是按照长8个像素宽8个像素排列的.
由于digits数据集样本是图片
import matplotlib.pyplot as plt
plt.imshow(digits.image[0]) # 输出第一个样本图片
plt.show()
digits.png
上述完整的代码
有些参数可以随便调!
from sklearn import datasets # 导入模块
# 加载数据
iris = datasets.load_iris() # 导入iris数据集
boston = datasets.load_boston() # 导入房价预测模型
digits = datasets.load_digits() # 导入digits数据集
# 查看对象属性
print('iris ',dir(iris)) # 查看iris属性
print('digits',dir(digits)) # 查看digits属性
print('boston',dir(boston)) #查看boston属性
print(iris.data.shape) # 查看数据集特征形状
print(iris.feature_names)
print(iris.target)
print(iris.target_names)
print(digits.data.shape)
print(digits.images.shape)
# 观察digits的属性 data 表示的是样本大小(1797 ,64 ) 而images表示图片尺寸和样本数目 (1797,8,8)
import matplotlib.pyplot as plt
plt.imshow(digits.images[0])
plt.show()