博文配套视频课程:24小时实现从零到AI人工智能
特征工程定义与实现
特征工程定义:是将原始数据转化为更好的代表预测模型的潜在问题的特征的过程,从而提高了未知数据的预测准确性。数据和特征决定了机器学习的上限,而模型和算法知识逼进这个上限而已
- 数值类型预处理:1:标准化缩放、归一化
- 时间类型:时间的序列、切分
- 类别类型数据:one-hot编码
- PCA进行主特征分析 (过滤关联性较弱的特征,提升高运算和学习的效率)
归一化实现
通过对原始数据进行变换,把数据映射到(0~1)之间。公式使用:作用于每一列,max为当前列最大值,min为当前列最小值,那么x"为最终结果,公式中的mx和mi默认为1,0
from sklearn.preprocessing import MinMaxScaler,StandardScaler
mm = MinMaxScaler()
# 归一化
data = mm.fit_transform([[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]])
print('归一化之后的数据\n',data)
data = mm.inverse_transform(data)
print('原始数据\n',data)
print('-'*100)
std = StandardScaler()
归一化缺点
- 根据公式,当前待计算的x为当前列最大值时,最终归一化为1,待计算的x为当前列最小值时,最终归一化为0
- 对异常点的包容性差 (如果异常点影响了最大值或者最小值,则会造成整体数值计算偏差),因此这种方式稳定性较差,适合比较精确数据模型
标准化实现
第1步: 求出每列特征值的标准差(方差开根号则为标准差), 而方差为各个数据与平均数之差的平方的和的平均数,公式作用于每一列,mean为平均数,var为方差,δ为标准差(方差开根号则为标准差)。
第2步: 每个特征值的标准化公式为:(特征值 - 平均值) / δ标准差。通过公式可以知特征值越靠近平平均值则最后结果越趋于0,因此数据会在0左右进行分布,如果数据越趋于零则数据稳定性越好。
data = std.fit_transform([[90, 2, 10, 40],
[60, 4, 15, 45],
[75, 3, 13, 46]])
print('每列特征的平均值',std.mean_)
print('归一化之后的数据\n',data)
data = std.inverse_transform(data)
print('原始数据\n',data)