美文网首页从零开始机器学习程序员
从零开始机器学习-11 特征工程(下)

从零开始机器学习-11 特征工程(下)

作者: 养薛定谔的猫 | 来源:发表于2018-05-03 15:42 被阅读40次

    本文由 沈庆阳 所有,转载请与作者取得联系!
    在特征工程(上),我们提到了坏数据对整个数据集的危害,那么我们有什么方法去挑选出并剔除坏数据呢?

    缩放

    缩放,顾名思义,将特征值从自然范围(比如0到1000)转换到标准范围(0到1或-1到1)。
    对于多特特征,缩放可以帮助提升梯度下降法的收敛速度;避免因训练时超出数值范围(如大于float型最大值的范围)而造成的NaN而产生的后果(即NaN陷阱);帮助模型为特征确定合适的权重。
    除了将[min,max]以线性方式缩放到诸如[0,1]范围之内,还有另一种缩放策略——计算每个数值的Z得分。
    Z得分的计算公式如下:

    缩放值=(原始数值-平均值)/标准偏差
    scaled=(value-mean)/stddev
    

    极端离群值

    通过将totalRooms/population得到roomsPerPerson特征。

    california_housing_dataframe["rooms_per_person"] = (
        california_housing_dataframe["total_rooms"] / california_housing_dataframe["population"])
    

    使用pyplot绘制其概率分布如下:


    人均房间数分布曲线

    我们可以看到,人均房间数大部分分布在1到2之间。但是在图的右侧我们不难观察到甚至于人均55个房间,可以说该分布具有很长的尾巴。由于右侧的这些分布偏离我们的主要分布很远,因此需要降低这些极端离群值对数据集的影响。
    其中一个处理极端离群值的方法就是取对数。

    roomsPerPerson=log((totalRooms / population) + 1)
    
    对数据取对数处理之后的概率分布

    我们可以看到在对数据进行取对数处理过后,最远的离群值到了4左右,相比最远到55少了不少,但是仍然有很多离群值。即使用对数缩放之后仍存在部分离群值。如果这时候我们将roomsPerPerson的最大值限制为4呢?也就是所有大于4的值都会变为4。

    roomsPerPerson = min(totalRooms / population, 4)
    
    限制特征值最大值

    可以看到,由于将特征值最大值限制为了4,因此所有大于4的值都会变成4,因此在4的地方会出现激增。尽管这个地方出现了一个峰值,但也比原始数据有用的多。

    分箱

    假设我们存在一个特征值分布在从32到44范围之内的特征。


    纬度和房价的分布直方图

    可以看出,跟随纬度的变化,房价的变化不再是线性关系。为了将纬度特征变成一个实用的预测指标,则需要对纬度进行分箱。
    即对32到44之间的内容等分为11份。如第一个箱(Bin)是从32到34,第二个箱是从34到36...
    我们使用一个具有11个元素的矢量来表示,即33纬度坐落在第一个箱内,则该纬度表示为:

    [1,0,0,0,0,0,0,0,0,0]
    

    清查

    有时,在进行数据集准备的时候,我们获取的数据往往存在不可靠的情况。其具体表现有如下几种:
    不良标签:将钢笔误标记为茶杯
    重复样本:一个样本存在两次(同时存在训练集和验证集/测试集中,相当致命)
    不良特征值:特征值错误,如将房价错误地多大了一个0
    遗漏值:如某个房屋的价格忘记输入了,导致该样本的特征值为NaN
    在同上面的一些对数据的处理过程中,直方图是可视化数据集中的数据的一种很直观的方法。同时,了解数据的最大值最小值、均值和中间值和标准偏差(方差)都是很有作用的。
    最后请记住,良好的机器学习依赖于良好的数据。

    觉得写的不错的朋友可以点一个 喜欢♥ ~
    谢谢你的支持!

    相关文章

      网友评论

        本文标题:从零开始机器学习-11 特征工程(下)

        本文链接:https://www.haomeiwen.com/subject/ljkkrftx.html