5.2 用make_regression数据(有噪音)进行线性回归
#加入噪音 def LinearRegression_for_make_regression_add_noise(): myutil = util() X,y = make_regression(n_samples=100,n_features=1,n_informative=2,noise=50,random_state=8) X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3) clf = LinearRegression().fit(X,y) print('lr.coef_: {} '.format(clf.coef_[:])) print('reg.intercept_: {}'.format(clf.intercept_)) print('训练集得分: {:.2%}'.format(clf.score(X_train,y_train))) print('测试集得分: {:.2%}'.format(clf.score(X_test,y_test)))
输出
lr.coef_: [68.77648945] reg.intercept_: 1.2498738851984426 训练集得分: 70.18% 测试集得分: 64.27%
有两个参数,线性回归方程:
y = 68.77648945X+1.2498738851984426
由于数据集有噪声,所以score 不为100.00%.
画出拟合线和得分图。
myutil = util() title = "make_regression LinearRegression()回归线(有噪音)" myutil.draw_line(X[:,0],y,clf,title)
myutil.plot_learning_curve(LinearRegression(),X,y,title) myutil.show_pic(title)
得分是非常低的。
5.3 用糖尿病数据进行线性回归
from sklearn import datasets #用线性回归对sklearn数据进行分析 def useing_sklearn_datasets_for_LinearRegression(): X,y = datasets.load_diabetes().data,datasets.load_diabetes().target X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=8,test_size=0.3) lr = LinearRegression().fit(X_train,y_train) print('斜率: {}'.format(lr.coef_[0)) print('截距: {:.3f}'.format(lr.intercept_)) print('糖尿病训练集得分: {:.3f}'.format(lr.score(X_train,y_train))) print('糖尿病测试集得分: {:.3f}'.format(lr.score(X_test,y_test)))
输出:
斜率: [11.5106203 -282.51347161 534.20455671 401.73142674 -1043.89718398 634.92464089 186.43262636 204.93373199 762.47149733 91.9460394 ] 截距: 152.562 糖尿病训练集得分: 53.04% 糖尿病测试集得分: 45.93%
可见用这个方法来拟合糖尿病数据是非常差的。画出得分图。
title = "make_regression 糖尿病数据" myutil.plot_learning_curve(LinearRegression(),X,y,title) myutil.show_pic(title)
由于这里的直线是10维的,所以不能画出拟合曲线。
5.4 用波士顿房价数据进行线性回归
Boston = datasets.load_boston() X,y = Boston.data,Boston.target X_train,X_test,y_train,y_test = train_test_split(X, y) lr = LinearRegression().fit(X_train,y_train) print('斜率: {}'.format(lr.coef_[:])) print('截距: {}'.format(lr.intercept_)) print('波士顿房价训练集得分: {:.2%}'.format(lr.score(X_train,y_train))) print('波士顿房价测试集得分: {:.2%}'.format(lr.score(X_test,y_test)))
输出
斜率: [-1.14130415e-01 4.97830423e-02 4.15213771e-02 2.76156785e+00 -1.77723628e+01 3.89701303e+00 -1.08133797e-02 -1.54389831e+00 3.25856015e-01 -1.49890955e-02 -8.77878878e-01 7.79144087e-03 -4.97358277e-01] 截距: 36.38609891153045 波士顿房价训练集得分: 74.86% 波士顿房价测试集得分: 71.54%
画出得分图。
title = "make_regression 波士顿房价数据" myutil.plot_learning_curve(LinearRegression(),X,y,title) myutil.show_pic(title)
同样这里的直线不是2维的,所以不能画出拟合曲线。