from sklearn.linear_model import LinearRegression
# 默认参数如下:
LinearRegression(fit_intercept=True,normalize=False,copy_X=True,n_jobs=1)
1,fit_intercept
bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True。
2,normalize
bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l 2 l_2 l2 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。
标准化的好处:
加速收敛
提升精度
注意:fit_intercept 设置为 False 时,将忽略此参数。
3,n_jobs
数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。
1,coef_
对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。
2,intercept_
intercept_ 表示模型学习到的截距值。
注意:属性后面有下划线 _
1,fit(X, y) ,训练模型
2,predict(X),使用模型进行预测
3,score(X, y),返回 R 2 R^2 R2 值 (确定系数) ,越接近1说明拟合的效果越好。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
# 只从中抽取一个特征
diabetes_X = diabetes_X[:, np.newaxis, 2]
# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]
# 线性回归模型
regr = linear_model.LinearRegression(fit_intercept=True, normalize=True, n_jobs=-1)
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)
# 结果评估
print('均方误差: %.2f'
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'
% r2_score(diabetes_y_test, diabetes_y_pred))
# 绘图
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.show()
输出结果:
系数:
[938.23786125]
均方误差: 2548.07
确定系数(R^2): 0.47
# 加⼊L2正则化的线性回归
from sklearn.linear_model import Ridge
# 默认参数如下:
Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, \
tol=0.001, solver='auto', random_state=None)
1,alpha
正则项系数,初始值为1,数值越大,则对复杂模型的惩罚力度越大。
调参方法:
合适的候选值:[0.001, 0.01, 0.1, 1, 10, 100]
2,fit_intercept
bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True。
3,normalize
bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l 2 l_2 l2 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。
标准化的好处:
加速收敛
提升精度
注意:fit_intercept 设置为 False 时,将忽略此参数。
4,solver
求解优化问题的算法,推荐保持默认值’auto’,可以根据数据类型选择最合适的算法。可选的算法有:
5,max_iter
数值型,部分求解器需要通过迭代实现,这个参数指定了模型优化的最大迭代次数,推荐保持默认值None。
6,random_state
随机数种子,推荐设置一个任意整数,例如0,2020等,好处是模型可以复现。
7,n_jobs
数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。
1,coef_
对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。
2,intercept_
intercept_ 表示模型学习到的截距值。
注意:属性后面有下划线 _
1,fit(X, y) ,训练模型
2,predict(X),使用模型进行预测
3,score(X, y),返回 R 2 R^2 R2 值 (确定系数) ,越接近1说明拟合的效果越好。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]
# 岭回归模型
regr = linear_model.Ridge(alpha=0.001, fit_intercept=True, normalize=True, random_state=0)
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)
# 结果评估
print('均方误差: %.2f'
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'
% r2_score(diabetes_y_test, diabetes_y_pred))
输出:
系数:
[ 0.79171416 -236.95051097 511.18477367 327.22355517 -734.56024578
429.87194777 67.40320158 174.60152289 713.22832241 76.6722493 ]
均方误差: 2003.26
确定系数(R^2): 0.59
from sklearn.linear_model import Lasso
Lasso(alpha=1.0, fit_intercept=True, normalize=False, precompute=False,
copy_X=True, max_iter=1000,tol=1e-4, warm_start=False,
positive=False,random_state=None,selection='cyclic')
1,alpha
正则项系数,初始值为1,数值越大,则对复杂模型的惩罚力度越大。
调参方法:
合适的候选值:[0.001, 0.01, 0.1, 1, 10, 100]
2,fit_intercept
bool类型,默认为True,表示是否计算截距(即 y = wx + b 中的 b ),推荐设置为True。
3,normalize
bool类型,默认为False,表示是否对各个特征进行标准化(默认方法是:减去均值并除以 l 2 l_2 l2 范数),推荐设置为True。如果设置为False,则建议在输入模型之前,手动进行标准化。
标准化的好处:
加速收敛
提升精度
注意:fit_intercept 设置为 False 时,将忽略此参数。
4,precompute
bool 类型,默认值为False,决定是否提前计算Gram矩阵来加速计算。
5,max_iter
数值型,部分求解器需要通过迭代实现,这个参数指定了模型优化的最大迭代次数,推荐保持默认值None。
6,warm_start
bool类型,默认值为False。如果为True,那么使⽤用前⼀次训练结果继续训练。否则从头开始训练。
7,positive
bool类型,默认值为False。如果为True,那么强制要求权重向量的分量都为正数。
9,selection
字符串,默认值为"cyclic"。它指定了了当每轮迭代的时候,选择权重向量的哪个分量来更新:
(1) “random”: 更新的时候,随机选择权重向量的⼀个分量来更更新。
(2) “cyclic”: 更新的时候,从前向后依次选择权重向量的⼀个分量来更新。
10,random_state
随机数种子,推荐设置一个任意整数,例如0,2020等,好处是模型可以复现。
11,n_jobs
数值型,默认值为None。表示使用多少个处理器进行运算,当模型有多个回归目标( _targets > 1 )时,加速效果比较明显。推荐设置为 -1 ,此时会调用所有处理器。
1,coef_
对应 X 各个特征的系数,绝对值越接近1,表示相关性越强。
2,intercept_
intercept_ 表示模型学习到的截距值。
注意:属性后面有下划线 _
1,fit(X, y) ,训练模型
2,predict(X),使用模型进行预测
3,score(X, y),返回 R 2 R^2 R2 值 (确定系数) ,越接近1说明拟合的效果越好。
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
# 载入糖尿病数据集
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
# 划分训练集与测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_y_train = diabetes_y[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_test = diabetes_y[-20:]
# LASSO回归模型
regr = linear_model.Lasso(alpha=0.08, fit_intercept=True, normalize=True, \
precompute=False, copy_X=True, max_iter=1000,tol=1e-4, \
warm_start=False, positive=False, random_state=None,\
selection='cyclic')
regr.fit(diabetes_X_train, diabetes_y_train)
diabetes_y_pred = regr.predict(diabetes_X_test)
print('系数: \n', regr.coef_)
# 结果评估
print('均方误差: %.2f'
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
print('确定系数(R^2): %.2f'
% r2_score(diabetes_y_test, diabetes_y_pred))
输出:
系数:
[ 0. -170.70972431 510.82478065 290.22047462 -71.2270991
-0. -226.56455408 0. 480.30488212 54.40099876]
均方误差: 2004.60
确定系数(R^2): 0.59
可以看到有些系数为0,这也说明Lasso回归具有特征选择的作用。
参考文章:
sklearn.linear_model.LinearRegression
sklearn.linear_model.Ridge
sklearn.linear_model.Lasso
sklearn常用机器学习算法参数详解