特征预处理

作者:管理员 发布时间:2020-12-24 09:42

我们对数据预处理完成后,要做的就是通过特征工程提取特征进行训练了。

在特征工程中,因数据可能存在以下一些问题,所以我们需要对数据再次进行处理:

(1)不属于同一量纲:数据规格单位不统一,去除单位,规格一致;

(2)信息冗余:包含大量下一步运算中不需要的数据,如考试成绩,如果我只关系是否及格,那么需要把不及格的分数改为0,及格的改为1;

(3)属性不能用:某些机器学习算法和模型只能接受定量特征的输入,那么需要将定性特征转换为定量特征

(4)缺失的值 :  需要用合理的一个值补充上;如用众数填充

(5)信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,所以需要根据模型对数据类型进行变更。




我们针对以上特征问题,提供常见的处理方法:

无量纲化

    我们的数据一般都是有单位的,比如身高的单位有m,cm,这个无量纲化并不是说把m变成cm,而是说,无论是m还是cm,最后都会变成1,也就是没有了单位。
    无量纲化使不同规格的数据转换到同一规格。常见的无量纲化方法有标准化和归一化。

    具体方法见下表;


二值化

    上文中我们以考试成绩举例,说明了二值化的作用;

    具体处理方法,就是定义一个阈值,高于为1,低于为0;

    sklearn中处理方法如下:

from sklearn.preprocessing import Binarizer

#二值化,阈值设置为3,返回值为二值化后的数据
Binarizer(threshold=3).fit_transform(iris.data)


哑编码

    哑编码用于将定性数据转换成定量数据。比如:这个人很瘦、很胖为定性数据,这个人40KG、100KG就是定量了;

当然我们的程序中无法实现这样的转换了,没人知道他们的具体体重,实际场景可能如下:

    我们需要将“职业”这个属性转为哑编码,原本数据为:工人、农民、学生、职员、其它5类,工人定义为(0,0,0,1);农民定义为(0,0,1,0);学生定义为(0,1,0,0);职员定义为(1,0,0,0);其它(0,0,0,0);

from sklearn.preprocessing import OneHotEncoder

# 哑编码,对IRIS数据集的目标值,返回哑编码后的数据
OneHotEncoder().fit_transform(iris.target.reshape((-1,1)))


缺失值

    缺失值一般用均值、众数等作为补充

from numpy import vstack,array,nan
from sklearn.preprocessing import Imputer

# 缺失值计算,返回值为结算缺失值后的数据
# 参数missing_value为缺失值的表示形式,默认为NaN
# 参数strategy为默认填充方式,默认为mean(均值)
Imputer().fit_transform(vstack((array([nan,nan,nan,nan]),iris.data)))


数据变换

    常见的数据转换有基于多项式的、指数函数的、对数函数的转换


特征预处理方法

函数描述操作
特征预处理-标准化无量纲化之标准化 编辑 删除

标签:
Copyright © 2020 万物律动 旗下 AI算法狮 京ICP备20010037号-1
本站内容来源于网络开放内容的收集整理,并且仅供学习交流使用;
如有侵权,请联系删除相关内容;