数学建模:1.监督学习--回归分析模型

1.回归分析

在统计学中,回归分析(regression analysis)指的是确定两种或两种以上变量间互相依赖的定量关系的一种统计分析方法。

按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析。

2.线性回归的python实现

线性回归的python实现方法

线性回归通常是人们在学习预测模型时首选的技术之一。在这种技术中,因变量是连续的,自变量可以是连续的也可以是离散的,回归线的性质是线性的。
 线性回归使用最佳的拟合直线(也就是回归线)在因变量(Y)和一个或多个自变量(X)之间建立一种关系。

简单线性回归 / 多元线性回归

2.1 简单线性回归 (一元线性回归)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline
# 简单线性回归(一元线性回归)
# (1)数据示例

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

rng = np.random.RandomState(1)  #选择随机数里边的种子1
xtrain = 10 * rng.rand(30)
ytrain = 8 + 4 * xtrain + rng.rand(30)
# np.random.RandomState → 随机数种子,对于一个随机数发生器,只要该种子(seed)相同,产生的随机数序列就是相同的
# 生成随机数据x与y
# 样本关系:y = 8 + 4*x

fig = plt.figure(figsize =(12,3))
ax1 = fig.add_subplot(1,2,1)
plt.scatter(xtrain,ytrain,marker = ‘.‘,color = ‘k‘)
plt.grid()
plt.title(‘样本数据散点图‘)
# 生成散点图

model = LinearRegression() #创建线性回归模型
model.fit(xtrain[:, np.newaxis], ytrain) #填上值自变量和因变量,如果是多元线性回归自变量给它个矩阵就可以了,model.fit(xtrain, ytrain)这样子是不行的,要把它转置为列的值,
# xtrain.shape #(30,)  # xtrain[:, np.newaxis] #预测结果就会放到这个model里边
# LinearRegression → 线性回归评估器,用于拟合数据得到拟合直线
# model.fit(x,y) → 拟合直线,参数分别为x与y
# x[:,np.newaxis] → 将数组变成(n,1)形状

#print(model.coef_)  #[ 4.00448414]斜率的参数
#print(model.intercept_) #8.44765949943截距的参数

xtest = np.linspace(0, 10, 1000) #测试值
ytest = model.predict(xtest[:, np.newaxis])
# 创建测试数据xtest,并根据拟合曲线求出ytest
# model.predict → 预测

ax2 = fig.add_subplot(1, 2, 2)
plt.scatter(xtrain, ytrain, marker = ‘.‘, color = ‘k‘)
plt.plot(xtest, ytest, color = ‘r‘)
plt.grid()
plt.title(‘线性回归拟合‘)
# 绘制散点图、线性回归拟合直线

# 简单线性回归(一元线性回归)
# (2)误差

rng = np.random.RandomState(8)
xtrain = 10 * rng.rand(15)
ytrain = 8 + 4 * xtrain + rng.rand(15) * 30
model.fit(xtrain[:,np.newaxis],ytrain)
xtest = np.linspace(0,10,1000)
ytest = model.predict(xtest[:,np.newaxis])
# 创建样本数据并进行拟合

plt.plot(xtest,ytest,color = ‘r‘,linestyle = ‘--‘)  # 拟合直线
plt.scatter(xtrain,ytrain,marker = ‘.‘,color = ‘k‘)  # 样本数据散点图
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(‘误差‘)
# 绘制图表

# 简单线性回归(一元线性回归)
# (3)求解a,b

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

model = LinearRegression()
model.fit(xtrain[:,np.newaxis],ytrain)
# 回归拟合

print(‘斜率a为:%.4f‘ % model.coef_[0])
print(‘截距b为:%.4f‘ % model.intercept_)
print(‘线性回归函数为:\ny = %.4fx + %.4f‘ % (model.coef_[0],model.intercept_))
# 参数输出

2.2 多元线性回归

# 多元线性回归

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.scatter_matrix(df[[‘b1‘,‘b2‘,‘b3‘,‘b4‘]],figsize=(10,6),
                 diagonal=‘kde‘,
                 alpha = 0.5,
                 range_padding=0.1)
