线性回归(基函数回归和正则化)

如果说朴素贝叶斯是解决分类任务的好起点,那 么线性回归模型就是解决回归任务的好起点。这些模型之所以大受欢迎,是因为它们的拟合速度非常快,而且很容易解释。你可能对线性回归模型最简单的形式(即对数据拟合一条直线)已经很熟悉了,不过经过扩展,这些模型可以对更复杂的数据行为进行建模。

1、简单的直线拟合

首先来介绍最广为人知的线性回归模型——将数据拟合成一条直线。直 线拟合的模型方程为 y = ax + b,其中 a 是直线斜率,b 是直线截距。 看看下面的数据,它们是从斜率为 2、截距为 -5 的直线中抽取的散点:

import matplotlib.pyplot as plt 
import seaborn as sns; sns.set() 
import numpy as np
rng = np.random.RandomState(1)
x = 10 * rng.rand(50) 
y = 2 * x - 5 + rng.randn(50)
plt.scatter(x, y);

用线性回归拟合这些散点

from sklearn.linear_model import LinearRegression 
model = LinearRegression(fit_intercept=True) 
model.fit(x[:, np.newaxis], y) 
xfit = np.linspace(0, 10, 1000) 
yfit = model.predict(xfit[:, np.newaxis]) 
plt.scatter(x, y) 
plt.plot(xfit, yfit)

在这里插入图片描述
数据的斜率和截距都在模型的拟合参数中,Scikit-Learn 通常会在参数 后面加一条下划线,即 coef_ 和 intercept_:

print("Model slope: ", model.coef_[0])
print(“Model intercept:”, model.intercept_)
Model slope: 2.02720881036
Model intercept: -4.99857708555
可以看到,拟合结果与真实值非常接近,这正是我们想要的。
通过numpy矩阵我们还可以拟合三维甚至更高维的超平面,不过解释器是把他们的关系限定在线性关系上了,对于不是线性关系的,我们就要用到下面的方法。

2、基函数回归
在这里插入图片描述
线性模型拟合出X,Y间更复杂的关系;
2.1、多项式基函数
多项式投影非常有用,因此 Scikit-Learn 内置了 PolynomialFeatures 转换器实现这个功能:

from sklearn.preprocessing import PolynomialFeatures 
x = np.array([2, 3, 4]) 
poly = PolynomialFeatures(3, include_bias=False) 
poly.fit_transform(x[:, None]) 
Out[6]: array([[ 2., 4., 8.], 
[ 3., 9., 27.], 
[ 4., 16., 64.]])

转换器通过指数函数,将一维数组转换成了三维数组。这个新的高 维数组之后可以放在多项式回归模型中。 就像在 5.4 节介绍的那样,最简洁的方式是用管道实现这些过程。 让我们创建一个 7 次多项式回归模型:

from sklearn.pipeline import make_pipeline 
poly_model = make_pipeline(PolynomialFeatures(7), LinearRegression())

数据经过转换之后,我们就可以用线性模型来拟合 x 和 y 之间更复 杂的关系了。例如,下面是一条带噪的正弦波:

rng = np.random.RandomState(1) 
x = 10 * rng.rand(50) 
y = np.sin(x) + 0.1 * rng.randn(50) 
poly_model.fit(x[:, np.newaxis], y) 
yfit = poly_model.predict(xfit[:, np.newaxis]) 
plt.scatter(x, y) 
plt.plot(xfit, yfit)

在这里插入图片描述
通过运用 7 次多项式基函数,这个线性模型可以对非线性数据拟合出极好的效果!

还有一种是高斯基函数,我们需要自己编写转换器,如果大家有兴趣可以自己探索;这里对我们更重要的一点是,既然有高斯基函数,那么必然还有很多其他的形式,如果我们在看到数据时有一种感觉它符合什么形式的,我们就可以把转换器写出来,再来验证自己的想法是不是对的。

3、正则化
上面的基函数虽然可以较好拟合各种关系,但是容易产生过拟合的情况。
3.1、岭回归(L2范数正则化)
正则化最常见的形式可能就是岭回归(ridge regression,或者 L2 范 数正则化),有时也被称为吉洪诺夫正则化(Tikhonov regularization)。其处理方法是对模型系数平方和(L2 范数)进行 惩罚,模型拟合的惩罚项为:
在这里插入图片描述
参数 α 是控制最终模型复杂度的关键。如果 α → 0,那么模型就恢 复到标准线性回归结果;如果 α →∞,那么所有模型响应都会被压 制。岭回归的一个重要优点是,它可以非常高效地计算——因此相 比原始的线性回归模型,几乎没有消耗更多的计算资源。

3.2、Lasso正则化(L1范数)
另一种常用的正则化被称为 Lasso,其处理方法是对模型系数绝对 值的和(L1 范数)进行惩罚: 虽然它在形式上非常接近岭回归,但是其结果与岭回归差别很大。 例如,由于其几何特性,Lasso 正则化倾向于构建稀疏模型;也就 是说,它更喜欢将模型系数设置为 0。(这里说的有点抽象,具体原因下次再说)

from sklearn.linear_model import Lasso model = make_pipeline(GaussianFeatures(30), Lasso(alpha=0.001)) basis_plot(model, title='Lasso Regression')

通过 Lasso 回归惩罚,大多数基函数的系数都变成了 0,所以模型变成了原来基函数的一小部分。与岭回归正则化类似,参数 α 控制 惩罚力度,可以通过交叉检验来确定
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值