我无法找到一种在我试图生成的回归随机森林模型上执行交叉验证的方法.
所以我有一个包含1664个解释变量(不同的化学特性)的数据集,有一个响应变量(保留时间).我正在尝试生成回归随机森林模型,以便能够根据其保留时间预测某些物质的化学特性.
ID RT (seconds) 1_MW 2_AMW 3_Sv 4_Se
4281 38 145.29 5.01 14.76 28.37
4952 40 132.19 6.29 11 21.28
4823 41 176.21 7.34 12.9 24.92
3840 41 174.24 6.7 13.99 26.48
3665 42 240.34 9.24 15.2 27.08
3591 42 161.23 6.2 13.71 26.27
3659 42 146.22 6.09 12.6 24.16
Run Code Online (Sandbox Code Playgroud)
这是我的表格的一个例子.我想基本上将RT映射到1_MW等(最多1664个变量),因此我可以找到哪些变量很重要而哪些变量不重要.
我做:-
r = randomForest(RT..seconds.~., data = cadets, importance =TRUE, do.trace = 100)
varImpPlot(r)
Run Code Online (Sandbox Code Playgroud)
它告诉我哪些变量很重要,哪些变量不重要,这很好.但是,我希望能够对我的数据集进行分区,以便我可以对其进行交叉验证.我找到了一个在线教程,解释了如何做到这一点,但是对于分类模型而不是回归.
我明白你这样做: -
k = 10
n = floor(nrow(cadets)/k)
i = 1
s1 = ((i-1) …Run Code Online (Sandbox Code Playgroud) 有人告诉我使用插入包来执行支持向量机回归,对我拥有的数据集进行10倍交叉验证.我正在针对151个变量绘制我的响应变量.我做了以下事情: -
> ctrl <- trainControl(method = "repeatedcv", repeats = 10)
> set.seed(1500)
> mod <- train(RT..seconds.~., data=cadets, method = "svmLinear", trControl = ctrl)
Run Code Online (Sandbox Code Playgroud)
我得到了
C RMSE Rsquared RMSE SD Rsquared SD
0.2 50 0.8 20 0.1
0.5 60 0.7 20 0.2
1 60 0.7 20 0.2
Run Code Online (Sandbox Code Playgroud)
但我希望能够看一下我的折叠,并且对于每个折叠,预测值与实际值的接近程度.我怎么去看这个?
此外,它说: -
RMSE was used to select the optimal model using the smallest value.
The final value used for the model was C = 0.
Run Code Online (Sandbox Code Playgroud)
我只是想知道这意味着什么以及C在上表中代表什么?
RT (seconds) 76_TI2 114_DECC 120_Lop 212_PCD …Run Code Online (Sandbox Code Playgroud) 我有一个包含151个不同变量的162个观测数据集,我想对它进行逐步回归,但也要对其进行10次交叉验证.我之前使用过DAAG包,以便使用多元线性回归执行10次交叉验证,并且能够使用其中一个公式: -
CVlm(df = data, seed=1500, m = 10, form.lm = formula(RT..seconds.~.,), printit=TRUE)
Run Code Online (Sandbox Code Playgroud)
我想知道包是否支持相同的东西,但逐步回归?我已经浏览了它的pdf,但无法找到任何东西.
我知道我可以使用MASS包执行逐步回归
step <- stepAIC(fit, direction="both")
Run Code Online (Sandbox Code Playgroud)
但是看不出我如何将10倍CV纳入等式.
谢谢
所以我有一个字符串列表,其中一些字符串包含重复项.
例如:
13-十六碳烯酸; 13-甲基-4-十五碳烯酸; 14-甲基-6-十五碳烯酸; 15-十六内酯; 3-十六碳烯酸; 4-十六碳烯酸; 13-十六碳烯酸; 13-甲基-4-十五碳烯酸; 14-甲基-6-十五碳烯酸; 15-十六内酯; 3-十六碳烯酸; 4-十六碳烯酸;
所以我在网上看到了一个宏并调整它以解决我的问题,如下所示:
Function stringOfUniques(inputString As String) As String
Dim inArray() As String
Dim xVal As Variant
inArray = Split(inputString, ";")
For Each xVal In inArray
If InStr(stringOfUniques, Trim(xVal)) = 0 Then _
stringOfUniques = stringOfUniques & Trim(xVal) & ","
Next xVal
End Function
Run Code Online (Sandbox Code Playgroud)
而对于我的一些字符串,它的工作非常出色,但是对于上面的示例,它将返回删除了重复项的字符串,但奇怪的是它将删除其中一个单词"3-Hexadecenoic acid"的两个副本.所以基本上
我应该得到什么:
13-十六碳烯酸; 13-甲基-4-十五碳烯酸; 14-甲基-6-十五碳烯酸; 15-十六内酯; 3-十六碳烯酸; 4-十六碳烯酸;
我真正得到的是:
13-十六碳烯酸; 13-甲基-4-十五碳烯酸; 14-甲基-6-十五碳烯酸; 15-十六内酯; 4-十六碳烯酸;
我的代码中有什么东西会导致这种情况发生吗?
所以我读过一篇论文,该论文使用神经网络来模拟一个与我目前使用的数据集相似的数据集。我有 160 个描述符变量,我想为 160 个案例建模(回归建模)。我阅读的论文使用了以下参数:-
'对于每个分割,都为 10 个单独的训练测试折叠中的每一个开发了一个模型。使用具有 33 个输入神经元和 16 个隐藏神经元的三层反向传播网络,在线权重更新、0.25 学习率和 0.9 动量。对于每个折叠,从总共 50 个不同的随机初始权重起点进行学习,并且允许网络迭代学习时期,直到验证集的平均绝对误差 (MAE) 达到最小值。'
现在他们使用了一个叫做 Emergent 的专业软件来做到这一点,这是一个非常专业的神经元网络模型软件。但是,因为我之前在 R 中做过以前的模型,所以我必须坚持下去。所以我使用 caret train 函数来进行 10 次交叉验证,使用神经网络包进行 10 次。我做了以下事情:-
cadets.nn <- train(RT..seconds.~., data = cadet, method = "neuralnet", algorithm = 'backprop', learningrate = 0.25, hidden = 3, trControl = ctrl, linout = TRUE)
Run Code Online (Sandbox Code Playgroud)
我这样做是为了尝试尽可能接近论文中使用的参数来调整参数,但是我收到以下错误消息:-
layer1 layer2 layer3 RMSE Rsquared RMSESD RsquaredSD
1 1 0 0 NaN NaN NA NA
2 3 0 0 NaN NaN NA NA
3 …Run Code Online (Sandbox Code Playgroud) 我在包含151个变量和161个观察值的数据集上执行了以下操作: -
> library(DAAG)
> fit <- lm(RT..seconds.~., data=cadets)
> cv.lm(df = cadets, fit, m = 10)
Run Code Online (Sandbox Code Playgroud)
得到以下结果: -
fold 1
Observations in test set: 16
7 11 12 24 33 38 52 67 72
Predicted 49.6 44.1 26.4 39.8 53.3 40.33 47.8 56.7 58.5
cvpred 575.0 -113.2 640.7 -1045.8 876.7 -5.93 2183.0 -129.7 212.6
RT..seconds. 42.0 44.0 44.0 45.0 45.0 46.00 49.0 56.0 58.0
CV residual -533.0 157.2 -596.7 1090.8 -831.7 51.93 -2134.0 185.7 -154.6
Run Code Online (Sandbox Code Playgroud)
我想要做的是将预测结果与实际实验结果进行比较,因此我可以绘制两者相互对应的图表,以显示它们的相似程度.我是正确的假设我会通过使用Predicted行中的值作为我的预测结果而不是cvpred来做到这一点?
我只是问这个问题,因为当我在插入符号包中执行相同的操作时,预测值和观察值之间的差异远远大于彼此:
library(caret)ctrl < …