print(df.head())
# 创建数据,其中包括4个自变量
# 4个变量相互独立

model = LinearRegression()
model.fit(df[[‘b1‘, ‘b2‘, ‘b3‘, ‘b4‘]], df[‘y‘])
print(‘斜率a为:‘, model.coef_)
print(‘线性回归函数为:\ny = %.1fx1 + %.1fx2 + %.1fx3 + %.1fx4 + %.1f‘
      % (model.coef_[0],model.coef_[1],model.coef_[2],model.coef_[3],model.intercept_))
# 参数输出

3. 线性回归模型评估

线性回归模型评估

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

SSE(和方差、误差平方和):The sum of squares due to error
MSE(均方差、方差):Mean squared error
RMSE(均方根、标准差):Root mean squared error
R-square(确定系数) Coefficient of determination

# 模型评价
# MSE, RMES, R-square

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)
# 多元回归拟合

ytest = model.predict(xtrain[:,np.newaxis])  # 求出预测数据
mse = metrics.mean_squared_error(ytrain,ytest)  # 求出均方差MSE
rmse = np.sqrt(mse)  # 求出均方根RMSE
print(mse)
print(rmse)

# ssr = ((ytest - ytrain.mean())**2).sum()  # 求出预测数据与原始数据均值之差的平方和
# sst = ((ytrain - ytrain.mean())**2).sum()  # 求出原始数据和均值之差的平方和
# r2 = ssr / sst # 求出确定系数 #0.99464521596949995
r2 = model.score(xtrain[:,np.newaxis],ytrain)  # 求出确定系数 #0.99464521596949995
r2

print("均方差MSE为: %.5f" % mse)
print("均方根RMSE为: %.5f" % rmse)
print("确定系数R-square为: %.5f" % r2)
# 确定系数R-square非常接近于1,线性回归模型拟合较好

总结:

能比较的有两个 R_square ‘确定系数‘ 、 MSE,

做两个回归模型可以分别判断哪个MSE更小就好,R哪个接近于1哪个就更好。如果只有一个回归模型,判断是否接近1,只要是大于0.6、0.8就非常不错了。同时在后边做组成成分,假如现在有10个参数,做一个回归模型,做一个R模型评估,比如说为0.85,把这10个参数降维,降维为3个主成分,再做一个3元的线性回归,这个叫回归模型2,为0.92,这个时候我们就选择那个3元的线性回归模型0.92更好,相互比较做出最优比较。

原文地址:https://www.cnblogs.com/shengyang17/p/9654972.html

时间: 2024-10-17 13:44:01

数学建模:1.监督学习--回归分析模型的相关文章

关于数学建模——入门

数学建模的概念:系统的描述某种本质特征的数学表达式 分类:初等/几何/图论/组合/微分方程/线性规划模型/非线性规划模型/目标规划模型/统计回归模型等... 步骤:建立.求解.分析.检验 Notice:数学建模没有唯一正确的答案,评价模型优劣的标准是实践. Model+Algorithm+Program=Map(映射) 数学建模论文的结构: 1.title: 2.summary:3.restatement of the problem(问题引言):4.analysis of the proble

数学建模入门书籍介绍

数学模型 需要入门: 马氏链 需要进一步学习:   博弈,  概率 , 统计回归,  差分方程 需要加强: 离散, 图论等 这本书融合知识在例子中,  不太方便知识点查阅,  但是便于从零学起某一模型 数学建模方法 这本书前有知识后有实例, 适合主攻数学的同学入手 数学建模算法与程序 这二货竟然带程序, 样本,  算法还多,  有数学推导,  整整1000页, 绝对是编程同学不二之选 MATLAB在数学建模中的应用 同上 MATLAB统计分析与应用 40个案例分析 看名字就知道啦

2017数学建模B题摘要

刚刚过去的全国大学生数学建模竞赛有参加的吗,大家觉得难度怎么样呢,反正我觉得自己组实力还不够,就当是锻炼自己的能力,分享一下我们的摘要吧! "拍照赚钱"的任务定价 摘  要 在信息化时代,"拍照赚钱"已成为移动互联网下的一种自助式服务模式,通过用户下载 APP,注册成为 APP 的会员,然后从 APP 上领取需要拍照的任务,赚 取APP 对任务所标定的酬金.本文主要研究了用户任务执行情况变量与gps纬度.gps 经度.任务标价之间的函数关系问题.在充分理解题意及合理

