线性回归模型是解决回归任务的好起点。
你可能对线性回归模型最简单的形式(即对数据拟合一条直线)已经很熟悉了,不过经过扩展,这些模型可以对更复杂的数据行为进行建模。
首先导入常用的程序库:
%matplotlib inlineimport matplotlib.pyplot as pltimport seaborn as sns; sns.set()import numpy as np
01
简单线性回归
首先来介绍最广为人知的线性回归模型——将数据拟合成一条直线。直线拟合的模型方程为y=ax+by=ax+b,其中aa是直线斜率,bb是直线截距。
下面的数据,它们是从斜率为2、截距为-5 的直线中抽取的散点
rng = np.random.RandomState(1)x = 10 * rng.rand(50)y = 2 * x - 5 + rng.randn(50)plt.scatter(x, y);
用Scikit-Learn 的LinearRegression 评估器来拟合数据,并获得最佳拟合直线
from sklearn.linear_model import LinearRegressionmodel = 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_)
可以看到,拟合结果与真实值非常接近。
LinearRegression 评估器能做的可远不止这些——除了简单的直线拟合,它还可以处理多维度的线性回归模型:
y=a0+a1x1+a2x2+⋯
里面有多个x 变量。从几何学的角度看,这个模型是拟合三维空间中的一个平面,或者是为更高维度的数据点拟合一个超平面。
rng = np.random.RandomState(1)X = 10 * rng.rand(100, 3)y = 0.5 + np.dot(X, [1.5, -2., 1.])model.fit(X, y)print(model.intercept_)print(model.coef_)
0.5
[ 1.5 -2. 1. ]
其中y 变量是由3个随机的x变量线性组合而成,线性回归模型还原了方程的系数。
通过这种方式,就可以用一个LinearRegression 评估器拟合数据的回归直线、平面和超平面了。
局限性: 变量限制在线性关系上
02
基函数回归
可以通过基函数对原始数据进行变换,从而将变量间的线性回归模型转换为非线性回归模型。
这个方法的多维模型是:y=a0+a1x1+a2x2+a3x3+⋯
其中一维的输入变量xx转换成了三维变量x₁,x₂,x₃。让xn=fn(x),这里的fn(x)是转换数据的函数。
假如fn(x)=xn,那么模型就会变成多项式回归:y=a0+a1x+a2x2+a3x3+⋯
需要注意的是,这个模型仍然是一个线性模型,也就是说系数