百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

线性回归模型

toyiye 2024-04-27 03:47 25 浏览 0 评论

线性回归:

在统计学中,回归分析指的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。按照自变量和因变量之间的关系类型,可以

分位线性回归分析和非线性回归分析。

线性回归 y = ax + b 一元一次方程,直线关系。

线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。

线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(x)之间建立一种关系。简单线性回归(一元一次线性回归)可以表示为:

Y = a * x + b

多元线性回归可以表示为 Y = a + b1 * x + b2 * x2 , 多元线性回归可以根据给定的预测变量(S)来预测目标变量的值。

因变量一般是最后要推导的结果,自变量就是影响因变量变化的因素。

核心是服从均值为0,方差为σ^2的正态分布。

需要用到的模块是SKlearn中的LinearRegression函数

LinearRegression参数详细介绍:

# 导入库
from sklearn.linear_model import LinearRegression

# 参数
LinearRegression(fit_intercept, normalize, copy_x, n_jobs)

fit_intercept :布尔类型,初始为True。决定在这个模型中是否有intercept,即偏移量(截距),即类似于线性函数y = w1x1 + w0 中的w0。 如果False则无。
    
normalize:布尔类型,初始为False。如果为True,训练样本会在回归之前被归一化;如果fit_intercept设置为False,那这个参数就会被忽略。
    反之,设为True,则模型在回归之前,会对特征集X减去平均数并除以L2范式(没懂),理解为一种标准化的规则。
    如果设为了False,而你又想标准化特征集合,则需要使用 sklearn.preprocessing.StandardScaler类来进行预处理。
    
copy_X:布尔类型,初始化为True。True则,特征集合不变,反之会被复写。

n_jobs:初始为None,表示用1个处理器计算;-1代表所有处理器,只用于多个目标集问题的提速和大型问题

举例:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 导入线性回归模块
from sklearn.linear_model import LinearRegression


# np.random.RandomState :设定随机数种子,对于一个随机数发生器,只要该种子(seed)相同,产生的随机数序列就是相同的。
rng = np.random.RandomState(1)

# 生成随机数X 和 Y
# 随机数的样本关系为 y = 8 + 4*x
xtrain = 10 * rng.rand(20)
ytrain = 8 + 4 * xtrain + rng.rand(20)*30  # rng.rand(30)为添加的噪音数值,干扰用的误差项。

fig = plt.figure(figsize=(12,3))
ax1 = fig.add_subplot(1,2,1)
plt.scatter(xtrain, ytrain, marker='.', color='k')
plt.grid()
plt.title('yangben shuju')

model = LinearRegression() #创建线性回归模型。
model.fit(xtrain[:,np.newaxis], ytrain) # 参数的录入 第一个参数是x自变量,第二个参数是因变量。
# 做线性回归时,x自变量要是矩阵的格式,如果不是矩阵格式,要用xtrain[:,np.newaxis]添加一个维,变成矩阵。

print(model.coef_)  # 查看斜率
print(model.intercept_)  # 查看截距


# 数据模型的应用:
xtest = np.linspace(0,10,100)
ytest = model.predict(xtest[:,np.newaxis])  # predict : 预测
ax2 = fig.add_subplot(1,2,2)
plt.scatter(xtrain, ytrain, marker='.', color='k') # 样本数据的散点图
plt.plot(xtest,ytest,color='r', linestyle='--') #拟合的直线
plt.grid()

# 误差
fig = plt.figure(figsize=(12,6))
plt.scatter(xtrain, ytrain, marker='.',color='k') # 样本数据的散点图
plt.plot(xtest,ytest,color='r', linestyle='--') #拟合的直线
ytest2 = model.predict(xtrain[:,np.newaxis]) # 原样本数据X在拟合直线上的Y值
plt.scatter(xtrain,ytest2, marker='x', color='g')  # ytest2 的散点图
plt.plot([xtrain,xtrain], [ytrain,ytest2], color='gray') # 误差线
plt.grid()
plt.title('wu cha')

# 多元线性回归
rng = np.random.RandomState(5)
xtrain = 10 * rng.rand(150,4)
ytrain = 20 + np.dot(xtrain, [1.5,2,-4,3])
df = pd.DataFrame(xtrain, columns=['b1', 'b2', 'b3', 'b4'])
df['y'] = ytrain

