• 6.1 使用scikit-learn构建模型


      scikit-learn(简称sklearn)库整合了多种机器学习算法,可以帮助使用者在数据分析过程中快速建立模型,且模型接口统一,使用起来非常方便。同时,sklearn拥有优秀的官方文档,知识点详尽,内容丰富,是入门学习sklearn的最佳内容。

      开源机器学习库:https://scikit-learn.org/stable/index.html   开源机器学习库
    在这里插入图片描述
    涵盖分类、回归、聚类、降维、模型选择、数据预处理六大模块
    在这里插入图片描述

    6.1.1 使用sklearn转换器处理数据

      sklearn提供了model_selection模型选择模块、preprocessing数据预处理模块与decomoisition特征分解模块。通过这三个模块能够实现数据的预处理与模型构建前的数据标准化、二值化、数据集的分割、交叉验证和PCA降维等工作。

    datasets模块常用数据集的加载函数与解释如下表所示:
    波士顿房价、鸢尾花、红酒数据集
    在这里插入图片描述
      使用sklearn进行数据预处理会用到sklearn提供的统一接口——转换器(Transformer)。
      加载后的数据集可以视为一个字典,几乎所有的sklearn数据集均可以使用data,target,feature_names,DESCR分别获取数据集的数据,标签,特征名称和描述信息。

    from sklearn.datasets import load_boston  # 波士顿房价数据集
    from sklearn.datasets import load_breast_cancer  # 癌症数据集
    # cancer = load_breast_cancer()  # 读取数据集
    # print("长度: ", len(cancer))
    # print("类型: ", type(cancer))
    boston = load_boston()  # 读取数据集
    print("长度: ", len(boston))
    # print(boston)
    print('data:\n', boston['data'])  # 数据
    print('target:\n', boston['target'])  # 标签
    print('feature_names:\n', boston['feature_names'])  # 特征名称
    print('DESCR:\n', boston['DESCR'])  # 描述信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    6.1.2 将数据集划分为训练集和测试集

      在数据分析过程中,为了保证模型在实际系统中能够起到预期作用,一般需要将样本分成独立的三部分:

    • 训练集(train set):用于训练模型。
    • 验证集(validation set):用于训练过程中对模型性能评估。
    • 测试集(test set):用于检验最终的模型的性能。
        典型的划分方式是训练集占总样本的50%,而验证集和测试集各占25%。

    K折交叉验证法
      当数据总量较少的时候,使用上面的方法将数据划分为三部分就不合适了。
      常用的方法是留少部分做测试集,然后对其余N个样本采用K折交叉验证法,基本步骤如下:

    • 将样本打乱,均匀分成K份。
    • 轮流选择其中K-1份做训练,剩余的一份做验证。
    • 计算预测误差平方和,把K次的预测误差平方和的均值作为选择最优模型结构的依据。

    sklearn的model_selection模块提供了train_test_split函数,能够对数据集进行拆分,其使用格式如下。

    sklearn.model_selection.train_test_split(*arrays, **options)

    在这里插入图片描述
    将数据集划分为训练集和测试集

    • train_test_split函数根据传入的数据,分别将传入的数据划分为训练集和测试集。
    • 如果传入的是1组数据,那么生成的就是这一组数据随机划分后训练集和测试集,总共2组。
    • 如果传入的是2组数据,则生成的训练集和测试集分别2组,总共4组。
    • train_test_split是最常用的数据划分方法,在model_selection模块中还提供了其他数据集划分的函数,如PredefinedSplit,ShuffleSplit等。
    from sklearn.datasets import load_boston  # 波士顿房价数据集
    boston = load_boston()  # 读取数据集
    # 划分数据集
    from sklearn.model_selection import train_test_split
    X, y = boston.data, boston.target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
    print("X_train.shape: ", X_train.shape)
    print("X_test.shape: ", X_test.shape)
    print("y_train.shape: ", y_train.shape)
    print("y_test.shape: ", y_test.shape)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    6.1.3 使用sklearn转换器进行数据预处理与降维

      在数据分析过程中,各类特征处理相关的操作都需要对训练集和测试集分开操作,需要将训练集的操作规则,权重系数等应用到测试集中。如果使用pandas,则应用至测试集的过程相对烦琐,使用sklearn转换器可以解决这一困扰。
      sklearn把相关的功能封装为转换器(transformer)。使用sklearn转换器能够实现对传入的NumPy数组进行标准化处理,归一化处理,二值化处理,PCA降维等操作。转换器主要包括三个方法:fit、transform 和 fit-transform。
    在这里插入图片描述

    1、数据预处理

    sklearn部分预处理函数与其作用
    在这里插入图片描述

    2、PCA降维算法

    sklearn还提供了降维算法,特征选择算法,这些算法的使用也是通过转换器的方式。
    在这里插入图片描述

    代码

    from sklearn.datasets import load_boston  # 波士顿房价数据集
    boston = load_boston()  # 读取数据集
    # print("长度: ", len(boston))
    # # print(boston)
    # print('data:\n', boston['data'])  # 数据
    # print('target:\n', boston['target'])  # 标签
    # print('feature_names:\n', boston['feature_names'])  # 特征名称
    # print('DESCR:\n', boston['DESCR'])  # 描述信息
    
    # 划分数据集
    from sklearn.model_selection import train_test_split
    X, y = boston.data, boston.target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
    # print("X_train.shape: ", X_train.shape)
    # print("X_test.shape: ", X_test.shape)
    # print("y_train.shape: ", y_train.shape)
    # print("y_test.shape: ", y_test.shape)
    # 离差标准化
    import numpy as np
    from sklearn.preprocessing import MinMaxScaler
    Scaler = MinMaxScaler().fit(X_train)  # 生成规则
    # 将规则用于训练集
    data_train = Scaler.transform(X_train)
    # 将规则用于训练集
    data_test = Scaler.transform(X_test)
    print("训练集离差标准化前: ", np.min(X_train))
    print("训练集离差标准化后: ", np.min(data_train))
    print("测试集离差标准化前: ", np.max(X_test))
    print("测试集离差标准化后: ", np.max(data_test))
    
    # PCA降维
    from sklearn.decomposition import PCA
    pca = PCA(n_components=10).fit(data_train)  # 生成规则
    # 将规则用于训练集
    pca_test = pca.transform(data_test)
    print("前: ", data_test.shape)
    print("后: ", pca_test.shape)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    在这里插入图片描述

  • 相关阅读:
    Python大文本文件按行数分割成多个小文本文件
    【WALT】update_task_demand() 代码详解
    元服务那些事儿 | 舞刀解决隐私声明,斩断上架牵绊
    Genesis公链:夯实Web 3.0发展底座
    聊聊我对敏捷项目交付的理解
    C规范编辑笔记(二)
    NC16422 图书管理员
    Java API访问HDFS
    Andorid 13 修改默认音量区间、默认音量值
    redis常用数据类型以及命令详细介绍
  • 原文地址:https://blog.csdn.net/QMU111/article/details/133099268