使用 RSofia 的 SVM 使 R 崩溃 [英] SVM using RSofia crashes R

查看:29
本文介绍了使用 RSofia 的 SVM 使 R 崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 R 中的 RSofia 包构建 SVM 模型.以下是我在示例数据上尝试的代码:

I am building a SVM model using RSofia package in R. The following is the code I tried on a sample data:

library(RSofia)

x1 <- as.factor(sample(c("a","b","c"),1000,replace = TRUE))
x2 <- as.factor(sample(c("e","f","g"),1000,replace = TRUE))
y <- as.factor(sample(c(0,1),1000,replace = TRUE))
train <- data.frame(x1=x1,x2=x2,y=y)

lambda <- 0.01
iterations <- 1e+07
learner_type <- 'pegasos'
eta_type <- 'pegasos'
loop_type <- 'rank'
rank_step_probability <- 0.5

sofiaModel <- sofia(y ~ .,
                    data=train,
                    random_seed =9,
                    lambda = lambda,
                    iterations = iterations,
                    learner_type = learner_type,
                    eta_type = eta_type,
                    loop_type = loop_type,
                    rank_step_probability = rank_step_probability)

此代码使我的 Windows 计算机上的 R 崩溃,并显示以下消息:

This code crashes R on my Windows machine with the following message:

R for Windows GUI front-end has stopped working

我在 Linux 机器上尝试了相同的代码并得到以下错误:

I tried the same code on a Linux machine and get the following error:

 *** caught segfault ***
address 0x1, cause 'memory not mapped'

Traceback:
 1: .External(list(name = "CppMethod__invoke_notvoid", address = <pointer: 0xe06ee00>,     dll = list(name = "Rcpp", path = "/opt/vertica/R/library/Rcpp/libs/Rcpp.so",         dynamicLookup = TRUE, handle = <pointer: 0xccad950>,         info = <pointer: 0x2ba407d43a80>), numParameters = -1L),     <pointer: 0xc916ac0>, <pointer: 0xdc1b840>, .pointer, ...)
 2: sofia_facade$train_fit(x, y, random_seed, lambda, iterations,     learner_type, eta_type, loop_type, rank_step_probability,     passive_aggressive_c, passive_aggressive_lambda, perceptron_margin_size,     training_objective, dimensionality, hash_mask_bits, no_bias_term,     verbose, reserve)
 3: sofia.fit(parsed$data, parsed$labels, random_seed, lambda, iterations,     learner_type, eta_type, loop_type, rank_step_probability,     passive_aggressive_c, passive_aggressive_lambda, perceptron_margin_size,     training_objective, parsed$no_bias_term, dimensionality,     hash_mask_bits, verbose, reserve)
 4: sofia.formula(y ~ ., data = train, random_seed = 9, lambda = lambda,     iterations = iterations, learner_type = learner_type, eta_type = eta_type,     loop_type = loop_type, rank_step_probability = rank_step_probability)
 5: sofia(y ~ ., data = train, random_seed = 9, lambda = lambda,     iterations = iterations, learner_type = learner_type, eta_type = eta_type,     loop_type = loop_type, rank_step_probability = rank_step_probability)

Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace

我注意到更大的数据和只有两个/三个变量的相同行为.

I noticed the same behavior with a larger data and only two/three variables.

有人可以指出解决此问题的方法吗?

Could someone point to a fix for this problem?

推荐答案

我可以在 OS X 上重现.这是回溯(使用 R -d lldb 运行后):

I can reproduce on OS X. Here's the backtrace (after running with R -d lldb):

