前言
本文机器学习笔记的应用部分整体上基于sklearn
的Preprocessing模块进行撰写,特征选择基于decomposition模块。
本文代码部分由Kimi 辅助撰写,源码顶部标注为Prompt内容。
数据集
1 | data = { |
特征编码
当数据为分类型而不是数值型时,往往需要进行编码,但简单记作1,2,3是行不通的,因为机器会认为这钟排列是有序的。可以看出上面数据集中的steel
与type
为分类型特征,处理时需要转化为哑变量或者独热处理(one-hot),为了实现无序的编码,可以通过sklearn的OneHotEncoder()
类实现。
分析下,可以数据集中的两个分类特征有如下特点:
steel
有四个类:316L、3004、201J1、201J2type
有三个类:FP、SP、HTA
1 | 1:[[1.0.0.0.1.0.0]] |
1 | import pandas as pd |
标准化
将分类型特征处理好后,开始着手其它三组thickness
、tv
、temp
,他们虽属于数值型,但其数值分布相差数量级较大,为了更好地进行后一步处理,在此需要将其标准化——去均值(将其设为0)、去方差(方差为1),按比例缩放。
大多数机器学习算法中目标函数的基础都是——假设所有的特征都是零均值,如果某个特征的方差比其他特征大几个数量级,它就会在算法中占据主导地位,导致学习器产生一种“先入为主”的偏见。
经过计算可得
特征 | 标准差 | 方差 |
---|---|---|
thickness | 0.050896 | 0.002590 |
tv | 0.689879 | 0.475933 |
temp | 72.008403 | 5185.210 |
Z-score标准化
如字面意思,此方法主要是实现零均值(Zero Score),核心函数是scale()
,默认是各个参数独立地进行标准化。标准化后可以使用StandardScaler().fit()
观察其缩放比例,以便于日后增加新数据后应用到测试样本。
1 | import pandas as pd |
极差标准化
当希望把均值缩放到指定范围内时,可以采用极差标准化,可以通过
MinMaxScaler()
:缩放到0~1MaxAbsScaler()
:缩放到单位大小
1 | import pandas as pd |
代码中的关键步骤是
scaled_features = scaler.fit_transform(features)
,这行代码通过fit
:计算数据的最小值和最大值(拟合数据),transform
再根据公式,利用fit(拟合阶段)计算的最小值和最大值,将数据缩放到 [0, 1] 范围内。
正则化
正则化:缩放单个样本使其具有单位范数的过程。每个特征相当于相当于一个维度,N个特征的一个样本可以看作一个N维向量。范数可以理解为向量的长度,正则化就是把这些向量长度缩放到1。通过normalize()
函数实现缩放。有三种实现方法:
- 特征值除以特征值绝对值之和
- 特征值除以特征值平方和的开方
- 特征值除以特征值中的最大值
1 | import pandas as pd |
normalize
是 sklearn.preprocessing
模块中的一种数据正则化方法。它通过参数 X
接收需要正则化的数组,参数 norm
接收正则化算法的标识符,可选值为 'l1'
、'l2'
和 'max'
,默认值为 'l2'
。参数 axis=1
表示按样本进行正则化,而 axis=0
表示按特征进行正则化,默认值为 axis=1
。
- 当
norm='l1'
时,正则化方法是将样本的各个特征值除以这些特征值的绝对值之和。这种变换属于线性变换,因此变换后的结果会落在以 (0,1) 和 (1,0) 为端点的连线上。 - 当
norm='l2'
时,正则化方法是将样本的各个特征值除以这些特征值的平方和的平方根。经过这种变换后,样本的各个特征值的平方和为 1,即变换后的样本会落在以 (0,0) 为圆心、1 为半径的单位圆上。 - 当
norm='max'
时,正则化方法是将样本的各个特征值除以样本中特征值的最大值。经过这种变换后,样本会落在以 x=1 和 y=1 为边界的直线上。
插补
由于各种原因,真实世界的许多数据集都包含缺失数据,一般被定义为NaN
,或者是其他占位符。这些数值不能被机器学习直接兼容,但其中存在价值,舍弃又觉得可惜。为此需要从已知数据中推断出缺失的数值。
sklearn.preprocessing的imputer()
类用于处理缺失值,估算策略有:均值;中位数;众数。其实处理缺失值的最佳方法是预测或手动添加,此类方法过于粗劣,在此不过多研究。
值得一提的是有一种高维映射插补的方式——高维映射插补(采用独热编码方式),将K个离散的属性值拓展为K+1个属性值,若此值缺失,则将拓展后的第K+1属性值设为1。
特征降维
当数据集的特征太多时,需要进行数据降维以加快训练进度。(虽然本数据中特征只有三种,降维后得不偿失,但为了学习,姑且尝试下吧)
PCA分析(主成分分析)
通过正交化方法,将高维空间的原始数据映射到低维空间中。关键点:寻找一组最优正交基,使得高维数据集的样本点投影到低维空间后,新的样本点在低维空间中尽可能地分散。
1 | import pandas as pd |
如果多维特征空间中一组数据是线性相关的,
LDA降维
省略之
TSNE降维
省略之
后记
数据集的标准化、正则化、特征降维是为应对不同数量级对机器学习性能的影响、减小计算量的一种无奈之举。实际上,这些预处理操作都会不可避免地造成信息的丢失。例如,在训练分类模型时,虽然有的问题在原始数据集上取得了不错的结果,但使用标准化后的数据集训练分类器,性能反而有所下降。因此,应该根据问题的复杂程度、计算量的大小,具体问题具体分析,可以比较使用上述预处理方法训练的估计器模型与使用标准化、降维后的数据集训练的估计器,在计算量与估计器性能之间取得平衡。
学了一个多星期,终于结束了,接下来要到大头了——算法篇!