gpt4 book ai didi

R - Hadoop - rmr2 - SVM 模型 - 将结果 "list"类转换为原始类 "svm.formula" "svm"

转载 作者:可可西里 更新时间:2023-11-01 15:39:58 28 4
gpt4 key购买 nike

我有以下 R 配置:

操作系统:LinuxR 版本 3.0.1 (2013-05-16)rmr2 版本 2.2.1rhdfs 版本 1.0.6hadoop 版本 1.2.0

如何使用带 rmr2 包的 hadoop 转换 svm 模型的结果?所以我可以像往常一样使用构建的模型:

predict(svm1, "new data")

我有以下代码:

# set eviremonet variables
Sys.setenv(HADOOP_CMD="~/Downloads/hadoop-1.2.0/bin/hadoop")
Sys.setenv(HADOOP_HOME="~/Downloads/hadoop-1.2.0/")

# start hadoop

# load librarys
library(rmr2)
library(rhdfs)
library(e1071)

# load sample data
data(iris)

# init hdfs
hdfs.init()

# push data to hdfs
iris.dfs <- to.dfs(iris)

# define map function
iris.map <- function(k, v)
{
svm(v$Species ~ ., data=v)
}

# rum mar job
iris.svm <- mapreduce(input=iris.dfs, map=iris.map)

# get result back
iris.res <- from.dfs(iris.svm)

svm1 <- svm(iris$Species ~ ., data=iris)

class(iris.res)
class(svm1)

两个类的结果如下:

> class(iris.res)
[1] "list"
> class(svm1)
[1] "svm.formula" "svm"

