文章目录

  • @[toc]
  • 1、数据模拟
  • 2、验证集法
  • 3 、K折交叉验证法

1、数据模拟

# 数据模拟
set.seed(1)
N <- 10000
x1 <- 10+(20-10)*runif(N) #生成10000个10-20的随机数
x2 <- 10+(50-10)*runif(N) #生成10000个10-50的随机数
e <- rnorm(N,0,2) #生成1000个正态分布均值0,方差2
y <- 0.3*x1+ 0.4*x2 - 1.2*x1*x2 - 0.6*I(x1^2)+ e
summary(lm(y~x1*x2+ I(x1^2)))# Call:
#   lm(formula = y ~ x1 * x2 + I(x1^2))
#
# Residuals:
#   Min      1Q  Median      3Q     Max
# -8.6198 -1.3567 -0.0348  1.3293  7.4732
#
# Coefficients:
#             Estimate Std. Error   t value Pr(>|t|)
# (Intercept) -0.1747179  0.6391113    -0.273 0.784570
# x1           0.2978905  0.0812568     3.666 0.000248 ***
# x2           0.4040485  0.0089673    45.058  < 2e-16 ***
# I(x1^2)     -0.5994130  0.0026345  -227.525  < 2e-16 ***
# x1:x2       -1.2001345  0.0005887 -2038.484  < 2e-16 ***
#   ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 1.982 on 9995 degrees of freedom
# Multiple R-squared:  0.9999,  Adjusted R-squared:  0.9999
# F-statistic: 4.305e+07 on 4 and 9995 DF,  p-value: < 2.2e-16mydata <- data.frame(y = y,x1 = x1,x2 = x2) #合并为数据框

其中模型
y=0.3x1+0.4x2−1.2x1x2−0.6x12+ey = 0.3x_1+ 0.4x_2 - 1.2x_1x_2 - 0.6x_1^2+ e y=0.3x1​+0.4x2​−1.2x1​x2​−0.6x12​+e
为数据生成过程(DGP)。通过OLS回归得到
y=−0.17−00.2978x1+0.4040x2−1.200x1x2−0.5994x12+ey =-0.17-0 0.2978x_1+ 0.4040x_2 - 1.200x_1x_2 - 0.5994x_1^2+ e y=−0.17−00.2978x1​+0.4040x2​−1.200x1​x2​−0.5994x12​+e
为总体回归模型。


2、验证集法

验证集法将样本数据一分为二,将其中一部分作为为训练集(train sample),一部分作为测试集(test sample);用训练集估计模型的参数,并以估计后的模型预测测试集,并计算验证集误差(validation set error),以此估计测试集误差(test error)

# 验证集法:从10000个数据随机分为两部分70%为训练集,30%为测试集
set.seed(2)
train <- sample(N,0.7*N)  # 随机抽取70%
fit <- lm(y~x1*x2+ I(x1^2),subset = train,data = mydata)
summary(fit)
# Call:
# lm(formula = y ~ x1 * x2 + I(x1^2), data = mydata, subset = train)
#
# Residuals:
#   Min      1Q  Median      3Q     Max
# -6.7103 -1.3641 -0.0341  1.3063  7.4762
#
# Coefficients:
#              Estimate Std. Error   t value Pr(>|t|)
# (Intercept) -0.1736355  0.7631043    -0.228  0.82001
# x1           0.3089380  0.0969150     3.188  0.00144 **
# x2           0.3996129  0.0106803    37.416  < 2e-16 ***
# I(x1^2)     -0.6000714  0.0031394  -191.141  < 2e-16 ***
# x1:x2       -1.1998799  0.0007038 -1704.854  < 2e-16 ***
#   ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#
# Residual standard error: 1.985 on 6995 degrees of freedom
# Multiple R-squared:  0.9999,  Adjusted R-squared:  0.9999
# F-statistic: 2.988e+07 on 4 and 6995 DF,  p-value: < 2.2e-16predict_train_data <- predict(fit,mydata[-train,]) # 测试集预测值
y.test <- mydata$y[-train] # 测试集实际值
MSE <- mean((predict_train_data- y.test)^2) # 计算均方误差
print(MSE)
# 3.898763

将7000样本观测回归,预测3000样本的y值,计算均方误差为3.8987,说明模型外严外推能力较强,但验证集法局限是:将70%观测作为训练集,损失了30%的样本观测,模型估计效果存在信息损失。一种方法是通过设定不同随机种子,再不同随机种子下计算平均MSE。但整体而言,验证集法与实际结果存在偏差。在ML中,大量使用K折交叉验证法。


3 、K折交叉验证法

K折交叉验证法是将全样本划分为K个子集,一般K=5,10K = 5,10K=5,10。再每次保留一个子集作为测试集,其余K−1K-1K−1个子集作为训练集,共计算KKK个均方误差(MSE)。设第kkk折的均方误差为MSEkMSE_kMSEk​,则KKK折交叉验证误差为(平均MSE)
CVk=1K∑k=1KMSEkCV_k=\frac{1}{K}\sum_{k=1}^KMSE_k CVk​=K1​k=1∑K​MSEk​
更极端的,当折数K=nK = nK=n(nnn为样本容量)时,即将每一个样本观测作为测试集,其余n−1n-1n−1个观测作为训练集,计算nnn次交叉验证误差,这种方法称为留一交叉验证法

