某建模萌新半年来学习建模的一些记录加总结

一,linear regression

对于这样一个有明显线性趋势的数据,我们要找到一条直线使其具备预测该数据走向的能力,采用最小二乘准则(least square estimates)即,拟合出的直线符合残差平方和最小的准则。将上述翻译成数学语言即可得到如下模型

这是一个凸优化问题,我们可以用高等数学的方法将约束条件代入目标函数得到一个无约束优化,再对a,b分别求偏导数,即可得到a与b的估计值,在统计学上可以证明LSE得到的是参数a与b的无偏估计 即                                          

此外,我们对于参数a与b的估计,我们还可以通过极大似然估计(Maxmum Likelihood Estimate)求得,其结果与LSE是一样的。

总离差平方和:SST

回归平方和 : SSR

残差平方和:  SSE

可以证明  三个平方和满足                 

根据最小二乘准则,对于不同的模型,可以比较不同模型的残差平方和来选择最优拟合能力的模型

定义拟合优度                                         SSE越小其值越大,但不会超过1。

supplyment: 在机器学习中,模型的误差,分为训练误差和泛化误差,这里的R方只能反应模型的训练误差,而训练误差小未必该模型就拥有优良的预测能力,即训练误差小不等于泛化误差小。当模型过拟合时,我们就认为其不具备预测数据的能力。具体参考李航的统计机器学习,本文不做详述。在对二维数据进行多项式回归时,使用的多项式次数过高往往会造成过拟合现象(可以想象成插值那种极端情形)。

二,R语言实现+ggplot可视化

lm函数不仅可以进行一元线性拟合,还可以进行多元线性和非线性拟合。

##输入数据集
x <- c(0.1, 0.11 ,0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.23)
y <- c(42 ,43 ,45 ,45 ,45 ,47.5 ,49 ,53 ,50 ,55 ,55 ,60)
##建立数据框
linear <- data.frame(x,y)
##拟合
model <- lm(y~x,data=linear)
##查看
summary(model)##输出结果Call:
lm(formula = y ~ x, data = linear)Residuals:Min       1Q   Median       3Q      Max
-2.00449 -0.63600 -0.02401  0.71297  2.32451 Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept)   28.083      1.567   17.92 6.27e-09 ***
x            132.899      9.606   13.84 7.59e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.309 on 10 degrees of freedom
Multiple R-squared:  0.9503,    Adjusted R-squared:  0.9454
F-statistic: 191.4 on 1 and 10 DF,  p-value: 7.585e-08

模型给出了各参数的估计值 Estimate    y = 28.083+132.899x        可以看到p-value很小,可以认为我们的回归方程是显著的

我们可以用函数 confint(model)得到该模型在2.5%-97.5%范围的置信区间

confint(model)2.5 %    97.5 %
(Intercept)  24.59062  31.57455
x           111.49556 154.30337

可以用ggplot中的geom_smooth函数进行模型的可视化

geom_smooth(data,formula,method,se=T,colour,size)

data~数据集

formula~拟合的法则,可参照lm函数

method~拟合方法        loess:局部加权回归  lm:线性回归 glm:广义线性回归 gam:广义加性回归

colour~线条颜色

size~线条宽度

se~是否添加置信区间,默认为True

ggplot(linear,aes(x=x,y=y))+geom_point(shape=1,colour="black")+##geom_abline(intercept = 28.083,slope=132.899)geom_smooth(method = lm,se = F,colour = "steelblue",size=0.5)+theme(plot.title = element_text(hjust=0.5,size=15))+labs(title="Linear Regression")+theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(),axis.line =element_line(colour = "black"))+annotate("text",x=0.2,y=58,label="y=132.9x+28.08")+annotate("text",x=0.2,y=59,parse=TRUE,  label = "atop(R^2==0.9503)",size=4)

若要拟合的式子为 y=ax^2+b 可用如下代码

x <- c(0.1, 0.11 ,0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.20, 0.21, 0.23)
y <- c(42 ,43 ,45 ,45 ,45 ,47.5 ,49 ,53 ,50 ,55 ,55 ,60)
##建立数据框
unlinear <- data.frame(x,y)
model <- lm(y~I(x^2),unlinear)
summary(model)Call:
lm(formula = y ~ I(x^2), data = linear)Residuals:Min       1Q   Median       3Q      Max
-1.46660 -0.59878 -0.07453  0.32904  2.95051 Coefficients:Estimate Std. Error t value Pr(>|t|)
(Intercept)  38.3482     0.8144   47.09  4.5e-13 ***
I(x^2)      404.8879    27.5137   14.72  4.2e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 1.234 on 10 degrees of freedom
Multiple R-squared:  0.9559,    Adjusted R-squared:  0.9514
F-statistic: 216.6 on 1 and 10 DF,  p-value: 4.201e-08

可以看到     此时的 multiple R-squared = 0.9559 竟然比线性模型的0.9503还要高,此时

y = 38.3482+404.8879x^2

在使用lm函数进行非线性拟合时,formula中一定要用到 I()

