r - R中的预测给出错误的预测数量
问题描述
我将我的数据集分成 2 个数据框:训练(有 830 行)和测试(200 行)。列名相同且顺序相同。
我建立了一个自然样条模型来预测单个变量水泥的强度。
当我尝试使用该模型对我的测试集进行预测时,我得到的不是预期的 200 个预测,而是 830 个预测。我不知道为什么会这样。我已经浏览了帮助页面和网络,但我没有找到任何解决此问题的方法。
我检查了 test$cement 的尺寸,它确实只有 200 个条目。
这是我现在的代码:
library(tidyverse)
library(caret)
library(splines)
attach(train)
fit1 <- lm(strength~ns(cement, 4), data = train)
summary(fit1)
pred1 <- predict(fit1, newdata = data.frame(test$cement), se=T)
pred1
detach(train)
我也尝试过这些预测版本:
pred2 <- fit1 %>% predict(test$cement)
--> 这给了我错误,说它不理解 %>%
pred = predict.bSpline(fit1, newdata = test$cement, se=T)
和
pred = predict.bSpline2(fit1, newdata = test$cement, se=T)
--> 两者都告诉我他们找不到函数 predict.bSpline 或 predict.bSpline2,尽管我打开了 splines 和 splines2 库。
predict.ns 似乎也不存在。
任何帮助将不胜感激。
解决方案
我认为我们需要查看您的数据集的可重复示例,因为我认为这可能会导致您的问题。当我使用以下代码时,我得到了正确的结果:
library(dplyr)
library(splines)
train <- sample_frac(mtcars, .8)
test <- setdiff(mtcars, train)
fit1 <- lm(mpg~ns(wt, 4), data = train)
pred1 <- predict(fit1, newdata = test, se=T)
pred1
想想caret
我会确保您在创建训练/测试拆分时没有创建列表对象(createDataPartition(list = FALSE)
)
此外,我不会使用attach
. 写出所有变量名称需要更多的输入,但有时您可能会得到奇怪的结果,这可能是您正在发生的事情。我会重新启动您的 R 会话,删除附件,然后重试。
不是最好的解决方案,但我会试一试。
推荐阅读
- node.js - 尝试将 Qlik Sense 应用程序序列化为 JSON 对象时出错
- python - 如何使用 python 使用维度时间、纬度、长 netcdf 进行切片
- java - 无法启动 Hybris 服务器
- vue.js - 如何跟踪存储在 Vuex(store) 中的属性的变化并根据该值执行一些方法?
- python - image.save() 不保存具有指定名称的文件
- python-3.x - 如何在 Python3/PyQt5 中以超链接格式显示程序的输出结果?
- ios - 如何为 React Native iOS UI 组件扩展 UIViewController?
- javascript - 如何使用 Chrome 浏览器在 ASP.Net 中停止将输入类型自动填充为密码
- phpmyadmin - podman 是否可以在同一个 pod 的同一个端口中运行两个容器?
- c - 如何全局使用可变长度数组?