模型改善与泛化(标准化与特征映射)
跟我一起机器学习系列文章将首发于公众号:月来客栈,欢迎文末扫码关注!
0 前言
经过前面两讲的内容,我们完成了对线性回归(Linear Regression)和逻辑回归(Logistics Regression)核心内容的学习,但是一些涉及到模型改善(Optimization)与泛化(Generalization)的方式并没有进行介绍。第三讲,笔者将以线性回归和逻辑回归为例(同样可以运通到后续介绍的其他算法模型),介绍一些机器学习中常用的模型和数据处理的技巧,以及尽可能的说清楚为什么要这么做的原因。由于这部分的内容略微有点杂乱,所以笔者将按照如下顺序来递进地进行介绍,同时再辅以示例进行说明。
1 特征标准化
1.1 等高线
什么是特征标准化呢?我们为什么要把特征进行标准化?在回答这两个疑问之前,我们先来介绍一下什么是等高线。
如图所示同样为函数的等高线图,其中任意一个环代表的都是不同 取值下相等的函数值,同时可以看到中心点为对于的函数值5,通常这也是通过梯度下降进行求解的点。
1.2 梯度与等高线
由于**梯度的方向始终与等高线保持垂直,**所以理想情况下不管随机初始点选在何处,我们都希望梯度下降算法沿着如下图左边所示的方向达到最低点,而非右边的情形:
1.3 标准化
-
线性回归
首先以线性回归为例,假设某线性回归模型为,且,则此时便有如下目标函数(暂时忽略):
从式子可以看出,由于,那么当产生相同的增量时,后者能产生更大的函数变化值,而这就引发了如上图所示的“椭圆形”的环状等高线。 -
逻辑回归
从上面的分析可以得知,在线性回归中若各个特征变量之间的取值范围差异较大,则会导致目标函数收敛速度慢等问题。换句话说哪怕是所有的特征变量取值都在类似的范围,那么便不会出现这类问题。那么在逻辑回归中又会有什么样的影响呢?由于在逻辑回归中特征组合的加权和会作用上sigmoid函数,所以影响目标函数收敛的除了上述因素外,更主要的还取决于的大小。
综上所述,在进行建模之前我们应该对数据进行标准化。常见的标准化方法有很多种,这里暂时只介绍机器学习中应用最广泛的标准化方法standarlization。
其中表示每一列特征的平均值,表示每一列特征的标准差。在进行standarlization标准化后,将使得每一列特征的均值都为0 ,方差都为1。其实现代码如下:
def standarlization(X):
mean = X.mean(axis=0)
std = X.std(axis=0)
return (X - mean) / std
读者可通过文末提供的示例代码进行特征标准化与非标准化结果的对比。
2 特征组合与映射
2.1 特征组合
在前面介绍线性回归的时候,我们通过一个预测梯形面积的示例来解释了特征组合的作用(丰富特征属于以提高预测精度)。但是,我们还可以从另外一个角度来理解特征组合。线性回归和逻辑回归从本质上讲都属于线性模型(都是一系列的特征加权求和),因此对于基本的线性模型和逻辑回归模型来讲其分别只能用于预测线性变化的实数和线性可分的分类。即对于如下图所示的两种任务,两个模型均不能够完成:
所谓的特征映射就是将原来的特征属性通过各种方式,将其映射到高维空间的过程。当原有的特征被映射到高维空间后,就可能存在一个线性的超平面能够对数据进行很好的拟合。因此,对于上图中的两种情形我们都可以通过前面介绍的方法将其映射为多项式特征,如:将映射为等等。但是对于上面的两个例子来说,只需要将原始特征映射至最高2次多项式就能完成相应的任务,即通过如下代码便可完成:
pol = PolynomialFeatures(degree=2, include_bias=False)
x_pol = pol.fit_transform(x)
拟合后的结果:
3 总结
本篇为模型的改善与泛化部分的第一篇文章,本文首先介绍了什么是等高线以及梯度与等高线之间的关系;然后介绍了为什么要对数据进行标准化以及一种常用的标准化方法;最后从另外一个角度介绍了特征组合与映射,以此来解决非线性的回归与分类问题。本次内容就到此结束,感谢阅读!
若有任何疑问与见解,请发邮件至aaa@qq.com并附上文章链接,青山不改,绿水长流,月来客栈见!
引用
- 图示及示例代码:关注公众号回复“示例代码”即可直接获取!
推荐阅读