【导读:当今人类即将或者已然了进入智能时代,这是情报通人工智能科普系列第[6]篇文章,欢迎阅读和收藏!】
1 基本概念
“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已”,这里的数据指的就是经过特征工程得y 4 { e ? 0 ] M ^到的数据。k W 7 x特征工程指的是把原始数据转变为模型的训练数据的过程,它的目的就是获取更好的训练数据特征,最大限度地从原始g L , B 8 }数据中提取特L ( a H s 6 P m征以[ T q 1 3 B供算法和模型使用,使得机器学习模型逼近这个上限。特征工程能使得模型的性能得到提升,有时甚至在简单的模型上也能取得不错的效果。
数据是实现机器学习的重要输入,而数据(特征)预处理是最基本的一个步骤,本文重点介绍数据预处理的方法。
2 术语解释
特征 :一个客体或一组客体特性的抽象结果。
哑编码 :假设有+ [ H O G + q N 种定性值,则将这一个特征扩展为 N 种特征,当原始特征值为第 i 种定性` O E s / w !值时,第 i 个扩展特征赋值为 1 ,其他扩展特征赋值为 0 。
正态分布 :也称常态分布或高斯分布,是连续随机变量概率分布的一种,自然界、人类社会、心理和教育中大量现象均按正态形式分布,例如能力的高低,学生成绩的好坏等都属于正态分布。它随随机变量的平均数、标准差的大小与单位不同而有不同的分布形态。
量纲 :物J 9 / h = ! O A t理量的基本属性。
标准差 :在概率统计中最常使用作为统计分布程度( statistical dispersion )上的测量。标准差定义是总体各单位标准值与其平均数离差平方的算术平均数的平方根。它反映组内个体间的离散程度。
范数( Norm ) :是数学中的一种基本概念,常常被用来度量某个向量空间(或矩阵)中的每个向量的长度Z c l g _ * z或大小。
定量 :以数量形式存在着的属性,并因此可以对其进行测量。
定性 :通过非量化的手段来探究事物 9 E S l % + A的本质。其概念与定量相对应。
中位数 :对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值t [ 3 Z - z c ]有@ ] p Z偶数个,通常取W S 6 + 8 ; ] $最中间g I t的两个数值的平均数作为中位数。
众数 :一组数据中出现次数最多的数值。
3 数据S ; S + Q E Z预处理的背景
通过特征提取,我们能得到未经处理的特征数据,这时的数据可能有以下问题V U h v:
•不属于同一量纲:即各特征的规格} E l :不一样,不能够放在一起比较。无量纲化可以解决这一问题。
•信息冗余:对于某些定量特征,其包含的有效信息为区间划分,例如学习成绩,假若只关心“及格”或j ! s q X 7 |“不及格v , J O l”,那么需要将定量的考分,转换成“ 1 ”和“ 0 ”表示及格和未及格。Z q ] L u } # Z D二值化可以解决这一{ F s问题。
•定性特征不能直接使用:某些机器 Q ; # O $ { z学习算法和模型只能e ~ m ( f ~接受定量特征的输入,那么需要将定性特征转换为定量特征。最简单的方式是为每一种定性值指定一个定量值,但是这种l ] ; t / ` 6 !方式过C Z #于灵活,增加了调参的工V k b作。通常使用哑编码0 D k的方式将k U R定性特征转换为定量特征,哑编码的方式相比/ N A : @ W * j直接指定的方2 } w Z [式Z ( S 4 u E %,不用增加调参的工作,对于线性模型来说,使用哑编码后的特征q n F g可达到非线性的效果。
•存在缺失值:缺失值需要补充。 O [ - @ 1
•信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的转换,都能达到5 w v n , m非线性的效果。
4 数据预处理的方法
4.1 Python 库的安装
Python 中存在现成的包: _ 5可以进行特征工程的预处理: sklearn.prI / Zeprocessing ,该库可以解决数据预处理中的问题。
但安装时出现很多错误,安装方法:
1` | M X 、版本号特别重要,一定不要通过 pip install 直接安装,而是要在此网站中下载本 pyth` b K ( 6 | M . kon 版本的安装包,逐一安装;
2 、先安装 numpy+mkl ;
3 、安装 scipy ;u t I
4 、安装 kiwis? f Solver ;
5 、安装 matpW # H L l L V `lotlib ;
6 、最后安装 sklearn 。
sklearn.preprocessing 库中的类说明:
4.2 无量纲化
无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和区9 T 9 H间缩放法。标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。区间缩放k b h法利用了边界值. A 1 t信息,将特征的取值区间缩放到某个特s 3 G点的范围,例如 [0, 1] 等。
4.2.1 标准化( z-score )
1 、求出样本特征 x 的均值 mean (所有 x 的样本值相加除以 x 的= . z x Q 7 *样本个数)和标准差 std (一组数据中的每一个| [ m M A a数与这] E t Y G ?组数据的平均数 me0 ^ J O g 9 V p }an 的差的平方的和再除以数据的个数,再取平方根)。
mean= ( x 1 +x 2 +……+x m ) /m
2 、可以通过如下公式进行数据标准化:
x_norm=(x- mean)/std
通过 Python 代码实现:
from sklearn.preprocessA L M ing import StandarZ : M H p ^ ^ TdScaler
StandardScaler().fit_transform(x)
4.2.2 区a 6 n J n d 7 / ,间缩放( max-min 标准化)
1 、 z q k得出最大值和最P w -小值;
2 、通过如下r ! + | v [ J H V公式进行数据的缩放:
x_ scaler =(x- min)/(max-6 e L xmiw o _ 8 : = f E qn)R _ ` S
通过 Python 代码实现:
from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(x)
4.2.3 归一化( L1/L2 范数标准化)
归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有g m U o统一的标准,也就是说都转化为“单位向量”。
L1 范数则是将上述公式的除数改为向量中各个元素绝对值之和。通常情况下,范数标准化首选 L2 范数标准化。
通过 Python 代码实现:
from sklearn.preproces[ c }sing import Normalizer
Normalizer().fit_transform(x)
4.3 对定量特征二值o ! ] y V ~化
定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为 1 ,小于等于阈( x 2 c R值的赋值为 0 ,公[ P 8 (式表达如下:
通过 Python 代码实现:
from sklearn.pZ ( e ] U qreprocessing import Binarizer
Binarize[ 9 a 1 xr(threshold=3).fit_transform(iris.data)
4.4 对定性特征哑编码
假设有 N 种定性值,则将这一个特征扩展为 N 种特征,% 2 y U h当原始特征值为@ / M z h第 i 种定性值时,第 i 个扩展特征赋值为 1 ,其他扩展特征赋~ 2 - d C U w M值为 0 。
通过 Python 代码实现:
from sklearn.preprocessy + ) _ Ying import OneHotEncoder
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))