【问题标题】:R: correcting residualsR:校正残差
【发布时间】:2017-03-11 21:21:22
【问题描述】:

我正在尝试纠正 R 中提供的 Carseats 数据集中的残差。我将从随机森林开始,使用 lamda=0.1 的支持向量机纠正这些残差,然后使用带有 lamda= 的 KNN 纠正这些残差0.1。在每个步骤中,我将使用 5 倍 CV 来调整随机森林的参数 mtry (3,5,10)、svm 中的 gamma (0.01,.1,1,10) 和 k (1,5,10, 20) 在 KNN 中。我对此很陌生,我已经尝试过这个问题,但老实说,我不知道我是否做对了。这是我所拥有的:

set.seed (1)

##Random forest
#mtry=3
rf3 <- randomForest(Sales ~ ., 
 data = Carseats, mtry = 3, ntree = 500,
  importance = TRUE)

#mtry=5
rf5 <- randomForest(Sales ~ ., 
 data = Carseats, mtry = 5, ntree = 500,
  importance = TRUE)

#mtry=10
rf10 <- randomForest(Sales ~ ., 
 data = Carseats, mtry = 10, ntree = 500,
  importance = TRUE)

#cross validation to pick best mtry -- am getting an error
library(tree)
cv.carseats = rfcv(trainx=Carseats[,-11], trainy=Carseats[,-11],cv.fold=5)
cv.carseats

##SVM
library(e1071)
f = svm(Sales~.,data=Carseats)

#gamma = 0.01
svm(Sales~., data=Carseats, type = NULL, kernel = "polynomial", degree = 3,
gamma = if (is.vector(x)) .01 
else 1 / ncol(x),
coef0 = 0, cost = 1)

#gamma = 0.1
svm(Sales~., data=Carseats, type = NULL, kernel = "polynomial", degree = 3,
gamma = if (is.vector(x)) 0.1 
else 1 / ncol(x),
coef0 = 0, cost = 1)

#gamma = 1
svm(Sales~., data=Carseats, type = NULL, kernel = "polynomial", degree = 3,
gamma = if (is.vector(x)) 1 
else 1 / ncol(x),
coef0 = 0, cost = 1)

#gamma = 10
svm(Sales~., data=Carseats, type = NULL, kernel = "polynomial", degree = 3,
gamma = if (is.vector(x)) 10 
else 1 / ncol(x),
coef0 = 0, cost = 1)

#cross validation to pick best gamma
tune.out=tune(svm,Sales~.,data=Carseats,kernel ="polynomial",
ranges =list(cost=c(0.01,0.1,1,10)))

感谢任何反馈!

【问题讨论】:

    标签: r svm random-forest cross-validation knn


    【解决方案1】:

    首先,这可能属于交叉验证而不是堆栈溢出,因为您的问题似乎是实验设计而不是编码困难。

    其次,如果您要使用许多不同的模型进行机器学习,我建议您查看caret。他们内置了许多基础设施,用于训练和测试具有不同交叉验证架构和许多其他参数选项的模型,因此您可以在那里为自己的实验设计节省大量时间。这可能会解决您遇到的大部分问题。

    第三,当您说您对 SVM 和 KNN 模型使用“lamda=0.1”时,我不知道您在说什么。这些模型都没有lambda 作为参数,所以我不确定你在做什么。这可能只是我不熟悉的东西,但如果是这样,它可能是不寻常的,足以证明解释或链接的合理性。

    最后,虽然使用一个模型对另一个模型的残差进行建模并不少见,但继续使用第三种模型对残差进行建模正在获得一点机器学习 Inception-ie。你几乎肯定会开始过度拟合你的数据。如果您对第一个随机森林模型的结果不满意,我建议您尝试使用Boosted Decision Tree 而不是尝试拟合残差,例如Adaboost(注意:也可以使用其他模型进行提升,决策树只是最常见的)。这些模型的功能类似于决策树,但是随着构建的树越多,它们从被其他树错误分类的样本中采样得越强,通常通过关注困难样本来构建更强的分类器。因此,它们也容易出现过拟合,但大多数实现都会包含有助于避免这种情况的工具。

    【讨论】:

    • 谢谢,我不知道交叉验证。
    猜你喜欢
    • 2021-07-26
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2020-10-22
    • 2012-09-27
    • 2017-10-03
    相关资源
    最近更新 更多