小编use*_*207的帖子

如何在R中执行随机森林/交叉验证

我无法找到一种在我试图生成的回归随机森林模型上执行交叉验证的方法.

所以我有一个包含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)

r random-forest cross-validation

18
推荐指数
2
解决办法
5万
查看次数

使用插入符号在R中进行交叉验证的SVM

有人告诉我使用插入包来执行支持向量机回归,对我拥有的数据集进行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)

r svm r-caret

15
推荐指数
1
解决办法
3万
查看次数

在R中逐步回归中结合交叉验证

我有一个包含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纳入等式.

谢谢

regression r cross-validation

5
推荐指数
1
解决办法
1926
查看次数

从excel中的单元格中删除重复项

所以我有一个字符串列表,其中一些字符串包含重复项.

例如:

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-十六碳烯酸;

我的代码中有什么东西会导致这种情况发生吗?

string excel vba duplicates excel-vba

5
推荐指数
1
解决办法
1582
查看次数

使用带有插入符号训练的神经网络并调整参数

所以我读过一篇论文,该论文使用神经网络来模拟一个与我目前使用的数据集相似的数据集。我有 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)

r neural-network cross-validation r-caret

4
推荐指数
2
解决办法
9952
查看次数

在DAAG包中交叉验证的线性回归中要看什么值

我在包含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 < …

r cross-validation

1
推荐指数
1
解决办法
4469
查看次数