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

线性回归模型(线性回归模型有哪些)

toyiye 2024-07-08 23:04 22 浏览 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_

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码