Machine learning libsvm java在经过几次迭代训练后抛出NullPointerException

Machine learning libsvm java在经过几次迭代训练后抛出NullPointerException,machine-learning,svm,libsvm,Machine Learning,Svm,Libsvm,我正在使用libsvmjava包进行句子分类任务。我有三节课。每个句子都表示为大小为435的向量。vector_文件的格式如下: 10.120.50.50.24 0.32 0 0 0 0。。。0.43 0第一位数字表示类别标签,其余为向量 下面是我如何解决svm_问题的: 在执行程序时,经过2次迭代后,我得到一个NullPointerException。我不知道出了什么问题 下面是错误: optimization finished, #iter = 85 nu = 0.0750265477982

我正在使用libsvmjava包进行句子分类任务。我有三节课。每个句子都表示为大小为435的向量。vector_文件的格式如下:

10.120.50.50.24 0.32 0 0 0 0。。。0.43 0
第一位数字表示类别标签,其余为向量

下面是我如何解决svm_问题的:

在执行程序时,经过2次迭代后,我得到一个NullPointerException。我不知道出了什么问题

下面是错误:

optimization finished, #iter = 85
nu = 0.07502654779820772
obj = -15.305162227093849, rho = -0.03157808477381625
nSV = 47, nBSV = 1
*
optimization finished, #iter = 88
nu = 0.08576821199868506
obj = -17.83925196551639, rho = 0.1297986754900152
nSV = 51, nBSV = 3
Exception in thread "main" java.lang.NullPointerException
    at libsvm.Kernel.dot(svm.java:207)
    at libsvm.Kernel.<init>(svm.java:199)
    at libsvm.SVC_Q.<init>(svm.java:1156)
    at libsvm.svm.solve_c_svc(svm.java:1333)
    at libsvm.svm.svm_train_one(svm.java:1510)
    at libsvm.svm.svm_train(svm.java:2067)
    at SvmOp.<init>(SvmOp.java:130)
    at Main.main(Main.java:8)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
优化完成,#iter=85
nu=0.07502654779820772
obj=-15.305162227093849,rho=-0.0315780848477381625
nSV=47,nBSV=1
*
优化完成,#iter=88
nu=0.08576821199868506
obj=-17.83925196551639,rho=0.1297986754900152
nSV=51,nBSV=3
线程“main”java.lang.NullPointerException中出现异常
位于libsvm.Kernel.dot(svm.java:207)
内核(svm.java:199)
在libsvm.SVC_Q.(svm.java:1156)
在libsvm.svm.solve_c_svc(svm.java:1333)
在libsvm.svm.svm_train_one(svm.java:1510)
在libsvm.svm.svm_训练中(svm.java:2067)
在SvmOp(SvmOp.java:130)
Main.Main(Main.java:8)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

知道哪里出了问题吗?

svm.class
的第207行中抛出了
NullPointerException
。调查源代码显示:

static double dot(svm_node[] x, svm_node[] y)
    {
        double sum = 0;
        int xlen = x.length;
        ...
    }
第207行是
intxlen=x.length。因此在本例中,我们看到,
svm\u节点(或向量)中的一个是
null

由于这个原因,我们在这里无法真正帮助您,因为我们需要更多的信息/源代码来调试它

我会采取以下策略:

  • 在调试器中完成
    svm_问题的构建后,调查
    svm_节点
    对象,并查找
    null

  • 检查你的
    svm\u问题的构建过程
    。问题可能就在那里

  • 另一种可能是更改您的数据格式并符合官方的LIBSVM格式:

    如中所述,数据格式使用稀疏数据格式,应如下所示:

    <label> 0:i 1:K(xi,x1) ... L:K(xi,xL) 
    
    0:i1:K(xi,x1)。。。L:K(xi,xL)
    
    升序整数指的是属性或特征id,这对于向量的内部表示是必需的

    我之前回答了一个类似的问题,并为数据格式添加了一个示例


    当库中包含用于构造
    svm_问题的代码时,可以直接读取此格式。

    svm.class
    的第207行中抛出
    NullPointerException
    。调查源代码显示:

    static double dot(svm_node[] x, svm_node[] y)
        {
            double sum = 0;
            int xlen = x.length;
            ...
        }
    
    第207行是
    intxlen=x.length。因此在本例中,我们看到,
    svm\u节点(或向量)中的一个是
    null

    由于这个原因,我们在这里无法真正帮助您,因为我们需要更多的信息/源代码来调试它

    我会采取以下策略:

  • 在调试器中完成
    svm_问题的构建后,调查
    svm_节点
    对象,并查找
    null

  • 检查你的
    svm\u问题的构建过程
    。问题可能就在那里

  • 另一种可能是更改您的数据格式并符合官方的LIBSVM格式:

    如中所述,数据格式使用稀疏数据格式,应如下所示:

    <label> 0:i 1:K(xi,x1) ... L:K(xi,xL) 
    
    0:i1:K(xi,x1)。。。L:K(xi,xL)
    
    升序整数指的是属性或特征id,这对于向量的内部表示是必需的

    我之前回答了一个类似的问题,并为数据格式添加了一个示例


    当库中包含用于构造
    svm_问题的代码时,可以直接读取此格式。

    您是否尝试设置断点并调查此上下文中到底什么是空的?@rzo svm_train函数引发异常。您是否尝试设置断点并调查此上下文中到底什么是空的上下文?@rzo svm_train函数正在抛出异常。谢谢您的思考!我解决了这个问题。svm_问题中存在不匹配。l导致svm_问题中的无效条目。谢谢您的思考!我解决了这个问题。svm_problem.l中存在不匹配,导致svm_problem中出现无效条目。