library(boot)
fit <- glm(y~x1*x2+ I(x1^2),data = mydata)
set.seed(1)
cv.err <- cv.glm(mydata,fit,K = 10) #K为样本划分折数,通常取K = 5或10
names(cv.err)
# "call"  "K"  "delta" "seed"
cv.err$delta  # delta为均方误差;结果有两个,第一个是普通MSE,第二十校正后的MSE
# 3.930578 3.930255   # 设定不同随机种子
set.seed(10)
cv.err <- cv.glm(mydata,fit,K = 10)
cv.err$delta
# 3.929462 3.929198# 留一交叉验证法
# 将每一个样本观测作为测试集,另外9999作为训练集,
# 并预测测试集合,计算均方误差MSE;需要等待一些时间
cv.err <- cv.glm(mydata,fit)
cv.err$delta
# 3.928419 3.928419

从上述几种模型评估方法看,验证集法、K折交叉验证法和留一交叉验证法的MSE差别不大且较小,可以判断线性回归模型具有良好的外推或预测能力。

参考文献

陈强.机器学习及R应用[M].高等教育出版社


-END-

机器学习—线性回归与R模拟相关推荐

  1. 机器学习线性回归算法实验报告_机器学习之简单线性回归

    为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习.本文主要目录如下: 一.机器学习的概念 二.线性回归的概念 三.机器学习线性回归模型 (一)导入数据集 ( ...

  2. 机器学习线性回归学习心得_机器学习中的线性回归

    机器学习线性回归学习心得 机器学习中的线性回归 (Linear Regression in Machine Learning) There are two types of supervised ma ...

  3. 机器学习 线性回归算法_探索机器学习算法简单线性回归

    机器学习 线性回归算法 As we dive into the world of Machine Learning and Data Science, one of the easiest and f ...

  4. 机器学习线性回归实践,广告投放收益预测,手写梯度下降

    机器学习线性回归模型,广告投放与收益预测,梯度下降法python实现 数据集介绍 代码 数据导入 特征缩放 绘制三个不同地方广告投入与收益的散点图 数据处理 添加偏置列 定义代价函数 梯度下降 初始化 ...

  5. 多元线性回归:R语言的有关基础操作

    数据来源:波士顿地区房价预测完整数据集(CSV格式)_weixin_51454889的博客-CSDN博客 参考书目:<R语言实战> (其实我不太清楚实际回归时各种检查和操作的一个整体,因而 ...

  6. 机器学习-线性回归实验

    机器学习线性回归 用scikit-learn和pandas学习线性回归 1. 获取数据,定义问题 2. 整理数据 3. 准备数据 4. 训练数据 5. 模型评价 尝试用不同的线性模型进行训练 交叉验证 ...

  7. 机器学习--线性回归(LinearRegression)

    机器学习–线性回归 基本概念 LinearRegression 拟合一个带有系数 w=(w1,...,wp)w = (w_1, ..., w_p)w=(w1​,...,wp​) 的线性模型,使得数据集 ...

  8. 机器学习——线性回归、房价预测案例【正规方案与梯度下降】

    # coding:utf-8 # 1.获取数据集 #2.数据基本处理 #2.1.数据划分 #3.特征工程--标准化 #4.机器学习(线性回归) #5.模型评估 from sklearn.dataset ...

  9. python 多元线性回归_多元统计分析之多元线性回归的R语言实现

    多元统计分析之多元线性回归的R语言实现 多元统计分析--multivariate statistical analysis 研究客观事物中多个变量之间相互依赖的统计规律性.或从数学上说, 如果个体的观 ...

最新文章

  1. 低版本jdbc连接高版本oracle,转:oracle11g的JDBC连接 URL和之前的版本有一定的区别...
  2. 开源人工智能使用卷积网格自动编码器生成3D面部
  3. 乔布斯最伟大的贡献是什么
  4. java 最近将工作中用到的工具总结——日期工具
  5. boost::describe模块实现console的测试程序
  6. java asm 中文文档_Java ASM3学习(3)
  7. Servlet使用适配器模式进行增删改查案例(DeptDaoImpl.java)
  8. hashset java_Java HashSet clear()方法与示例
  9. Spring框架学习笔记10:基于XML配置方式SSM框架西蒙购物网
  10. Git工作笔记002---CentOS安装gitLab社区版
  11. 效率低的日子怎么办?
  12. Soul 网关源码阅读(六)Sofa请求处理概览
  13. 造成美国断网的“凶手论坛”,终于关闭了DDoS版块
  14. BGP消息格式-UPDATE
  15. 三连杆机械臂正运动学python模拟——运动学学习(一)
  16. 电子计算机最早的应用,电子计算机的最早应用领域是什么?
  17. html提示框延时消失,javascript实现延时显示提示框特效代码
  18. springcloud微服务学习笔记(四十五):Gateway9527搭建
  19. Docker详细学习文档
  20. 基于一阶倒立摆系统的模糊神经网络PID控制

热门文章

  1. 【2023 · CANN训练营第一季】应用开发深入讲解——第六、七章 章节小测 微认证考核
  2. 音视频开发者的福音,快速集成AI配音能力
  3. 宝塔面板子目录伪静态设置
  4. LoadRunner:Run-time-settings
  5. 微型计算机原理计算机钢琴,微型计算机原理与接口技术钢琴课程设计.doc
  6. java date 加减一天_java日期加减操作
  7. 艾永亮:用超级产品战略打造零食品牌,良品铺子正在超级进化
  8. 安装IMail需要注意的几个问题
  9. 存货周转率(Inventory Turnover)
  10. 布丁怪兽-csdn博客_证明在评论中-不是布丁