我在Matlab中尝试实现一个使用RegressionTrees作为其过程一部分的分类器。现在我在回归树的mex文件中遇到了异常。
这是崩溃转储的一部分
------------------------------------------------------------------------ Segmentation violation detected at Tue Jun 4 11:49:48 2013------------------------------------------------------------------------Configuration: Crash Decoding : Disabled Current Visual : 0x21 (class 4, depth 24) Default Encoding : UTF-8 GNU C Library : 2.13 stable MATLAB Architecture: glnxa64 MATLAB Root : /usr/local/MATLAB/R2013a MATLAB Version : 8.1.0.604 (R2013a) Operating System : Linux 3.0.0-31-generic #49-Ubuntu SMP Tue Feb 19 20:02:57 UTC 2013 x86_64 Processor ID : x86 Family 6 Model 42 Stepping 7, GenuineIntel Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode Window System : The X.Org Foundation (11004000), display :0Fault Count: 1Abnormal termination:Segmentation violationRegister State (from fault): RAX = 000000000a673ad8 RBX = 0000000008c85de8 RCX = 0000000000000000 RDX = 00000000000002a5 RSP = 00007f5fa88ba8e0 RBP = 00007f5fa88ba910 RSI = 0000000008c85de8 RDI = 0000000008c825a0 R8 = 0000000008c825a0 R9 = 0000000000003870 R10 = 0000000000003001 R11 = ffefffffffffffff R12 = 0000000008c83ac0 R13 = 0000000008c83ac8 R14 = 00007f5fa88ba930 R15 = 0000000000000119 RIP = 00007f5f7a06e9fd EFL = 0000000000010246 CS = 0033 FS = 0000 GS = 0000Stack Trace (from fault):[ 0] 0x00007f5f7a06e9fd /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00088573 _ZSt9__find_ifIN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEEN12classregtree12IndexedIsNaNIdEEET_SA_SA_T0_St26random_access_iterator_tag+00000077[ 1] 0x00007f5f7a06eb29 /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00088873 _ZSt9remove_ifIN9__gnu_cxx17__normal_iteratorIPmSt6vectorImSaImEEEEN12classregtree12IndexedIsNaNIdEEET_SA_SA_T0_+00000041[ 2] 0x00007f5f7a085f20 /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00184096[ 3] 0x00007f5f7a0cf25b /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00483931[ 4] 0x00007f5f7a0d0580 /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00488832[ 5] 0x00007f5f7a0eb2c6 /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00598726[ 6] 0x00007f5f7a0698a3 /usr/local/MATLAB/R2013a/toolbox/stats/classreg/+classreg/+learning/+treeutils/growTree.mexa64+00067747 mexFunction+00001939[ 7] 0x00007f5fb2a1bf8a /usr/local/MATLAB/R2013a/bin/glnxa64/libmex.so+00110474 mexRunMexFile+00000090[ 8] 0x00007f5fb2a180f9 /usr/local/MATLAB/R2013a/bin/glnxa64/libmex.so+00094457[ 9] 0x00007f5fb2a18f1c /usr/local/MATLAB/R2013a/bin/glnxa64/libmex.so+00098076[ 10] 0x00007f5fbc2ac6b2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00562866 _ZN8Mfh_file11dispatch_fhEiPP11mxArray_tagiS2_+00000594[ 11] 0x00007f5fb2ff453a /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01672506[ 12] 0x00007f5fb2f9513a /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01282362[ 13] 0x00007f5fb2f953be /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01283006[ 14] 0x00007f5fb2f9712c /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01290540[ 15] 0x00007f5fb3002246 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01729094[ 16] 0x00007f5fb3081cd8 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+02251992[ 17] 0x00007f5fbc25eaf8 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00244472 _ZN13Mfh_MATLAB_fn11dispatch_fhEiPP11mxArray_tagiS2_+00000488[ 18] 0x00007f5fbbb4a256 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02245206[ 19] 0x00007f5fbbafaa86 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01919622......
完整的崩溃转储 http://snipt.org/AlK6
现在我如何知道是我的输入导致了回归树的错误,还是与我的硬件有关?有没有办法知道错误的原因?
更新
以下是导致异常的代码行(回归树行是主要原因)
for j = 1:J save('data'); gj = RegressionTree.fit(trainData, Y_CODE(:, j), 'Weights', wts); g{j} = gj;end
这段代码片段是一个循环的一部分(实际上我正在尝试实现GAMBLE算法,如果你知道现有的实现那就太好了),每次Matlab在不同的迭代中崩溃…
我尝试保存工作区save('data')
并在重启Matlab后重新执行回归树行,但它没有崩溃…这很奇怪。我已经向MathWorks发送了崩溃报告。
与此同时,有没有支持权重的Matlab回归树实现?或者更好的是,有没有GAMBLE提升算法的实现?
谢谢
回答:
只要你在满足发布的MATLAB系统要求的系统上运行,MathWorks的代码就不应该会像这样给你带来段错误——无论你传递什么样的输入。即使你传递的是完全无意义的输入,它也应该优雅地停止并显示MATLAB错误,而不是像这样的硬故障。
如果你能重现这种行为(在新启动的MATLAB中,没有其他程序运行,每次输入相同),请联系MathWorks支持,以发现你的系统是否有不支持的方面,或者报告一个错误。