API详解:sklearn.linear_model.LinearRegression

基于最小二乘法的线性回归。非常基础。那么相应的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()

真是值和预测值对比


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值