特征处理是通过特定的方法(数学方法)将数据转化为算法要求的数据。
数值型数据:标准缩放 :归一化、标准化、缺失值
类别型数据:one-hot编码
时间类型:时间的切分
1、归一化:
X
′
=
x
−
m
i
n
m
a
x
−
m
i
n
X'=\frac{x-min}{max-min}
X′=max−minx−min
X
′
′
=
X
′
∗
(
m
x
−
m
i
)
+
m
i
X''=X'*(mx-mi)+mi
X′′=X′∗(mx−mi)+mi
注:作用于每一列,max为一列的最大值,min为一列的最小值,那么X’’
为最终结果,mx,mi分别为指定区间值默认mx为1,mi为0。
⽬的:使得某⼀个特征对最终结果不会造成更⼤影响,每个特征值是同等的重要。
缺点:异常点对最⼤值最⼩值影响太⼤,所以这种方法鲁棒性较差,只适合传统精确小数据场景
from sklearn.preprocessing import MinMaxScaler
def mm():
mm=MinMaxScaler(feature_range=(2, 3))###限制变换后的数据范围是[2,3]
data=mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])
print(data)
return None
if __name__=='__main__':
mm()
2、标准化:
X
′
=
x
−
m
e
a
n
σ
X'=\frac{x-mean}{\sigma}
X′=σx−mean
mean是平均值,
σ
\sigma
σ是标准差(考量数据的稳定性),std为方差
s
t
d
=
(
x
1
−
m
e
a
n
)
2
+
(
x
2
−
m
e
a
n
)
2
+
.
.
.
+
(
x
n
−
m
e
a
n
)
2
n
(
每个特征的样本数
)
,
σ
=
s
t
d
std=\frac{(x_1-mean)^2+(x_2-mean)^2+...+(x_n-mean)^2}{n(每个特征的样本数)},\sigma=\sqrt{std}
std=n(每个特征的样本数)(x1−mean)2+(x2−mean)2+...+(xn−mean)2,σ=std
⽬的:使得某⼀个特征对最终结果不会造成更⼤影响,每个特征值是同等的重要。
对于标准化来说:如果出现异常点,由于具有一定数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小。
在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。
from sklearn.preprocessing import StandardScaler
def stand():
std=StandardScaler()
data=std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])
print(data)
return None
if __name__=='__main__':
stand()
3、缺失值:
删除:如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
插补:可以通过缺失值每行或者每列的平均值、中位数来填充
pandas缺失值处理:fillna、dropna,前提是数据中的缺失值通过np.nan(float类型)表示,通过replace(‘?’,np.nan)替换缺失值为np.nan
from sklearn.impute import SimpleImputer
import numpy as np
def im():
im=SimpleImputer(missing_values=np.nan,strategy='mean')##missing_values为数据中缺失值的表示,strategy为缺失值填补方法
data=im.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
print(data)
return None
if __name__=='__main__':
im()