一、简介

1.1 线性回归的概念

利用回归方程 (函数) 对一个或多个自变量 (特征值) 和因变量 (目标值) 之间关系进行建模的一种分析方式。

1.2 一元线性回归

求一个自变量(特征值)与因变量 (目标值) 之间关系并进行建模,与类比二元一次方程的方程(y = kx+b,k称为斜率,b称为截距)得到一元线性回归的方程为:

y = wx+b,这里的w称为权重,b称为偏置。

1.3 多元线性回归

求多个自变量(特征值)与因变量 (目标值) 之间关系并进行建模,类比一元线性回归的方程得到多元线性回归的方程为:

y = w1x1 + w2x2 + w3x3 +……+ b,这里w1x1 + w2x2 + w3x3 +……可以利用矩阵的思想化简为

二、LinearRegression()方法的使用

2.1 导入需要的包

from sklearn.linear_model import LinearRegression

通过sklearn.linear_model.LinearRegression()创建一个线性回归模型的对象。

1.参数

fit_intercept: 必选(默认True):是否计算截距 b。True=计算,False=模型强制过原点(b=0)

normalize:是否对特征 X 进行归一化(默认 False),注意对于不同版本的sklearn,LinearRegression()方法可能没有此参数。

copy_X   :是否对X复制,如果选择false,则直接对原数据进行覆盖。(即经过中心化,标准化后,是否把新数据覆盖到原数据上)

n_jobs:计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。

2.2 训练模型

使用fit()方法来训练模型

lr_model.fit(
    X=X_train,  # 必选:训练集特征矩阵
    y=y_train,  # 必选:训练集目标变量
    sample_weight=np.array([...])  # 可选:样本权重数组,形状 (n_samples,),为每个样本分配权重(默认 None,所有样本权重相等)
)

2.3 进行预测

使用predict()方法进行预测

 
lr_model.predict( X )   # 必选参数 ,使用训练得到的估计器对输入为X的集合进行预测(X可以是测试
集,也可以是需要预测的数据)。

2.4 评估模型

使用score()方法来评价模型的性能,会给出一个表示模型拟合优度的R^2 
 

lr_model.score(
    x=X_test,                # 必选:评估用特征矩阵
    y=y_test,                # 必选:评估用真实目标变量
    sample_weight=np.array([...])  # 可选:样本权重数组,形状 (n_samples,),默认 None
)

三、评估模型

需要一个评判标准:损失函数

损失函数越小,误差越小,模型建立更符合实际。

误差概念:用预测值 y - 真实值 y 就是误差

损失函数:衡量每个样本预测值与真实值效果的函数,也叫代价函数、成本函数、目标函数

用于描述 每个样本点 和 其预测值之间关系的,等于各个样本的误差和,让损失函数最小,就是让误差和小,线性回归效率,评估就越高

3.1 种类

让损失函数最小的方法:

1. 利用梯度逐步逼近最优解

2. 通过求方程法(求导、求偏导)

四、实例

import pandas as pd
from sklearn.linear_model import LinearRegression


data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python')


corr = data[["体重", "年龄", "血压收缩"]].corr()


lr_model = LinearRegression()
x = data[['体重', '年龄']]
y = data[['血压收缩']]

lr_model.fit(x,y)#训练模型

score = lr_model.score(x,y)
print(lr_model.predict(x))

print(lr_model.predict([[80,60]]))
print(lr_model.predict([[80,60],[70,20]]))

#coef_为权重
#intercept_为偏置
a = lr_model.coef_
b = lr_model.intercept_
print("线性回归模型为:y = {:.2f}x1 + {:.2f}x2 + {:.2f}".format(a[0][0],a[0][1],b[0]))

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