【问题标题】:Attempting to run SLINK in own data - ELKI尝试在自己的数据中运行 SLINK - ELKI
【发布时间】:2016-08-26 07:46:32
【问题描述】:

我是新来的,所以是 ELKI。这就是我想要做的事情:

  1. 我有一个实例列表MyInstance,其中包含{int xpto; String customer; int another, ...}等数字和分类变量

  2. 我需要为整个自定义对象列表运行具有特定距离度量的 SLINKgower

阅读教程和帖子后,我做了以下事情:

  1. 我创建了一个数据库连接以将数据加载到数据库中
  2. 我创建了自己的自定义数据类型,它实现了FeatureVector,尽管每个实例只有一个对象 - 我自己的自定义对象
  3. 我创建了SimpleTypeInformation(MyDataType.class)

我遇到的问题是,当我尝试运行算法时,它会在获取关系时给我一个空指针异常

线程“main”中的异常 java.lang.NullPointerException at de.lmu.ifi.dbs.elki.database.AbstractDatabase.getRelation(AbstractDatabase.java:118) 在 de.lmu.ifi.dbs.elki.algorithm.AbstractAlgorithm.run(AbstractAlgorithm.java:81) 在 main.TestingELKI.main(TestingELKI.java:104)

你能帮忙吗?我现在真的不知道获取数据库关系有什么问题

public class MyDatabaseConnection implements DatabaseConnection {

    private List<MyInstance> m_data;
    private int m_size;

    public MyDatabaseConnection(ArrayList<MyInstance> data, int size) {
        m_data = data;
        m_size = size;
    }

    @Override
    public MultipleObjectsBundle loadData() {
         MultipleObjectsBundle b = new MultipleObjectsBundle();
         int mind = 1;
         int maxd = 1;
         List<MyDataType> vecs = new ArrayList<>(m_size);
         for(int i = 0; i < m_size; i++) {
             vecs.add(new MyDataType(m_data.get(i)));
         }
         SimpleTypeInformation<MyDataType> type = new SimpleTypeInformation(MyDataType.class);
         b.appendColumn(type, vecs);
         return b;
    }
}

public class MyDataType implements FeatureVector {

    MyInstance m_instance;

    public static final MyDataType.Factory FACTORY = new MyDataType.Factory();

    public MyDataType(MyInstance instance) {
        m_instance = instance;
    }

    @Override
    public int getDimensionality() {
        // TODO Auto-generated method stub
        return 1;
    }

    @Override
    public Object getValue(int arg0) {
        // TODO Auto-generated method stub
        if (arg0 == 1) {
            return m_instance;
        } else {
            System.out.println("OOOOPPPPPPPSSSSS!");
            return null;
        }
    }


    public static class Factory implements FeatureVector.Factory {

        @Override
        public ByteBufferSerializer getDefaultSerializer() {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public Class getRestrictionClass() {
            // TODO Auto-generated method stub
            return MyDataType.class;
        }

        @Override
        public FeatureVector newFeatureVector(Object arg0, ArrayAdapter arg1) {
            // TODO Auto-generated method stub
            return new MyDataType(new MyInstance("0","0"));
        }
    }
}

MAIN
// create my database connection
        // load data into database  
        DatabaseConnection dbc = new MyDatabaseConnection(data, size);
        Database db = new StaticArrayDatabase(dbc, null);
        db.initialize();

        Relation<FeatureVector> labels = db.getRelation(TypeUtil.ANY);

        // now set the right distance function
        MyDistance dist = new MyDistance();
        SLINK algorithm = new SLINK(dist);

        Result res = algorithm.run(db);

【问题讨论】:

  • MyDataType->MyInstance 看起来像一个 hack。你不能直接使用 MyInstance 吗?此外,您的距离函数不在这里 - 也许您的错误在那里?
  • 非常感谢您的及时答复。我完全按照您在此处提到的内容进行了操作:a) 将 hack 更改为仅使用 MyInstance b) 重新排列距离函数以仅使用 MyInstance 类...一旦我在距离函数中声明该方法 getInputTypeRestriction 应该返回 new SimpleTypeInformation(MyInstance 。班级);非常感谢您的帮助。非常感谢

标签: java nullpointerexception cluster-analysis data-mining elki


【解决方案1】:

您不需要从FeatureVector 继承。避免装箱 - 这很昂贵 - 直接使用 MyInstance

您看到的错误很可能是因为您没有正确实现距离函数。

很可能,您的距离函数没有指定正确的输入类型信息?如果你提供输入类型null,那么你会得到一个像这样的NullPointerException

【讨论】:

  • 非常感谢您的及时答复。我完全按照您在此处提到的内容进行了操作:a) 将 hack 更改为仅使用 MyInstance b) 重新排列距离函数以仅使用 MyInstance 类...一旦我在距离函数中声明该方法 getInputTypeRestriction 应该返回 new SimpleTypeInformation(MyInstance 。班级);非常感谢您的帮助。非常感谢
  • @j_looking_answers 如果有效,您应该接受他的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 2014-11-25
  • 2015-09-02
  • 2020-08-13
  • 2023-04-02
  • 2013-02-25
  • 1970-01-01
相关资源
最近更新 更多