数学建模的 基本方法

数学建模的基本方法: 1.机理分析: 对客观事物特性的认识,能够总结实际问题的内部机理的数量规律,如物理规律.几何规律等又称为白箱模型. 2.测试分析 对量测数据的统计分析,找到与数据拟合最好的模型,对象比较复杂,分析不清其内部机理,但是拥有足够多的实验数据(类似机器学习,找最佳模型),又称黑箱模型. 3.二者结合 机理分析建立模型结构,测试分析确定模型参数.(机器学习中的监督学习) 机理分析主要由实例研究来学习,建模主要指机理分析

2015 数学建模竞赛 入门与提高 读书笔记

<数学建模竞赛入门与提高> 第1章:数学建模概述 近半个多世纪以来,数学已经走进了各大领域,而与其他学科相结合形成交叉学科,首要的关键一步就是建立研究对象的数学模型,并加以计算求解,数学建模和计算机技术在知识经济时代的作用可谓是如虎添翼. 1.1  初入门径--认识数学模型与数学建模 数学建模就是用数学语言描述实际现象的过程,这里的实际现象包含具体的自然现象,也包含抽象的比如顾客对某种商品所取的价值倾向.这里的描述不但包括外在形态,内在机制的描述,也包括预测,试验和解释评价实际现象等内容. 数

MATLAB在数学建模中的应用(二)

size():获取矩阵的行数和列数 (1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素为矩阵的行数,第二个元素是矩阵的列数. (2)[r,c]=size(A), (3)size(A,n)如果在size函数的输入参数中再添加一项n,并用1或2为n赋值,则 size将返回矩阵的行数或列数.其中r=size(A,1)该语句返回的是矩阵A的行数, c=size(A,2) 该语句返回的是矩阵A的列数.另外length()=max(size()). subplot():

数学建模算法理论+程序

数学建模的各类算法汇总,带书签!文字可复制. 01 线性规划 02 整数规划 03 非线性规划 04 动态规划 05 图与网络 06 排队论 07 对策论 08 层次分析法 09 插值与拟合 10 数据的统计描述和分析 11 方差分析 12 回归分析 13 微分方程建模 14 稳定状态模型 15 常微分方程的解法 16 差分方程模型 17 马氏链模型 18 变分法模型 19 神经网络模型 20 偏微分方程模型 21 目标规划 22 模糊数学模型 23 现代优化算法 24 时间序列模型 25 贮存

如何入门参加数学建模竞赛

1 网上资源 1.1 数学中国 可以去数学中国网站看看,在数学建模比赛的培训这一块做得很好的机构,如果自己有点银子,可以去参加他们的网上课程.另外他们有专门的数学建模群,群里面有很好关于数学建模的资料.而且这个机构自己也举办数学建模比赛,如果有时候可以在这里组队,直接参加比赛,累积一些经验,增长见识. 1.2 数学建模视频课程,现在网络上有一些比较好的关于数学建模比赛的视频资源,可以谷歌一下 1.3 网络上的一些关于数学建模的电子书,有时候你也不知道哪本书比较适合你,所以你可以先在网上找一些电子

数学建模需掌握的知识总纲

数学建模需要掌握许多知识,这里我列出总纲: 学建模中的算法 穷举法 神经网络 模拟退火 遗传算法 图论算法 蒙特卡洛算法 所需基础知识 高等数学 线性代数(矩阵加减乘除) 概率论与数理统计(概率论,参数估计,假设检验,回归分析) 评价 AHP模型(层次分析) 模糊评价 预测 分析场景 曲线拟合 模糊预测 神经网络 灰色理论 马尔科夫链 运筹 整数规划(分支界定法) 01规划 灵敏度分析 影子价格 概率统计 排队论 主成分分析法 回归分析法 曲线拟合 图论 动态规划 网络最大流 最小费用流 最短路