(lldb) bt
* thread #1: tid = 0x10690f, 0x0000000109099fd1 RSofia.so`SfSparseVector::Init(char const*) + 113, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x1)
  * frame #0: 0x0000000109099fd1 RSofia.so`SfSparseVector::Init(char const*) + 113
    frame #1: 0x000000010909a391 RSofia.so`SfSparseVector::SfSparseVector(char const*, bool) + 257
    frame #2: 0x0000000109097842 RSofia.so`SfDataSet::AddVector(char const*) + 34
    frame #3: 0x00000001090884e5 RSofia.so`RSofiaFacade::train_fit(Rcpp::Matrix<14, Rcpp::PreserveStorage> const&, Rcpp::Vector<14, Rcpp::PreserveStorage> const&, long, float, long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, float, float, float, float, bool, int, int, bool, bool, int) + 789
    frame #4: 0x00000001090950ca RSofia.so`Rcpp::CppMethod18<RSofiaFacade, std::__1::map<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, SEXPREC*, std::__1::less<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::allocator<std::__1::pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, SEXPREC*> > >, Rcpp::Matrix<14, Rcpp::PreserveStorage> const&, Rcpp::Vector<14, Rcpp::PreserveStorage> const&, long, float, long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, float, float, float, float, bool, int, int, bool, bool, int>::operator()(RSofiaFacade*, SEXPREC**) + 762
    frame #5: 0x000000010908cf9f RSofia.so`Rcpp::class_<RSofiaFacade>::invoke_notvoid(SEXPREC*, SEXPREC*, SEXPREC**, int) + 447
    frame #6: 0x0000000109009e55 Rcpp.so`CppMethod__invoke_notvoid(SEXPREC*) + 261
    frame #7: 0x0000000100079256 libR.dylib`do_External(call=0x00000001080a2b40, op=<unavailable>, args=<unavailable>, env=<unavailable>) + 342 at dotcode.c:548
    frame #8: 0x00000001000b044a libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001024cee78) + 1274 at eval.c:655
    frame #9: 0x00000001000e251f libR.dylib`do_begin(call=0x00000001080a1c08, op=0x0000000101832778, args=<unavailable>, rho=0x00000001024cee78) + 447 at eval.c:1717
    frame #10: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001024cee78) + 1656 at eval.c:627
    frame #11: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x00000001021b5e60, op=0x00000001024a68a8, arglist=0x00000001024cebb8, rho=0x0000000102219918, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #12: 0x00000001000b04c8 libR.dylib`Rf_eval(e=0x00000001021b5e60, rho=0x0000000102219918) + 1400 at eval.c:674
    frame #13: 0x00000001000e3068 libR.dylib`do_set(call=<unavailable>, op=0x000000010182f9c8, args=<unavailable>, rho=0x0000000102219918) + 1832 at eval.c:2107
    frame #14: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x0000000102219918) + 1656 at eval.c:627
    frame #15: 0x00000001000e251f libR.dylib`do_begin(call=0x00000001021b5200, op=0x0000000101832778, args=<unavailable>, rho=0x0000000102219918) + 447 at eval.c:1717
    frame #16: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x0000000102219918) + 1656 at eval.c:627
    frame #17: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x00000001071cafb8, op=0x00000001021b4c30, arglist=0x0000000102218d78, rho=0x00000001071ceb58, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #18: 0x00000001000b04c8 libR.dylib`Rf_eval(e=0x00000001071cafb8, rho=0x00000001071ceb58) + 1400 at eval.c:674
    frame #19: 0x00000001000e3068 libR.dylib`do_set(call=<unavailable>, op=0x000000010182f9c8, args=<unavailable>, rho=0x00000001071ceb58) + 1832 at eval.c:2107
    frame #20: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001071ceb58) + 1656 at eval.c:627
    frame #21: 0x00000001000e251f libR.dylib`do_begin(call=0x00000001071d4140, op=0x0000000101832778, args=<unavailable>, rho=0x00000001071ceb58) + 447 at eval.c:1717
    frame #22: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001071ceb58) + 1656 at eval.c:627
    frame #23: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x00000001071d0c38, op=0x00000001071db878, arglist=0x00000001071cc7f0, rho=0x00000001071caa78, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #24: 0x0000000100123d73 libR.dylib`dispatchMethod(op=0x00000001071ccfb8, sxp=0x00000001071db878, dotClass=0x00000001070b97e8, cptr=0x00007fff5fbfc000, method=0x00000001080244a0, generic=<unavailable>, rho=<unavailable>, callrho=<unavailable>, defrho=<unavailable>) + 723 at objects.c:335
    frame #25: 0x00000001001239e8 libR.dylib`Rf_usemethod(generic="sofia", obj=<unavailable>, call=<unavailable>, args=<unavailable>, rho=0x00000001071caa78, callrho=0x000000010185e260, defrho=<unavailable>, ans=<unavailable>) + 840 at objects.c:375
    frame #26: 0x0000000100123fa3 libR.dylib`do_usemethod(call=0x00000001071cc940, op=<unavailable>, args=<unavailable>, env=0x00000001071caa78) + 515 at objects.c:451
    frame #27: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001071caa78) + 1656 at eval.c:627
    frame #28: 0x00000001000e251f libR.dylib`do_begin(call=0x00000001071cc5f8, op=0x0000000101832778, args=<unavailable>, rho=0x00000001071caa78) + 447 at eval.c:1717
    frame #29: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x00000001071caa78) + 1656 at eval.c:627
    frame #30: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x00000001026fbe68, op=0x00000001071ccfb8, arglist=0x00000001071cc7f0, rho=0x000000010185e260, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #31: 0x00000001000b04c8 libR.dylib`Rf_eval(e=0x00000001026fbe68, rho=0x000000010185e260) + 1400 at eval.c:674
    frame #32: 0x00000001000e3068 libR.dylib`do_set(call=<unavailable>, op=0x000000010182f9c8, args=<unavailable>, rho=0x000000010185e260) + 1832 at eval.c:2107
    frame #33: 0x00000001000b05c8 libR.dylib`Rf_eval(e=<unavailable>, rho=0x000000010185e260) + 1656 at eval.c:627
    frame #34: 0x00000001000e421f libR.dylib`do_eval(call=<unavailable>, op=0x000000010184ab50, args=<unavailable>, rho=<unavailable>) + 2095 at eval.c:2478
    frame #35: 0x00000001000bb4ee libR.dylib`bcEval(body=<unavailable>, rho=0x00000001071ccab0, useCache=<unavailable>) + 44286 at eval.c:5527
    frame #36: 0x00000001000b010e libR.dylib`Rf_eval(e=0x000000010188f758, rho=0x00000001071ccab0) + 446 at eval.c:558
    frame #37: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x000000010087d838, op=0x000000010188fb48, arglist=0x00000001071cc400, rho=0x00000001026cb430, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #38: 0x00000001000bab80 libR.dylib`bcEval(body=<unavailable>, rho=0x00000001026cb430, useCache=<unavailable>) + 41872 at eval.c:5499
    frame #39: 0x00000001000b010e libR.dylib`Rf_eval(e=0x0000000100881f90, rho=0x00000001026cb430) + 446 at eval.c:558
    frame #40: 0x00000001000deb6d libR.dylib`forcePromise(e=0x00000001071cd060) + 157 at eval.c:457
    frame #41: 0x00000001000b01cc libR.dylib`Rf_eval(e=<unavailable>, rho=<unavailable>) + 636 at eval.c:581
    frame #42: 0x00000001000e4571 libR.dylib`do_withVisible(call=<unavailable>, op=<unavailable>, args=0x00000001026fc240, rho=<unavailable>) + 49 at eval.c:2507
    frame #43: 0x0000000100122128 libR.dylib`do_internal(call=0x0000000100000007, op=<unavailable>, args=<unavailable>, env=0x00000001071cca40) + 344 at names.c:1350
    frame #44: 0x00000001000bb67d libR.dylib`bcEval(body=<unavailable>, rho=0x00000001071cca40, useCache=<unavailable>) + 44685 at eval.c:5547
    frame #45: 0x00000001000b010e libR.dylib`Rf_eval(e=0x00000001026fc320, rho=0x00000001071cca40) + 446 at eval.c:558
    frame #46: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x000000010087d8a8, op=0x00000001026fc390, arglist=0x00000001071cd028, rho=0x00000001026cb430, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #47: 0x00000001000bab80 libR.dylib`bcEval(body=<unavailable>, rho=0x00000001026cb430, useCache=<unavailable>) + 41872 at eval.c:5499
    frame #48: 0x00000001000b010e libR.dylib`Rf_eval(e=0x000000010086d268, rho=0x00000001026cb430) + 446 at eval.c:558
    frame #49: 0x00000001000df627 libR.dylib`Rf_applyClosure(call=0x00000001026ca8e8, op=0x000000010086c9f8, arglist=0x00000001026cb708, rho=0x000000010185e260, suppliedvars=<unavailable>) + 1415 at eval.c:1045
    frame #50: 0x00000001000b04c8 libR.dylib`Rf_eval(e=0x00000001026ca8e8, rho=0x000000010185e260) + 1400 at eval.c:674
    frame #51: 0x00000001001136b1 libR.dylib`Rf_ReplIteration(rho=0x000000010185e260, savestack=<unavailable>, browselevel=40675560, state=0x00007fff5fbfe7a0) + 785 at main.c:258
    frame #52: 0x0000000100114b63 libR.dylib`run_Rmainloop [inlined] R_ReplConsole(rho=0x000000010185e260, savestack=0, browselevel=0) + 97 at main.c:308
    frame #53: 0x0000000100114b02 libR.dylib`run_Rmainloop + 98 at main.c:1015
    frame #54: 0x0000000100000f3b R`main(ac=<unavailable>, av=<unavailable>) + 27 at Rmain.c:29
    frame #55: 0x00007fff9c8f05ad libdyld.dylib`start + 1

我最好的猜测:SfParseVector::Init(char const*) 接收的 C 字符串是 NULL.我建议你联系 RSofia 包的维护者.

My best guess: the C string that SfParseVector::Init(char const*) is receiving is NULL. I suggest you contact the maintainers of the RSofia package.

这篇关于使用 RSofia 的 SVM 使 R 崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