本文以python内置数据集“波士顿发房价预测”为例,总结常见的回归模型用法。
- 多元线性回归
- 多项式回归
一、导入文件
# 导入模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import sklearn
from sklearn import datasets
from sklearn.cross_validation import train_test_split
# from sklearn.model_selection import train_test_split,cross_val_score
file = datasets.load_boston()
# 确定自变量和因变量
x = file.data
y = file.target
x_train, x_test, y_train, y_test = train_test_split(x, y)
二、建模
(一)多元线性回归
原理
通过构建x和y之间的超定方程来预测,使用最小二乘法进行求解。
代码
# 多元线性回归
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train, y_train)
y_model = model.predict(x_test)
(二)多项式回归
线性回归模型拟合直线,多项式拟合曲线。线性回归方程所有变量的指数都是1,多项式( Polynomial /,pɒlɪ'nəʊmɪəl/)回归方程至少有一个变量的指数大于1。
原理
通过构建x和y之间的方程来预测y。
通常情况下,指数越高,在训练集上拟合的点更多,拟合效果更好,但是在未知数据集上面的应用效果差,这就是过拟合。
代码
# 多项式回归
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
PolynomialFeatures = PolynomialFeatures(degree=2)
x_train2 = PolynomialFeatures.fit_transform(x_train) # 重新构建x
x_test2 = PolynomialFeatures.fit_transform(x_test)
model = LinearRegression()
model.fit(x_train2, y_train)
y_model = model.predict(x_test2)
3、岭回归
正则化(Regularization)是用来防止拟合过度的一堆方法。scikit-learn提供了一些方法来使线性回归模型正则化。其中之一是岭回归(Ridge Regression,RR,也叫Tikhonov regularization),通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获
得回归系数更为符合实际、更可靠的回归方法。岭回归增加L2范数项(相关系数向量平方和的平方根)来调整成本函数(残差平方和)。
4、LASSO
5、弹性网
三、评估
1、判定系数r2
R的平方,判定系数,介于0-1之间,越接近1,说明模型效果越好,当模型拟合非常差的时候,可能会出现负值。
# 方法一:
model.score(x_test, y_test) # 在测试集评分
print(cross_val_score(model, x, y,cv=5).mean()) # 采用交叉验证,在整个数据集上评分,无需给model进行fit训练即可使用交叉验证评分。
print(cross_val_score(model, x_train, y_train,cv=5).mean()) # 训练集交叉验证R方值
print(cross_val_score(model, x_test, y_test,cv=5).mean()) # 训练集交叉验证R方值
# 方法二:
from sklearn import metrics
print(metrics.r2_score(y, y_model))
2、均方误差MSE
越小越好
from sklearn import metrics
print('MSE:', metrics.mean_squared_error(y, y_model))
3、平均绝对误差MAE
越小越好
from sklearn import metrics
MAE = metrics.mean_absolute_error(y, y_model)
print('MAE:', MAE)
网友评论