• 《机学四》特征工程4 ——:数据划分、转换器与估计器、总结(特征工程三大部分总结)


    一、概述

    主要学习纲要:

    1、sklearn数据集与估计器
    2、分类算法-k近邻算法
    3、k-近邻算法实例
    4、分类模型的评估
    5、分类算法-朴素贝叶斯算法
    6、朴素贝叶斯算法实例
    7、模型的选择与调优
    8、决策树与随机森林

    ★★★机器学习步骤:

    1. 收集数据
    2. 准备输入数据
    3. 分析输入数据
    4. 训练算法
    5. 测试算法
    6. 使用算法

    机器学习步骤详见:《机学零》——第六节:https://blog.csdn.net/u010132177/article/details/103232316

    二、数据划分(第2步:准备数据)

    数据一般要分成两类:

    1. 【训练集】用于训练模型(建立模型) :一般占总数据比例:75%
    2. 【测试集】用于测试模型(评估模型) :一般占总数据比例:25%

    2.1 sklearn数据集

    1、数据集划分
    2、sklearn数据集接口介绍
    3、sklearn分类数据集
    4、sklearn回归数据集

    2.1.1 数据集划分Api

    sklearn.model_selection.train_test_split
    

    2.1.2 sklearn数据集接口

    【为什么要用sklearn数据集】:自己的准备的数据集不一定准确,不一定真实,而且费时费力,所以学习中可以使用sklearn现成的数据集;

    sklearn.datasets:

    • 用于加载获取流行数据集
    • datasets.load_*():获取小规模数据集,数据已包含在datasets里

    datasets.fetch_*(data_home=None):

    • 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

    2.1.2 获取数据集返回的类型

    load* 和 fetch*

    1. 返回的数据类型:datasets.base.Bunch(即字典格式)

    2. data:特征数据数组,是 [n_samples * n_features] 的二维numpy.ndarray 数组

    3. target:标签数组,是 n_samples 的一维 numpy.ndarray 数组

    4. DESCR:数据描述

    5. feature_names:特征名,新闻数据,手写数字、回归数据集没有

    6. target_names:标签名,回归数据集没有

    2.1.2-1 其中分类相关的数据集

    1.sklearn.datasets.load_iris()

    • 加载并返回鸢尾花数据集
      在这里插入图片描述

    2.sklearn.datasets.load_digits()

    • 加载并返回数字数据集
      在这里插入图片描述

    【调用自带数据集代码实例】——分类型数据集:

    from  sklearn.datasets import load_iris
    
    li=load_iris() #实例化鸢尾花数据集
    print('特征值:',li.data)
    print('目标值:',li.target)
    print('特征名:',li.feature_names)
    print('数据描述:',li.DESCR)
    
    '''结果:
    特征值:共150行特征
     [[5.1 3.5 1.4 0.2]
     ...
     [6.2 3.4 5.4 2.3]
     [5.9 3.  5.1 1.8]]
     
    目标值:共3类,150个目标数值
     [0 0 0...1 1 1...2 2 2]
    
    特征名:4种特征名
     ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
    
    数据描述:英文,主要描述数据的特征,目标,详细信息,略过
    '''
    

    2.2 数据集分割

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

    • 【x】: 数据集的特征值
    • 【y】: 数据集的标签值
    • 【test_size】: 测试集的大小,一般为float
    • 【random_state】: 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
    • 【return】: 训练集特征值,测试集特征值,训练标签,测试标签(默认随机取)

    2.2.1【分割数据集代码示例】

    from  sklearn.datasets import load_iris  #自带数据集模块
    from sklearn.model_selection import train_test_split  #数据集分割模块
    
    #【1】实例化鸢尾花数据集
    li=load_iris()
    
    #【2】数据集分割:分成训练集(x_train    y_trian_);测试集(x_test   y_test);注意返回数据顺序;
    # 2.1 test_size=0.25,即:分割成测试集占25%,则训练集占比:75%;
    x_train,x_test,y_trian,y_test=train_test_split(li.data,li.target,test_size=0.25)
    print('训练集是:',x_train,y_trian)
    print('测试集是:',x_test,y_test)
    
    '''结果
    训练集是(数量占比75%):
    		[[5.1 3.5 1.4 0.2]
    		 ...
     		[6.2 3.4 5.4 2.3]
     		[5.9 3.  5.1 1.8]]
     		[0 0 0...1 1 1...2 2 2]
    测试集是(数量占比25%):略...
    '''
    

    2.3 用于分类的大数据集

    sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)

    • subset: 'train'或'test','all',可选,选择要加载的数据集。训练集的“训练”,测试集的“测试”,两者的“全部”
    • data_home: 数据集下载后的存放目录

    datasets.clear_data_home(data_home=None)

    • 清除目录下的数据

    【大数据集调用代码例】——分类型大数据集《新闻类别》

    from  sklearn.datasets import fetch_20newsgroups #引入自带大数据集模块
    
    news = fetch_20newsgroups(data_home=r'E:PycharmProjectsLearnMachine120newsbydate',subset='all')
    print(news.data)
    print(news.target)
    
    运行会发很长时间下载数据集,这是一个新闻文章分类相关的数据集,后面会讲到
    

    2.4 sklearn自带的 回归数据集

    1. sklearn.datasets.load_boston()
      - 加载并返回波士顿房价数据集
      在这里插入图片描述

    2. sklearn.datasets.load_diabetes()
      - 加载和返回糖尿病数据集
      在这里插入图片描述

    【调用sklearn回归数据集示例】《波士顿房价》

    from sklearn.datasets import load_boston #导入波士顿数据集包
    
    boston_price=load_boston() #实例化
    print('房价集特征名',boston_price.feature_names)
    print('房价特征集',boston_price.data)
    print('房价目标集',boston_price.target)
    print('房价集描述:',boston_price.DESCR)
    
    '''
    房价集特征名 ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO' 'B' 'LSTAT']
    房价特征集 [[6.3200e-03 1.8000e+01 2.3100e+00 ... 1.5300e+01 3.9690e+02 4.9800e+00]...
    房价目标集 [24.  21.6 34.7 33.4 36.2 28.7 22.9 27.1 16.5 18.9 15.  18.9 21.7 20.4...
    房价集描述:(头尾略过)...
    		Attribute Information (in order):
            - CRIM     per capita crime rate by town
            - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
            - INDUS    proportion of non-retail business acres per town
            - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
            - NOX      nitric oxides concentration (parts per 10 million)
            - RM       average number of rooms per dwelling
            - AGE      proportion of owner-occupied units built prior to 1940
            - DIS      weighted distances to five Boston employment centres
            - RAD      index of accessibility to radial highways
            - TAX      full-value property-tax rate per $10,000
            - PTRATIO  pupil-teacher ratio by town
            - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
            - LSTAT    % lower status of the population
            - MEDV     Median value of owner-occupied homes in $1000's
          ...
    '''
    

    三、转换器

    3.1数据集的标准化处理

    回忆之前做特征工程的步骤?

    1. 实例化 (实例化的是一个转换器类(Transformer))
    2. 调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)

    【标准化转换图示】

    数据集 ---fit_transform(X)--> 转换后的数据集
    

    【相关单词】

    • fit: 适合
    • transform: 转型
    • preprocessing: 预处理
    • StandardScaler: 标准定标器

    【标准化函数、库】

    from sklearn.preprocessing import StandardScaler
    
    单独使用:
    StandardScaler().fit_transform([[1,3,5],[2,3,6]])
    
    以下两个为一个整体:
    fit()
    transform()
    

    【标准化代码示例】

    from sklearn.preprocessing import StandardScaler #预处理:标准化数据集包
    
    #fit_transform()是fit(),和transform()的组合,只要两步即可对数据进行转型
    sta=StandardScaler() #【1】
    ft=sta.fit_transform([[1,3,5],[2,3,6]]) #【2】
    print('ft:',ft)
    
    #fit(),transform()要3步都做才可对数据进行转型
    sta2=StandardScaler() #【1】
    sta2.fit([[1,3,5],[2,3,6]]) #【2】此处是不能直接输出任何结果的,输出会报错,它只做处理(计算平均值,⽅差等)不返回值
    ft2=sta2.transform([[1,3,5],[2,3,6]]) #【3】此处才能返回值
    print('ft2:',ft2)
    
    '''结果
    ft: [[-1.  0. -1.] [ 1.  0.  1.]]
    ft2: [[-1.  0. -1.] [ 1.  0.  1.]]
    '''
    

    四、估计器——sklearn机器学习算法的实现Api

    在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类【实现了算法的API】

    • 在估计器中有有两个重要的方法是fit和transform(用法见三)。
      • fit方法用于从训练集中学习模型参数 :
      • transform用学习到的参数转换数据
        在这里插入图片描述

    4.1估计器的工作流程

    估计器的工作流程

    1、调用fit: fit(x_train, y_train)

    2、向预估器(estimator)输入测试集的数据

    1. y_predict = predict(x_test)
    2. 预测的准确率: score(x_test, y_test)

    4.2 用于分类的估计器:

    sklearn.neighbors	                        k-近邻算法
    sklearn.naive_bayes                         贝叶斯
    sklearn.linear_model.LogisticRegression     逻辑回归
    

    4.3 用于回归的估计器:

    sklearn.linear_model.LinearRegression     线性回归
    sklearn.linear_model.Ridge                岭回归 
    

    五、总结

    至此特征工程三大块已经学完,下面,回忆一下

    特征工程三大部分:

    1. 特征抽取:https://blog.csdn.net/u010132177/article/details/102911543
    2. 特征预处理:https://blog.csdn.net/u010132177/article/details/102967662
    3. 特征降维:https://blog.csdn.net/u010132177/article/details/103155379
  • 相关阅读:
    (33)ElasticSearch文档的核心元数据解析
    (32)ElasticSearch的容错机制
    (31)ElasticSearch水平扩容的过程
    (30)ElasticSearch两个节点环境中创建index解析
    (29)ElasticSearch分片和副本机制以及单节点环境中创建index解析
    UVA
    HDU
    ZOJ
    BZOJ1499: 瑰丽华尔兹(单调队列)
    UVALive
  • 原文地址:https://www.cnblogs.com/chenxi188/p/11940129.html
Copyright © 2020-2023  润新知