sklearn.linear_model.LinearRegression (fit_intercept=True, normalize=False, copy_X=True,
n_jobs=None)
fit_intercept
布尔值,可不填,默认为True
是否计算此模型的截距。如果设置为False,则不会计算截距
normalize
布尔值,可不填,默认为False
当fit_intercept设置为False时,将忽略此参数。如果为True,则特征矩阵X在进入回归之前将会被减去均值(中⼼心化)并除以L2范式(缩放)。如果希望进行标准化,请在fit数据之前使用preprocessing模块中的标准化专用类
StandardScaler
copy_X
布尔值,可不填,默认为True
如果为真,将在X.copy()上进行操作,否则,原本的特征矩阵X可能被线性回归影响并覆盖
n_jobs
整数或者None,可不填,默认为None
用于计算的作业数。只在多标签的回归和数据量足够大的时候才生效。除非None在joblib.parallel_backend上下文中,否则None统一表示为1。如果输入-1,则表示使用全部的CPU来进行计算。
线性回归的类仅有四个参数就可以完成一个完整的算法。并且,这些参数中并没有一个是必填的,更没有对模型有不可替代作用的参数。这说明,线性回归的性能,往往取决于数据本身,而并非是调参能力,线性回归也因此对数据有着很的要求。幸运的是,现实中大部分连续型变量之间,都存在着或多或少的线性联系。所以线性回归虽然简
单,却很强大。
顺便一提,sklearn中的线性回归可以处理多标签问题,只需要在fit的时候输入多维度标签就可以了。
#导⼊需要的模块和库
from sklearn.linear_model import LinearRegression as LR
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.datasets import fetch_california_housing as fch #加利福尼亚房屋价值数据集
import pandas as pd
#导入数据,探索数据
housevalue = fch()
X = pd.DataFrame(housevalue.data) #放入DataFrame中便于查看
y = housevalue.target
X.shape
(20640, 8)
y.shape
(20640,)
X.head(2)
housevalue.feature_names
['MedInc',
'HouseAge',
'AveRooms',
'AveBedrms',
'Population',
'AveOccup',
'Latitude',
'Longitude']
X.columns = housevalue.feature_names
X.head(2)
#划分训练集和测试集
Xtrain, Xtest, Ytrain, Ytest =train_test_split(X,y,test_size=0.3,random_state=420)
Xtrain.head(2)
for i in [Xtrain, Xtest]:
i.index = range(i.shape[0])#恢复索引
Xtrain.head(2)
#建模
reg = LR().fit(Xtrain, Ytrain)
yhat = reg.predict(Xtest)
yhat
array([1.51384887, 0.46566247, 2.2567733 , ..., 2.11885803, 1.76968187,
0.73219077])
#探索建好的模型
reg.coef_ #相关系数:
array([ 4.37358931e-01, 1.02112683e-02, -1.07807216e-01, 6.26433828e-01,
5.21612535e-07, -3.34850965e-03, -4.13095938e-01, -4.26210954e-01])
[*zip(Xtrain.columns,reg.coef_)]
[('MedInc', 0.4373589305968403),
('HouseAge', 0.010211268294494038),
('AveRooms', -0.10780721617317715),
('AveBedrms', 0.6264338275363783),
('Population', 5.216125353178735e-07),
('AveOccup', -0.0033485096463336094),
('Latitude', -0.4130959378947711),
('Longitude', -0.4262109536208467)]
reg.intercept_ #截距
-36.25689322920386
coef_
数组,形状为 (n_features, )或者(n_targets, n_features)
线性回归方程中估计出的系数。如果在fit中传递多个标签(当y为二维或以上的时候),则返回的系数是形状为(n_targets,n_features)的二维数组,而如果仅传递一个标签,则返回的系数是长度为n_features的一维数组
intercept_
数组,线性回归中的截距项。