> str(svm1)
List of 30
$ call : language svm(formula = iris$Species ~ ., data = iris)
$ type : num 0
$ kernel : num 2
$ cost : num 1
$ degree : num 3
$ gamma : num 0,25
$ coef0 : num 0
$ nu : num 0,5
$ epsilon : num 0,1
$ sparse : logi FALSE
$ scaled : logi [1:4] TRUE TRUE TRUE TRUE
$ x.scale :List of 2
..$ scaled:center: Named num [1:4] 5,84 3,06 3,76 1,20
.. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
..$ scaled:scale : Named num [1:4] 0,828 0,436 1,765 0,762
.. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
$ y.scale : NULL
$ nclasses : int 3
$ levels : chr [1:3] "setosa" "versicolor" "virginica"
$ tot.nSV : int 51
$ nSV : int [1:3] 8 22 21
$ labels : int [1:3] 1 2 3
$ SV : num [1:51, 1:4] -1,743 -1,864 -0,173 -0,535 -1,501 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:51] "9" "14" "16" "21" ...
.. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
$ index : int [1:51] 9 14 16 21 23 24 26 42 51 53 ...
$ rho : num [1:3] -0,0203 0,1312 -0,0629
$ compprob : logi FALSE
$ probA : NULL
$ probB : NULL
$ sigma : NULL
$ coefs : num [1:51, 1:2] 0,0891 0,0000 0,8652 0,0000 0,0000 ...
$ na.action : NULL
$ fitted : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
..- attr(*, "names")= chr [1:150] "1" "2" "3" "4" ...
$ decision.values: num [1:150, 1:3] 1,20 1,06 1,18 1,11 1,19 ...
..- attr(*, "dimnames")=List of 2
.. ..$ : chr [1:150] "1" "2" "3" "4" ...
.. ..$ : chr [1:3] "setosa/versicolor" "setosa/virginica" "versicolor/virginica"
$ terms :Classes 'terms', 'formula' length 3 iris$Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
.. ..- attr(*, "variables")= language list(iris$Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
.. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:5] "iris$Species" "Sepal.Length" "Sepal.Width" "Petal.Length" ...
.. .. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
.. ..- attr(*, "term.labels")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
.. ..- attr(*, "order")= int [1:4] 1 1 1 1
.. ..- attr(*, "intercept")= num 0
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(iris$Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
.. ..- attr(*, "dataClasses")= Named chr [1:5] "factor" "numeric" "numeric" "numeric" ...
.. .. ..- attr(*, "names")= chr [1:5] "iris$Species" "Sepal.Length" "Sepal.Width" "Petal.Length" ...
- attr(*, "class")= chr [1:2] "svm.formula" "svm"
> str(iris.res)
List of 2
$ key: NULL
$ val:List of 30
..$ call : language svm(formula = v$Species ~ ., data = v)
..$ type : num 0
..$ kernel : num 2
..$ cost : num 1
..$ degree : num 3
..$ gamma : num 0,25
..$ coef0 : num 0
..$ nu : num 0,5
..$ epsilon : num 0,1
..$ sparse : logi FALSE
..$ scaled : logi [1:4] TRUE TRUE TRUE TRUE
..$ x.scale :List of 2
.. ..$ scaled:center: Named num [1:4] 5,84 3,06 3,76 1,20
.. .. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
.. ..$ scaled:scale : Named num [1:4] 0,828 0,436 1,765 0,762
.. .. ..- attr(*, "names")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
..$ y.scale : NULL
..$ nclasses : int 3
..$ levels : chr [1:3] "setosa" "versicolor" "virginica"
..$ tot.nSV : int 51
..$ nSV : int [1:3] 8 22 21
..$ labels : int [1:3] 1 2 3
..$ SV : num [1:51, 1:4] -1,743 -1,864 -0,173 -0,535 -1,501 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:51] "9" "14" "16" "21" ...
.. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
..$ index : int [1:51] 9 14 16 21 23 24 26 42 51 53 ...
..$ rho : num [1:3] -0,0203 0,1312 -0,0629
..$ compprob : logi FALSE
..$ probA : NULL
..$ probB : NULL
..$ sigma : NULL
..$ coefs : num [1:51, 1:2] 0,0891 0,0000 0,8652 0,0000 0,0000 ...
..$ na.action : NULL
..$ fitted : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
.. ..- attr(*, "names")= chr [1:150] "1" "2" "3" "4" ...
..$ decision.values: num [1:150, 1:3] 1,20 1,06 1,18 1,11 1,19 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:150] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:3] "setosa/versicolor" "setosa/virginica" "versicolor/virginica"
..$ terms :Classes 'terms', 'formula' length 3 v$Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
.. .. ..- attr(*, "variables")= language list(v$Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
.. .. ..- attr(*, "factors")= int [1:5, 1:4] 0 1 0 0 0 0 0 1 0 0 ...
.. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. ..$ : chr [1:5] "v$Species" "Sepal.Length" "Sepal.Width" "Petal.Length" ...
.. .. .. .. ..$ : chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
.. .. ..- attr(*, "term.labels")= chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
.. .. ..- attr(*, "order")= int [1:4] 1 1 1 1
.. .. ..- attr(*, "intercept")= num 0
.. .. ..- attr(*, "response")= int 1
.. .. ..- attr(*, ".Environment")=<environment: 0xb639820>
.. .. ..- attr(*, "predvars")= language list(v$Species, Sepal.Length, Sepal.Width, Petal.Length, Petal.Width)
.. .. ..- attr(*, "dataClasses")= Named chr [1:5] "factor" "numeric" "numeric" "numeric" ...
.. .. .. ..- attr(*, "names")= chr [1:5] "v$Species" "Sepal.Length" "Sepal.Width" "Petal.Length" ...

但是如何将结果列表转换为与通常的 smv 调用相同的类?

最佳答案

只需将 svm(v$Species ~ ., data=v) 包装在 map 函数中的 list 调用中,如 list(svm(v$物种 ~ ., data=v)). map 只能返回列表、矩阵、向量和数据框。如果你返回一个模型(显然,不是我故意实现的)它会被强制到一个列表中。也许只要返回值不是受支持的四个之一,我就可以防御性地这样做,只需在它周围打一个 list ,但我不想尝试太聪明并做出太多猜测。您的方法的另一个问题是 map 函数将在数据集的任意子集上调用(对于较大的数据集),因此您将在输出中获得模型列表(好吧,在您调用输出值之后) .所以现在你有多个支持向量机,你会怎么做,你把它当作一个整体?但是映射阶段的子集是任意的,它们没有任何统计属性,比如被随机化。在我看来,您认为 rmr 具有使 svm 函数并行分布的超能力,但事实并非如此,它只会在不同数据 block 的集群上并行调用它。在一个小示例中,只有一个 block ,但这是具有欺骗性的。尝试 rmr.options(keyval.length = 3) 看看非常小的 block 会发生什么(不适用于生产)。一种不同的方法是在您可以在单台机器上加载的最大样本上构建模型,然后并行运行预测。这在学习阶段当然没有那么可扩展,但我知道大型初创公司就是这样做的。看看 Uri Laserson 在 cloudera 博客上的重采样文章,我认为它会给你一些好的想法。最后,我们在 Google 群组上为 rmr 和相关软件包提供了专门的论坛,非常欢迎您加入我们的社区。

关于R - Hadoop - rmr2 - SVM 模型 - 将结果 "list"类转换为原始类 "svm.formula" "svm",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com