sklearn 线性回归
数据集导入,以及模型的建立,和线性回归的应用。
本次所使用的包
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score,mean_absolute_error
from sklearn.preprocessing import StandardScaler
%matplotlib inline
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus']=False
模型参数
# 线性回归是比较简单的模型,没有调参,默认即可。线性回归的性能取决于数据本身,而不是调参能力,因此,线性模型的优化只能通过处理数据进行优化。
# sklearn linear_model linearRegression
# sklearn.linear_model.LinearRegression - scikit-learn 0.23.2 documentation
# 参数:class sklearn.linear_model.LinearRegression(*, fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
# fit_intercept:是否计算此模型的截距,默认启用,如果设置为false,则在计算中将不使用截距。
# normalize:和fit_intercept联动,如果fit_intercept 设置为False,则忽略此参数,如果fit_intercept 设置为True,则对x进行归一化,如果要进行标准化,则设置normalize=False,并调用StandardScaler
# copy_X 默认为True,复制x,如果设置为False,则就是为X。
# n_jobs 设置为-1,用所有的处理器。
# 方法:fit,get_params,predict,score,set_params
使用步骤
1.导入数据集,线性回归对数据集要求很高,预测效果怎么样,可以说完全取决于数据集的质量
diabetes_X,diabetes_y=datasets.load_diabetes(return_X_y=True)
diabetes_X=diabetes_X[:,np.newaxis,2]
2.划分数据集,为训练集和测试集
diabetes_X_train=diabetes_X[:-20]
diabetes_X_test=diabetes_X[-20:]
# 划分标签为训练集和数据集
diabetes_y_train=diabetes_y[:-20]
diabetes_y_test=diabetes_y[-20:]
如果数据没有标准化,则对数据进行标准化处理
sc=StandardScaler()
diabetes_X_train_std=sc.fit_transform(diabetes_X_train)
diabetes_X_test_std=sc.transform(diabetes_X_test)
3.初始化模型
regr=linear_model.LinearRegression()
4.训练模型
regr.fit(diabetes_X_train,diabetes_y_train)
5.使用测试集测试模型
diabetes_y_pred=regr.predict(diabetes_X_test)
6.系数
regr.coef_
7 使用mse,emse,mae,r2评估模型
# 均方误差 MSE
print('MSE',mean_squared_error(diabetes_y_test,diabetes_y_pred))
# RMSE 绝对均方误差 数值越小,模型拟合度越高
print('RMSE',np.sqrt(metrics.mean_squared_error(diabetes_y_test,diabetes_y_pred)))
# MAE
print('MAE',mean_absolute_error(diabetes_y_test,diabetes_y_pred))
# 确定系数,1是完美的预测
print('r2',r2_score(diabetes_y_test,diabetes_y_pred))
# r2偏低,mse偏高:说明和预测值差距比较大,
8. 可视化
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
![0c831a4629698fed8b2e7fe70a021d71.png](https://i-blog.csdnimg.cn/blog_migrate/6f23697b4675986eb2211847a78b2f9b.png)
折线图
plt.figure(figsize=(15,5))
plt.plot(range(len(diabetes_y_test)), diabetes_y_test, 'r', label='测试数据')
plt.plot(range(len(diabetes_y_test)), diabetes_y_pred, 'b', label='预测数据')
plt.legend()
![bc7621b2332e39045b3c62abd56513a8.png](https://i-blog.csdnimg.cn/blog_migrate/a1f6353f8b67b07645720878a31c7488.png)