各位小伙伴们大家好,今天让我们来聊一聊机器学习中的所需要的数据这个话题,首先,我们先开始想一个问题,为了让机器学习更加的方便消化,我们需不需要对一些数据动一些手脚呢?所以,围绕这个问题,我们今天就来讲一讲特征数值的标准化。
也可以说是正常化,规律化正轨化等等。话不多说,让我们马上开始:
再说标准化之前,先让我们想一想现实生活当中我们的数据是怎样的,他们很可能来自不同的地方,是被不同的人采集,有着不同的规格,用一个最经典的房价预测的案例来说,当我们用机器学习来根据房屋的各个层面来预测房价,这其中可能包括离市中心的距离,房屋的楼层,房屋的面积,所在城市,几室几厅等等,但是因为这些数据的取值范围往往差距悬殊,比如楼层可能在二三十层以内,面积可能上百,离市中心的距离可以以千来计。然后回到机器学习中,假如我们以一个简单的线性回归来预测房屋的价格,那么方程可能会这样:
价格=a*距离市中心+b*楼层+c*面积
其中这个a,b,c这三个数值我们可以看做为机器学习需要努力努力再努力进行优化的参数,让我们来说的更具体一点,用上述的a,b,c算出的价格是预测价格,机器学习需要预测真实值和预测值之间的差别,然后对这个误差进行一些数学上的处理,使这个误差值无限的接近于一个最小值0,变成一个进一步的阶梯,然后反向的传递回在这个参数a.b,c当中,来提升下一次预测的准确度
这时候就可以用这个公式:
误差=预测-实际价格
这个时候你可能会想,这个概念和我们这个题目的标准化有什么关系呢?
这个时候请我们想象下,现在我们假设把a,b,c分成三个人,他们现在是一个团队,来共同的解决一个问题,在工作中a总是不知道工作发生了什么,只会用蛮力气,
b的能力适中,c的能力最强,这时候团队的boss看了看他们的工作,说不行啊,还有很多提高的部分啊,然后不屑的表示,你们这个结果和我期待的有很大的差距,你们快去缩小下差距。这个时候,老板给的要求是缩小差距,但是a,b,c却不知道自己应该怎么样缩小差距,以及彼此之间的差距在哪?因此这三者只好评分这个任务,不过c很快就完成了,b,第二完成,a做的超级慢,所以这样等完成后花的总时间很长,bc都需要等着a把剩下的工作做完才可以看结果,这样下来,其实效率并不高。
好,这个时候我们把这个问题放到机器学习中,首先,我们先把b去除掉,再把房价的问题在进行简化一下:
价格=a*距离市中心+c*面积
只留下这a,c两个特征属性,因为面积的跨度在0到200之间0,离市中心的跨度普遍在100之内,所以在这个公式中,c只要稍微变化一点,c*面积的变化也会很大,因为面积的值本来就很大,但是如果a也变化一点点,a*市中心的距离不会和c一样有那么大的影响力,这样的差别就会影响最终的工作效率。所以这时候我们要提高效率,那么这个时候效率的标准化就可以帮上忙。
我们在机器学习之前先将收集到的数据预先处理一下,我们把取值面积大的数值可以进行适当的浓缩一下取值跨度小的适当的可以进行放大一下,使得他们的跨度可以尽量的统一,通常用于特征标准化的途径有两种,一种叫做minmax normalization他们会按比例将所有的数据放缩到0-1这个区间,有的也可能是-1-1的区间,还有一种叫做std normalization,他会把所有的数据放缩成平均值为0,方差为1的数据(mean=0,std=1),通过使用这些标准化的手段,我们不仅可以加快机器学习的统计速度,还可以避免机器学习可以学到特别的扭曲。
好了,这就是这篇文章所表述的对于机器学习特征标准化的一个小介绍和通常使用的一个方法,如果你对机器学习感兴趣欢迎继续关注我的简书频道和知乎专栏,我也很希望可以和大家进行交流。