zoukankan      html  css  js  c++  java
  • 机器学习-scikit-learn数据集

    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

      class make_classification(n_samples=100, n_features=20, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None)
      """
      生成用于分类的数据集
      
      :param n_samples:int,optional(default = 100),样本数量
      
      :param n_features:int,可选(默认= 20),特征总数
      
      :param n_classes:int,可选(default = 2),类(或标签)的分类问题的数量
      
      :param random_state:int,RandomState实例或无,可选(默认=无)
        如果int,random_state是随机数生成器使用的种子; 如果RandomState的实例,random_state是随机数生成器; 如果没有,随机数生成器所使用的RandomState实例np.random
      
      :return :X,特征数据集;y,目标分类值
      """
      
    from sklearn.datasets.samples_generator import make_classification
    X,y= datasets.make_classification(n_samples=100000, n_features=20,n_informative=2, n_redundant=10,random_state=42)
    

    生成本地回归数据:

    • 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)
  • 相关阅读:
    [offer_53-1] 在排序数组中查找数字 I (开启编辑看 i,j,m)
    window10 办公软件word、execel、ppt突然变得很卡顿如何解决?
    数组中第k大的数
    heapq 堆
    每日一题 482. 密钥格式化
    算法笔记Go!
    DFS与BFS的python实现
    无向图中找到长度为k的“链”
    无序数组中找一个比左边都大、右边都小的数
    SRM(空域富模型隐写分析)
  • 原文地址:https://www.cnblogs.com/g414056667/p/14941197.html
Copyright © 2011-2022 走看看