欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

API详解:sklearn.linear_model.LinearRegression

程序员文章站 2022-07-14 15:13:43
...

基于最小二乘法的线性回归。非常基础。那么相应的API 的调用参数有哪些呢?

调用方法: 老套路,先定义一个线性回归对象

lr = sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)

fit_intercept : 默认为True,是否计算该模型的截距。如果使用中心化的数据,可以考虑设置为False,不考虑截距。注意这里是考虑,一般还是要考虑截距

normalize: 默认为false. 当fit_intercept设置为false的时候,这个参数会被自动忽略。如果为True,回归器会标准化输入参数:减去平均值,并且除以相应的二范数。当然啦,在这里还是建议将标准化的工作放在训练模型之前。通过设置sklearn.preprocessing.StandardScaler来实现,而在此处设置为false

copy_X : 默认为True, 否则X会被改写

n_jobs: int 默认为1. 当-1时默认使用全部CPUs ??(这个参数有待尝试)

可用属性:

coef_:训练后的输入端模型系数,如果label有两个,即y值有两列。那么是一个2D的array

intercept_: 截距

可用的methods:

fit(X,y,sample_weight=None):
X: array, 稀疏矩阵 [n_samples,n_features]
y: array [n_samples, n_targets]
sample_weight: 权重 array [n_samples]
在版本0.17后添加了sample_weight

get_params(deep=True): 返回对regressor 的设置值

predict(X): 预测 基于 R^2值

score: 评估

下面用个例子:从数据产生,到数据提取,数据标准化,模型训练和评估来说明各个API的调用过程

import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False

# 定义目标函数通过改函数产生对应的y
# y=1*x[0]+2*x[1]+....(n+1)*x[n]
def l_model(x):
    params = np.arange(1,x.shape[-1]+1)
    y = np.sum(params*x)+np.random.randn(1)*0.1
    return y

# 定义数据集
x = pd.DataFrame(np.random.rand(500,6))
y = x.apply(lambda x_rows:pd.Series(l_model(x_rows)),axis=1)

# 划分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=2)

# 数据标准化
ss = StandardScaler()
x_train_s = ss.fit_transform(x_train)
x_test_s = ss.transform(x_test)

# 输出下原数据的标准差和平均数
print(ss.scale_)
print(ss.mean_)

"""
输出为:
[ 0.29120331  0.28542949  0.27555607  0.29077365  0.29265191  0.27455333]
[ 0.48993661  0.5081563   0.49650784  0.51339497  0.52648792  0.49551893]
"""

# 训练模型
lr = LinearRegression()
lr.fit(x_train_s,y_train)

print(lr.coef_)
print(lr.intercept_)

"""
[[ 0.29420892  0.56808491  0.83138528  1.1669219   1.45715988  1.64179749]]
[ 10.65847455]
"""

# 用模型预测
y_predict=lr.predict(x_test_s)
lr.score(x_test_s,y_test)

"""
0.99820653306043794
"""

## 预测值和实际值画图比较
t=np.arange(len(x_test_s))
plt.figure(facecolor='w')#建一个画布,facecolor是背景色
plt.plot(t, y_test, 'r-', linewidth=2, label='真实值')
plt.plot(t, y_predict, 'g-', linewidth=1, label='预测值')
plt.legend(loc = 'upper left')#显示图例,设置图例的位置
plt.title("线性回归预测真实值之间的关系", fontsize=20)
plt.grid(b=True)#加网格
plt.show()

API详解:sklearn.linear_model.LinearRegression