我们在选择模型时,不光要考虑其训练误差,也要考虑其泛化能力,

对于大样本数据这里给出一个方法,可以将待拟合的数据非为训练集和预测集,训练集用来拟合,再计算模型在预测集上的残差平方和,即可近似认为该误差为其泛化误差。

在机器学习中,常在误差函数中加入惩罚项,即正则化(regularization)来防止过拟合,其原理是使模型参数空间中的参数方差变小(过拟合时往往参数估计的方差很大)

正则化项一般选择       参数向量的L1范式(绝对值)和参数向量的L2范式(平方和开方)

前者称为lasso回归后者称为岭回归,具体参见机器学习相关内容,本文不做阐述

ps:有个东西叫奥卡姆剃刀原理,模型越简单越好(个人理解)

三,multiple regression

R语言数学建模(1):Regression analysis相关推荐

  1. R语言数学建模(4)模式甄别

    模式(Pattern):分散于大量数据集中的极少量的零星数据组成的数据集合模式通常具有其他众多数据所没有的,某种局部的,非随机性的,非常规的特殊结构或相关性,很可能是某些重要因素所导致的必然结构(偶然 ...

  2. R语言数学建模(2):how to build a graph

    一,Undirected Graphs small scale graph: 1,  graph.formula(公式)  eg.A--B,B--C 表示A与B,B与C有无向连接,(only use ...

  3. 深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression)

    深度学习R语言 mlr3 建模,训练,预测,评估(随机森林,Logistic Regression) 本文主要通过使用mlr3包来训练German credit数据集,实现不同的深度学习模型. 1. ...

  4. R语言分位数回归Quantile Regression分析租房价格

    全文链接:http://tecdat.cn/?p=18422 本文想在R软件中更好地了解分位数回归优化.在查看分位数回归之前,让我们从样本中计算中位数或分位数(点击文末"阅读原文" ...

  5. R语言数学函数:abs绝对值、sqrt平方根、ceiling向上近似整数、floor向下近似整数、trunc去除小数部分、round近似到指定小数位、signif近似到有效数字、三角函数、指数、对数

    R语言数学函数:abs绝对值.sqrt平方根.ceiling向上近似整数.floor向下近似整数.trunc去除小数部分.round近似到指定小数位.signif近似到有效数字.三角函数.指数.对数 ...

  6. R语言生存分析(survival analysis)与生存资料有关的概念详解

    R语言生存分析(survival analysis)与生存资料有关的概念详解 目录 R语言生存分析(survival analysis)与生存资料有关的概念详解 #生存分析

  7. R语言亚组分析 (Subgroup Analysis)及森林图绘制实战

    R语言亚组分析 (Subgroup Analysis)及森林图绘制实战 目录 R语言亚组分析 (Subgroup Analysis)及森林图绘制实战 #亚组分析

  8. R语言因子分析FA(factor analysis)步骤实战

    R语言因子分析FA(factor analysis)步骤实战 目录 R语言因子分析FA(factor analysis)步骤实战 #因子分析 #案例分析

  9. R语言因子分析FA(factor analysis)实战案例

    R语言因子分析FA(factor analysis)实战案例 目录 R语言因子分析FA(factor analysis)实战案例 #因子分析 #案例分析

最新文章

  1. Discuz DB层跨库映射关系表名前缀BUG修复后产生的新bug
  2. 重温目标检测--YOLO v1
  3. squid正反向代理-加快网站访问速度
  4. Java的org.apache.commons.lang3.StringUtils
  5. Eclipse如何连接SQL Server 2005数据库
  6. canvas笔记-使用canvas画矩形及各样式(透明)
  7. java数据库编程之JDBC
  8. 3563: DZY Loves Chinese - BZOJ
  9. 力扣—— 295. 数据流的中位数(困难)
  10. 在ISA Server 2004上发布使用非标准的21端口进行连接的FTP服务器
  11. 怎样用命令查看Mysql数据库大小?
  12. C++ List的用法(整理)[转载]
  13. foreach 循环中删除一条数据_SQL Server中删除重复数据的几个方法
  14. 用什么软件录屏最好?录制高清视频无水印,简单几步就学会!
  15. java的英文文献综述_java英文参考文献.doc
  16. html制作dnf,dnf怎么制作img文件 时装拼合教程
  17. 调用百度云短语音合成简单程序
  18. Python 读取mgf文件
  19. 编写网易邮箱登陆界面
  20. 局域网SDN技术硬核内幕 二 云网CP的日常恩爱——硬件VXLAN转发平面

热门文章

  1. All flavors must now belong to a named flavor dimension. Learn more at https://
  2. RayVentory updated
  3. idea前进和撤销快捷键
  4. selenium 校园网自动连接
  5. 保姆式RecyclerView下拉刷新、上拉加载更多Kotlin
  6. Huggingface简介及BERT代码浅析
  7. Bank相关1_数据移行
  8. PHP pdo查询sqlite,PHP PDO 操作 sqlite数据库 案例
  9. NPOI实现Word删除表格
  10. 英文最基本的五个时态