线性回归预测

回归问题和分类问题的区别在于:其待预测的目标是连续变量。这里不详细介绍线性回归模型的具体算法,而是用一个预测波士顿房价的案例来使用LinearRegression模型和SGDRegressor模型,这里使用python3.6版本,Anaconda3进行编程实现。

from sklearn.datasets import load_boston
boston=load_boston()
print(boston.DESCR)

from sklearn.cross_validation import train_test_split
import numpy as np
X=boston.data
y=boston.target

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=33,test_size=0.25)
#分析回归目标值的差异
print('max:',np.max(boston.target),'\tmin:',np.min(boston.target),'\taverage:',np.mean(boston.target))

from sklearn.preprocessing import StandardScaler

ss_X=StandardScaler()
ss_y=StandardScaler()

#标准化处理
X_train=ss_X.fit_transform(X_train)
X_test=ss_X.fit_transform(X_test)
y_train=ss_y.fit_transform(y_train)
y_test=ss_y.fit_transform(y_test)

#LinearRegression回归模型,采用解析方法;SGDRegressor回归模型,采用随机梯度方法
from sklearn.linear_model import LinearRegression
lr=LinearRegression()
lr.fit(X_train,y_train)
lr_y_predict=lr.predict(X_test)

from sklearn.linear_model import SGDRegressor
sgdr=SGDRegressor()
sgdr.fit(X_train,y_train)
sgdr_y_predict=sgdr.predict(X_test)

#对两种模型进行性能评价
from sklearn.metrics import r2_score,mean_squared_error,mean_absolute_error

print('LinearRegression:',lr.score(X_test,y_test),'\t',r2_score(y_test,lr_y_predict),'\t',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict)),'\t',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(lr_y_predict)))
print('SGDRegression:',sgdr.score(X_test,y_test),'\t',r2_score(y_test,sgdr_y_predict),'\t',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_predict)),'\t',mean_absolute_error(ss_y.inverse_transform(y_test),ss_y.inverse_transform(sgdr_y_predict)))

性能评价:

LinearRegression: 0.676930350524         0.676930350524          25.0512388542   3.51371562676
SGDRegression: 0.652214717758    0.652214717758          26.9677210148   3.57681549776

虽然,使用随机梯度下降估计参数的方法SGDRegressor在性能上不及使用解析方法的LinearRegression,但是在训练数据规模十分庞大时,它能够在不损失过多性能的前提下,节省大量计算时间。

你可能感兴趣的:(线性回归预测)