首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:修正残差

R:修正残差
EN

Stack Overflow用户
提问于 2016-10-29 06:56:17
回答 1查看 197关注 0票数 1

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

代码语言:javascript
复制
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)))

如有任何反馈,欢迎光临!

EN

回答 1

Stack Overflow用户

发布于 2016-10-29 07:28:22

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

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

第三,当你说你使用"lamda=0.1“来支持向量机和KNN模型时,我不知道你在说什么。这两个模型都没有将lambda作为参数,所以我不确定您在做什么。这可能只是我不熟悉的事情,但如果是这样的话,它可能是不寻常的,足以证明一个解释或一个链接。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40314289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档