pd.plotting.scatter_matrix(df[['b1', 'b2', 'b3', 'b4']], figsize=(10,6), diagonal='kde', alpha=0.5, range_padding=0.1) # 散点矩阵查看各数据有没有相关性

model = LinearRegression()
model.fit(df[['b1','b2','b3','b4']], df['y'])
print('斜率为:', model.coef_)
print('截距为:' , model.intercept_)

线性回归模型的评估

通过几个参数验证回归模型

1.SSE(和方差,误差平方和)

2.MSE(均方差,方差)

3.RMSE(均方根,标准差)

4.R-square(确定系数)

SSE和方差:该统计参数计算的是拟合数据和原始数据对应点的误差的平方和。

SSE越接近于0,说明模型的选择和拟合更好,数据预测也越成功。

MSE均方差:该统计参数是预测数据和原始数据对应点误差的平方和的均值,也就是SSE/n,和SSE没有太大的区别。

RMSE均方根:该统计参数,也叫回归系统的拟合标准差,是MSE的平方根。 RMSE = np.sqrt(MSE)

R-square(确定系数):

1,SSR:即预测数据与原始数据均值之差的平方和。 SSR = ((ytest - ytrain.mean())**2).sum()

2,SST:即原始数据和原始数据均值之差的平方和。 sst = ((ytrain - ytrain.mean())**2).sum() 注:SST = SSE + SSR

所以,R-square(确定系数)是定义为SSR和SST的比值。 r2 = ssr / sst

其实确定系数是通过数据的变化来表征一个拟合的好坏。由上面的表达式可以知道‘确定系数’的正常取值范围为【0,1】,

越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。

R-square(确定系数)大于0.8就很好了。

注意:如果同时做了两个回归模型,一般的R-square(确定系数)比较就可以了,越接近1越好。如果比较MSE,哪一个值越小哪一个就更好。

#模型评估
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 导入线性回归模块
from sklearn.linear_model import LinearRegression
# 导入评估模块
from sklearn import metrics

rng = np.random.RandomState(1)
xtrain = 10 * rng.rand(30)
ytrain = 8 + 4 * xtrain + rng.rand(30) * 3
# 创建数据

model = LinearRegression()
model.fit(xtrain[:,np.newaxis], ytrain)  #根据原始数据x,y建立线性数学模型model

ytest = model.predict(xtrain[:,np.newaxis])
#ytest是预测值,预测的结果。根据原数据x预测的结果,因为是建立的数学模型,预测值ytest和原数据ytrain肯定不一样,但是非常近似。
mse = metrics.mean_absolute_error(ytrain, ytest) #第一个值是原数据,第二个值是预测的值

# 因为RMSE是MSE的平方根,所以:
rmse = np.sqrt(mse)

print(mse)
print(rmse)

ssr = ((ytest - ytrain.mean())**2).sum()
sst = ((ytrain - ytrain.mean())**2).sum()

r2 = ssr / sst # r2值是R-square(确定系数)的结果值,我们要求得的。

r22 = model.score(xtrain[:,np.newaxis], ytrain) #直接求得R-square(确定系数)的值。
print(r2)
print(r22)
0.7797031388892226
0.8830080061297421
0.9946452159695
0.9946452159694995


SKlearn自带的波士顿房价例子:

import numpy as np
# 导入sklearn自带的样本数据,波士顿房价数据
from sklearn.datasets import load_boston
# 导入sklearn的线性回归模型
from sklearn.linear_model import LinearRegression

# 加载数据,boston就是样本数据,可以直接查看
boston = load_boston()
# 获得自变量数据
X = boston.data
# 获得因变量数据
y = boston.target

# 实例化模型
model = LinearRegression()

# 拟合
model.fit(X, y)

