回归问题建模

2019-04-09  本文已影响0人  iriscong

本文以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)
上一篇 下一篇

猜你喜欢

热点阅读