0%

《机学四》特征工程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

1
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()

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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【分割数据集代码示例】

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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)

  • 清除目录下的数据

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

1
2
3
4
5
6
7
from  sklearn.datasets import fetch_20newsgroups #引入自带大数据集模块

news = fetch_20newsgroups(data_home=r'E:\PycharmProjects\LearnMachine1\20newsbydate',subset='all')
print(news.data)
print(news.target)

运行会发很长时间下载数据集,这是一个新闻文章分类相关的数据集,后面会讲到

2.4 sklearn自带的 回归数据集

  1. sklearn.datasets.load_boston()

    - 加载并返回波士顿房价数据集

    在这里插入图片描述

  2. sklearn.datasets.load_diabetes()

    -  加载和返回糖尿病数据集

    在这里插入图片描述

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

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
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(对于文档建立分类词频矩阵,不能同时调用)

【标准化转换图示】

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

【相关单词】

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

【标准化函数、库】

1
2
3
4
5
6
7
8
from sklearn.preprocessing import StandardScaler

单独使用:
StandardScaler().fit_transform([[1,3,5],[2,3,6]])

以下两个为一个整体:
fit()
transform()

【标准化代码示例】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 用于分类的估计器:

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

4.3 用于回归的估计器:

1
2
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