scikit-learn数据集
我们将介绍sklearn中的数据集类,模块包括用于加载数据集的实用程序,包括加载和获取流行参考数据集的方法。它还具有一些人工数据生成器。
sklearn.datasets
(1)datasets.load_*()
获取小规模数据集,数据包含在datasets里
(2)datasets.fetch_*()
获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/,要修改默认目录,可以修改环境变量SCIKIT_LEARN_DATA
(3)datasets.make_*()
本地生成数据集
load*和 fetch* 函数返回的数据类型是 datasets.base.Bunch,本质上是一个 dict,它的键值对可用通过对象的属性方式访问。主要包含以下属性:
-
data:特征数据数组,是 n_samples * n_features 的二维 numpy.ndarray 数组
-
target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
-
DESCR:数据描述
-
feature_names:特征名
-
target_names:标签名
数据集目录可以通过datasets.get_data_home()获取,clear_data_home(data_home=None)删除所有下载数据
- datasets.get_data_home(data_home=None)
返回scikit学习数据目录的路径。这个文件夹被一些大的数据集装载器使用,以避免下载数据。默认情况下,数据目录设置为用户主文件夹中名为“scikit_learn_data”的文件夹。或者,可以通过“SCIKIT_LEARN_DATA”环境变量或通过给出显式的文件夹路径以编程方式设置它。'〜'符号扩展到用户主文件夹。如果文件夹不存在,则会自动创建。
- sklearn.datasets.clear_data_home(data_home=None)
删除存储目录中的数据
获取小数据集
用于分类
- sklearn.datasets.load_iris
class sklearn.datasets.load_iris(return_X_y=False) """ 加载并返回虹膜数据集 :param return_X_y: 如果为True,则返回而不是Bunch对象,默认为False :return: Bunch对象,如果return_X_y为True,那么返回tuple,(data,target) """ In [12]: from sklearn.datasets import load_iris ...: data = load_iris() ...: In [13]: data.target Out[13]: array([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]) In [14]: data.feature_names Out[14]: ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] In [15]: data.target_names Out[15]: array(['setosa', 'versicolor', 'virginica'], dtype='|S10') In [17]: data.target[[1,10, 100]] Out[17]: array([0, 0, 2])
名称 | 数量 |
---|---|
类别 | 3 |
特征 | 4 |
样本数量 | 150 |
每个类别数量 | 50 |
- sklearn.datasets.load_digits
class sklearn.datasets.load_digits(n_class=10, return_X_y=False) """ 加载并返回数字数据集 :param n_class: 整数,介于0和10之间,可选(默认= 10,要返回的类的数量 :param return_X_y: 如果为True,则返回而不是Bunch对象,默认为False :return: Bunch对象,如果return_X_y为True,那么返回tuple,(data,target) """
In [20]: from sklearn.datasets import load_digits In [21]: digits = load_digits() In [22]: print(digits.data.shape) (1797, 64) In [23]: digits.target Out[23]: array([0, 1, 2, ..., 8, 9, 8]) In [24]: digits.target_names Out[24]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) In [25]: digits.images Out[25]: array([[[ 0., 0., 5., ..., 1., 0., 0.], [ 0., 0., 13., ..., 15., 5., 0.], [ 0., 3., 15., ..., 11., 8., 0.], ..., [ 0., 4., 11., ..., 12., 7., 0.], [ 0., 2., 14., ..., 12., 0., 0.], [ 0., 0., 6., ..., 0., 0., 0.]], [[ 0., 0., 10., ..., 1., 0., 0.], [ 0., 2., 16., ..., 1., 0., 0.], [ 0., 0., 15., ..., 15., 0., 0.], ..., [ 0., 4., 16., ..., 16., 6., 0.], [ 0., 8., 16., ..., 16., 8., 0.], [ 0., 1., 8., ..., 12., 1., 0.]]])
名称 | 数量 |
---|---|
类别 | 10 |
特征 | 64 |
样本数量 | 1797 |
用于回归
- sklearn.datasets.load_boston
class sklearn.datasets.load_boston(return_X_y=False) """ 加载并返回波士顿房价数据集 :param return_X_y: 如果为True,则返回而不是Bunch对象,默认为False :return: Bunch对象,如果return_X_y为True,那么返回tuple,(data,target) """
In [34]: from sklearn.datasets import load_boston In [35]: boston = load_boston() In [36]: boston.data.shape Out[36]: (506, 13) In [37]: boston.feature_names Out[37]: array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='|S7') In [38]:
名称 | 数量 |
---|---|
目标类别 | 5-50 |
特征 | 13 |
样本数量 | 506 |
- sklearn.datasets.load_diabetes
class sklearn.datasets.load_diabetes(return_X_y=False) """ 加载和返回糖尿病数据集 :param return_X_y: 如果为True,则返回而不是Bunch对象,默认为False :return: Bunch对象,如果return_X_y为True,那么返回tuple,(data,target) """
In [13]: from sklearn.datasets import load_diabetes In [14]: diabetes = load_diabetes() In [15]: diabetes.data Out[15]: array([[ 0.03807591, 0.05068012, 0.06169621, ..., -0.00259226, 0.01990842, -0.01764613], [-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338, -0.06832974, -0.09220405], [ 0.08529891, 0.05068012, 0.04445121, ..., -0.00259226, 0.00286377, -0.02593034], ..., [ 0.04170844, 0.05068012, -0.01590626, ..., -0.01107952, -0.04687948, 0.01549073], [-0.04547248, -0.04464164, 0.03906215, ..., 0.02655962, 0.04452837, -0.02593034], [-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338, -0.00421986, 0.00306441]])
名称 | 数量 |
---|---|
目标范围 | 25-346 |
特征 | 10 |
样本数量 | 442 |
获取大数据集
- sklearn.datasets.fetch_20newsgroups
class sklearn.datasets.fetch_20newsgroups(data_home=None, subset='train', categories=None, shuffle=True, random_state=42, remove=(), download_if_missing=True) """ 加载20个新闻组数据集中的文件名和数据 :param subset: 'train'或者'test','all',可选,选择要加载的数据集:训练集的“训练”,测试集的“测试”,两者的“全部”,具有洗牌顺序 :param data_home: 可选,默认值:无,指定数据集的下载和缓存文件夹。如果没有,所有scikit学习数据都存储在'〜/ scikit_learn_data'子文件夹中 :param categories: 无或字符串或Unicode的集合,如果没有(默认),加载所有类别。如果不是无,要加载的类别名称列表(忽略其他类别) :param shuffle: 是否对数据进行洗牌 :param random_state: numpy随机数生成器或种子整数 :param download_if_missing: 可选,默认为True,如果False,如果数据不在本地可用而不是尝试从源站点下载数据,则引发IOError :param remove: 元组 """ In [29]: from sklearn.datasets import fetch_20newsgroups In [30]: data_test = fetch_20newsgroups(subset='test',shuffle=True, random_sta ...: te=42) In [31]: data_train = fetch_20newsgroups(subset='train',shuffle=True, random_s ...: tate=42)
- sklearn.datasets.fetch_20newsgroups_vectorized
class sklearn.datasets.fetch_20newsgroups_vectorized(subset='train', remove=(), data_home=None) """ 加载20个新闻组数据集并将其转换为tf-idf向量,这是一个方便的功能; 使用sklearn.feature_extraction.text.Vectorizer的默认设置完成tf-idf 转换。对于更高级的使用(停止词过滤,n-gram提取等),将fetch_20newsgroup与自定义Vectorizer或CountVectorizer组合在一起 :param subset: 'train'或者'test','all',可选,选择要加载的数据集:训练集的“训练”,测试集的“测试”,两者的“全部”,具有洗牌顺序 :param data_home: 可选,默认值:无,指定数据集的下载和缓存文件夹。如果没有,所有scikit学习数据都存储在'〜/ scikit_learn_data'子文件夹中 :param remove: 元组 """ In [57]: from sklearn.datasets import fetch_20newsgroups_vectorized In [58]: bunch = fetch_20newsgroups_vectorized(subset='all') In [59]: from sklearn.utils import shuffle In [60]: X, y = shuffle(bunch.data, bunch.target) ...: offset = int(X.shape[0] * 0.8) ...: X_train, y_train = X[:offset], y[:offset] ...: X_test, y_test = X[offset:], y[offset:] ...:
获取本地生成数据
生成本地分类数据:
-
sklearn.datasets.make_classification
生成本地回归数据:
- sklearn.datasets.make_regression
class make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None) """ 生成用于回归的数据集 :param n_samples:int,optional(default = 100),样本数量 :param n_features:int,optional(default = 100),特征数量 :param coef:boolean,optional(default = False),如果为True,则返回底层线性模型的系数 :param random_state:int,RandomState实例或无,可选(默认=无) 如果int,random_state是随机数生成器使用的种子; 如果RandomState的实例,random_state是随机数生成器; 如果没有,随机数生成器所使用的RandomState实例np.random :return :X,特征数据集;y,目标值 """ from sklearn.datasets.samples_generator import make_regression X, y = make_regression(n_samples=200, n_features=5000, random_state=42)