在本文中,您将发现4种R语言中的非线性回归方法。
有许多高级方法可用于非线性回归,而这些方法只是您可以使用的样本。
通过我的新书Machine Learning Mastery With R 来启动您的项目,其中包含分步教程以及所有示例的R源代码文件。
让我们开始吧。

非线性回归
照片作者:Steve Jurvetson,部分权利保留
本文中的每个示例都使用了R自带的 datasets包 中提供的 longley 数据集。longley数据集描述了从1947年到1962年观察到的7个经济变量,用于预测每年的就业人数。
多变量自适应回归样条
多元自适应回归样条(MARS)是一种非参数回归方法,它使用铰链函数(具有折点的函数)来模拟数据中的多个非线性。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 加载包 library(earth) # 加载数据 data(longley) # 拟合模型 fit <- earth(Employed~., longley) # 总结拟合 summary(fit) # 总结输入变量的重要性 evimp(fit) # 进行预测 predictions <- predict(fit, longley) # 总结准确度 mse <- mean((longley$Employed - predictions)^2) print(mse) |
详细了解earth函数和earth包。
支持向量机
支持向量机(SVM)是一类方法,最初是为分类开发的,它找到最佳分隔类的支撑点。用于回归的SVM称为支持向量回归(SVM)。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 加载包 library(kernlab) # 加载数据 data(longley) # 拟合模型 fit <- ksvm(Employed~., longley) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, longley) # 总结准确度 mse <- mean((longley$Employed - predictions)^2) print(mse) |
详细了解ksvm函数和kernlab包。
需要更多关于R机器学习的帮助吗?
参加我为期14天的免费电子邮件课程,了解如何在您的项目中使用R(附带示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
k-近邻
k-近邻(kNN)不创建模型,而是根据需要时在附近数据上即时创建预测。相似性度量(如欧氏距离)用于定位附近数据以进行预测。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 加载包 library(caret) # 加载数据 data(longley) # 拟合模型 fit <- knnreg(longley[,1:6], longley[,7], k=3) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, longley[,1:6]) # 总结准确度 mse <- mean((longley$Employed - predictions)^2) print(mse) |
详细了解knnreg函数和caret包。
神经网络
神经网络(NN)是一个计算单元图,它接收输入并将结果传递为输出。这些单元按层排序,将输入向量的特征连接到输出向量的特征。通过训练,例如反向传播算法,可以设计和训练神经网络来模拟数据中的潜在关系。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 加载包 library(nnet) # 加载数据 data(longley) x <- longley[,1:6] y <- longley[,7] # 拟合模型 fit <- nnet(Employed~., longley, size=12, maxit=500, linout=T, decay=0.01) # 总结拟合 summary(fit) # 进行预测 predictions <- predict(fit, x, type="raw") # 总结准确度 mse <- mean((y - predictions)^2) print(mse) |
详细了解nnet函数和nnet包。
总结
在本文中,您发现了4种非线性回归方法,并提供了可用于您自己问题的复制粘贴代码。
有关更多信息,请参阅Kuhn和Johnson撰写的Applied Predictive Modeling的第7章,其中为初学者提供了R语言非线性回归的优秀入门。
嗨 Jason
刚加入了您看似很棒的R和机器学习课程。
我想和同事一起练习,所以我想问您是否可以通过保存您的课程邮件在一两天内完成14门课程——还是我应该一次上一门课程,并在收到下一门课程之前完成它?
此致
Finn Gilling
finn@gilling.com
我有两天的用电量数据。我想用这些数据训练一个SVR模型,并只预测下一天,但R软件预测两天而不是一天。基本上,我想使用更多数据来训练模型,但预测较少的值。
你好Akash,我认为这可能是你如何构建问题,而不是SVR。
也许重新考虑一下你如何为问题构建数据结构?
你好,
我有一个关于MARS的问题,例如,我有50个观测值,包含5个传感器和5个信号,我尝试使用MARS进行回归。我发现模型消除了第5个传感器的读数,因为它非常接近。因此,模型是4个传感器变量的函数,不受第5个传感器影响,我使用这个模型进行预测。但是,如果突然由于任何原因,我得到一个观测值,其中第5个传感器的读数比以前的任何读数都高很多,那么模型将不会注意到这一点,然而这可能是故障的指示。那么,我现在该怎么办,至少让模型感觉到有问题或类似的东西?
提前感谢,
拉米
在拟合模型之前,也许尝试对数据进行缩放(标准化或归一化)?
除了MARS之外,也许可以尝试一套方法?
感谢您的回复,但模型中仍有一些变量未包含。此外,我认为MARS处理训练数据中的数据,就像新观测值超出该区域一样,响应是相同的,并且没有变化。
谢谢你
但是你为什么不为神经网络使用训练和测试或验证部分呢?构建神经网络不是必需的吗?
抱歉,我不明白。你能详细说明一下吗?
你好,
我想知道为什么你没有将你的数据库分成两部分(例如,训练数据(70%)和测试数据(30%)),来验证回归模型,特别是对于神经网络。
为了保持示例的简单性,即简洁性。
谢谢你的回复
不客气。
谢谢Jason,
关于神经网络的一个问题
线性输出 = TRUE?这是否用于回归?
线性输出 = FALSE,这是否用于分类?
要知道我正在使用神经网络进行回归的预测模型。
我建议您查看该函数的文档。
干得好
我想问一个关于neuralalnet包的问题,我只找到了训练和测试,函数中没有验证,如何验证模型,或者只在neuralnet包中使用训练和测试是否足够?
在我的情况下,训练(92%),测试(83%)。
谢谢你
也许可以查看该包的文档?
另一个选择可以是Lixallyt加权回归!
好建议,谢谢。