# 预测
y_pred = model.predict(X)
y_pred
# y_pred 就是求得的预测值,y 是真实值。
array([30.00384338, 25.02556238, 30.56759672, 28.60703649, 27.94352423,
       25.25628446, 23.00180827, 19.53598843, 11.52363685, 18.92026211,
       18.99949651, 21.58679568, 20.90652153, 19.55290281, 19.28348205,
       19.29748321, 20.52750979, 16.91140135, 16.17801106, 18.40613603,
       12.52385753, 17.67103669, 15.83288129, 13.80628535, 15.67833832,
       13.38668561, 15.46397655, 14.70847428, 19.54737285, 20.8764282 ,
       11.45511759, 18.05923295,  8.81105736, 14.28275814, 13.70675891,
       23.81463526, 22.34193708, 23.10891142, 22.91502612, 31.35762569,
       34.21510225, 28.02056414, 25.20386628, 24.60979273, 22.94149176..............

y_pred 预测值,y 真实值。有了预测值和真实值,就可以求预测误差了

from sklearn.metrics import mean_squared_error
# 计算误差
mse = mean_squared_error(y, y_pred)
mse
21.894831181729206

输出线性模型的斜率和输出线性模型的截距

model.coef_
model.intercept_

相关推荐

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

Linux 中借助 perf 对 php 程序模拟CPU高的案例分析

导语本文是一篇Linux借助工具分析CPU高的优化案例,没有任何干货内容,很详细的展示了优化CPU高的具体步骤,非常适合初中级读者阅读!...

centos漏洞处理方法(centos podman)

centos服务器最近有诸多漏洞,修复命令及对应的漏洞整理后,分享给大家RHSA-2020:1176-低危:avahi安全更新yumupdateavahi-libsRHSA-2017:326...

Linux上的free命令详解(Buffer和Cache)

解释一下Linux上free命令的输出。下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(FreeOutput)。例如:FO[2][1]...

linux 命令行之你真的会用吗?--free 基本用法篇

free命令行统计内存使用率及swap交换分区的使用率数据。是由sourceforge负责维护的,在ubuntu上其包名为procps,这个源码包中,除了free还有ps,top,vmstat,ki...

kong api gateway 初体验(konga github)

kongapigateway初体验(firstsight?)。Kong是一个可扩展的开源API层(也称为API网关或API中间件)。Kong运行在任何RESTfulAPI的前面,并通过插件...

在Ubuntu下开启IP转发的方法(ubuntu20 ip)

IP地址分为公有ip地址和私有ip地址,PublicAddress是由INIC(internetnetworkinformationcenter)负责的,这些IP地址分配给了注册并向INIC提...

基于 Kubernetes 的 Serverless PaaS 稳定性建设万字总结

作者:许成铭(竞霄)数字经济的今天,云计算俨然已经作为基础设施融入到人们的日常生活中,稳定性作为云产品的基本要求,研发人员的技术底线,其不仅仅是文档里承诺的几个九的SLA数字,更是与客户切身利益乃...

跟老韩学Ubuntu Linux系列-sysctl 帮助文档

sysctl一般用于基于内核级别的系统调优,man帮助手册如下。...

如何在 Linux/Unix/Windows 中发现隐藏的进程和端口

unhide是一个小巧的网络取证工具,能够发现那些借助rootkit、LKM及其它技术隐藏的进程和TCP/UDP端口。这个工具在Linux、UNIX类、MS-Windows等操作系统下都...

跟老韩学Ubuntu Server 2204-Linux性能管理-uptime指令帮助手册

uptime指令是每个从事Linux系统工作的相关同学必知必会的指令之一,如下是uptime指令的帮助手册。UPTIME(1)...

Openwrt+Rclone+emby+KODI搭建完美家庭影音服务器

特别声明:本篇内容参考了波仔分享,在此表示感谢!上一篇《Openwrt+emby+KODI搭建家庭影音服务器》只适用影音下载到本地的情形,不能播放云盘中的影音,内容较少,缺少了趣味性,也不直观。...

Linux Shell脚本经典案例(linux shell脚本例子)

编写Shell过程中注意事项:开头加解释器:#!/bin/bash语法缩进,使用四个空格;多加注释说明。命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。默认变量是全局的,在函数...

解决 Linux 性能瓶颈的黄金 60 秒

如果你的Linux服务器突然负载暴增,告警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。...

跟老韩学Ubuntu Server 2204-Linux性能管理-vmstat指令帮助手册

vmstat可查看ubuntlinux的综合性能,是每个从事Linux人员必知必会、需掌握的核心指令之一。vmstat指令帮助手册如下。VMSTAT(8)...

取消回复欢迎 发表评论:

请填写验证码