我期待在相同的数据上测试不同的回归/分类算法(即svm,nnet,rpart,randomForest,naiveBayes等)的结果,看看哪个更好.但我需要让我的代码尽可能短而干净.要测试所有算法,我想使用一次mclapply()包调用来运行它们multicore:
invisible(lapply(c("party","nnet","caret","klaR","randomForest","e1071","rpart",
"multicore"), require, character.only = T))
algorithms <- c(knn3, NaiveBayes, nnet, ctree, randomForest, svm, naiveBayes, rpart)
data(iris)
model <- mclapply(algorithms, function(alg) alg(Species ~ ., iris))
Run Code Online (Sandbox Code Playgroud)
问题是某些算法需要额外的参数,即nnet()需要size设置参数.当然,这可以通过几个if,else命令来解决,但有没有更简单的解决方案?
这个问题应该是非常简单的.但文档没有帮助.
我正在使用R.我必须使用该neuralnet包来解决多项分类问题.
所有示例均用于二项式或线性输出.我可以使用二项式输出做一些一对一的实现.但我相信我应该能够通过将3个单位作为输出层来实现这一点,其中每个单位都是二项式(即,这是正确输出的概率).没有?
这就是我要使用的nnet(我相信它正在做我想要的):
data(iris)
library(nnet)
m1 <- nnet(Species ~ ., iris, size = 3)
table(predict(m1, iris, type = "class"), iris$Species)
Run Code Online (Sandbox Code Playgroud)
这就是我想要使用的neuralnet(公式黑客是因为neuralnet似乎不支持.公式中的'符号):
data(iris)
library(neuralnet)
formula <- paste('Species ~', paste(names(iris)[-length(iris)], collapse='+'))
m2 <- neuralnet(formula, iris, hidden=3, linear.output=FALSE)
# fails !
Run Code Online (Sandbox Code Playgroud) artificial-intelligence r machine-learning neural-network nnet
我有一个需要分类的3类问题。我想在nnet软件包中使用多项逻辑回归。班级结局有3个因素,P,Q,R。我想将Q作为基本因素。
所以我尝试将它写成这样的对比:
P <- c(1,0,0)
R <- c(0,0,1)
contrasts(trainingLR$Class) <- cbind(P,R)
Run Code Online (Sandbox Code Playgroud)
检查了它:
> contrasts(trainingLR$Class)
P R
P 1 0
Q 0 0
R 0 1
Run Code Online (Sandbox Code Playgroud)
现在multinom():
library(nnet)
multinom(Class ~., data=trainingLR)
Run Code Online (Sandbox Code Playgroud)
输出:
> multinom(Class ~., data=trainingLR)
# weights: 39 (24 variable)
initial value 180.172415
iter 10 value 34.990665
iter 20 value 11.765136
iter 30 value 0.162491
iter 40 value 0.000192
iter 40 value 0.000096
iter 40 value 0.000096
final value 0.000096
converged
Call:
multinom(formula = Class ~ …Run Code Online (Sandbox Code Playgroud) 您好,并提前致谢.我正在使用caret从nnet包中交叉验证神经网络.在函数的method参数中,trainControl我可以指定交叉验证类型,但所有这些都随机选择观察结果以进行交叉验证.无论如何,我可以使用插入符号通过ID或硬编码参数来交叉验证我的数据中的特定观察结果吗?例如,这是我当前的代码:
library(nnet)
library(caret)
library(datasets)
data(iris)
train.control <- trainControl(
method = "repeatedcv"
, number = 4
, repeats = 10
, verboseIter = T
, returnData = T
, savePredictions = T
)
tune.grid <- expand.grid(
size = c(2,4,6,8)
,decay = 2^(-3:1)
)
nnet.train <- train(
x = iris[,1:4]
, y = iris[,5]
, method = "nnet"
, preProcess = c("center","scale")
, metric = "Accuracy"
, trControl = train.control
, tuneGrid = tune.grid …Run Code Online (Sandbox Code Playgroud) 我试图将一个"大"因子转换为R中的一组指标(即虚拟,二元,标志)变量:
FLN <- data.frame(nnet::class.ind(FinelineNumber))
Run Code Online (Sandbox Code Playgroud)
这里FinelineNumber是从Kaggle.com目前沃尔玛大赛5000级因子(该数据是公开的,如果你想重现此错误).
我一直得到这个看起来很有意思的警告:
In n * (unclass(cl) - 1L) : NAs produced by integer overflow
系统可用的内存基本上是无限的.我不确定问题是什么.
我希望nnet::multinom新包支持 R 的函数marginaleffects,但marginaleffects::predictions()依赖predict()建模包提供的方法来计算响应和链接尺度的预测值。nnet::multinom然而,在 的情况下,predict()提供的方法nnet不支持链接规模的预测 - 它仅支持type="probs"或type="class",https://github.com/vincentarelbundock/marginaleffects/issues/404。所以我想重新定义该nnet::multinom predict.multinom方法,以便它也支持type="link"(在该包的原始命名空间中,以便该marginaleffects包也将其视为已被重新定义)。有什么办法可以做到这一点吗?
作为参考,该predict.multinom方法(https://github.com/cran/nnet/blob/master/R/multinom.R)现在看起来像
predict.multinom <- function(object, newdata, type=c("class","probs"), ...)
{
if(!inherits(object, "multinom")) stop("not a \"multinom\" fit")
type <- match.arg(type)
if(missing(newdata)) Y <- fitted(object)
else {
newdata <- as.data.frame(newdata)
rn <- row.names(newdata)
Terms <- delete.response(object$terms)
m <- model.frame(Terms, newdata, na.action = na.omit,
xlev = object$xlevels)
if …Run Code Online (Sandbox Code Playgroud) 我有一个 DF(train_market) 有 8523 行和 12 列,如图所示
我正在做多项逻辑回归模型来获取 test_data 上的 ITem_Outlet_Sales。但是运行模型的代码一起运行了几个小时
model <- nnet(Item_Outlet_Sales~.,train_market,family="multinomial",size = 5574900,softmax=TRUE)
Run Code Online (Sandbox Code Playgroud)
我尝试了下面显示的其他两个,但仍然运行了几个小时,我应该做哪些更改才能完成它
model <- multinom(Item_Outlet_Sales~.,train_market,family="multinomial")
model <- nnet(Item_Outlet_Sales~.,train_market,family="multinomial",size = 5574900,softmax=TRUE)
Run Code Online (Sandbox Code Playgroud)
我得到第二个代码的错误
Error in nnet.default(X, Y, w, mask = mask, size = 0, skip = TRUE, softmax = TRUE, :
too many (5574828) weights
Run Code Online (Sandbox Code Playgroud)
所以将 size =5574900 保留在第三个并尝试,这有帮助。
我正在关注《 R深度学习的要点:由约书亚博士撰写》这本书,在第22页第2章中,下面是一个代码
set.seed(1234)
digits.m1 <- train(digits.X, digits.y,
method = "nnet",
tuneGrid = expand.grid(
.size = c(5),
.decay = 0.1),
trControl = trainControl(method = "none"),
MaxNWts = 10000,
maxit = 100)
Run Code Online (Sandbox Code Playgroud)
我遇到了错误:UseMethod(“ train”)中的错误:没有适用于“ train”的适用方法应用于“ data.frame”类的对象
我正在使用R 3.3.2,window7