【发布时间】:2016-08-26 07:46:32
【问题描述】:
我是新来的,所以是 ELKI。这就是我想要做的事情:
我有一个实例列表
MyInstance,其中包含{int xpto; String customer; int another, ...}等数字和分类变量我需要为整个自定义对象列表运行具有特定距离度量的 SLINKgower
阅读教程和帖子后,我做了以下事情:
- 我创建了一个数据库连接以将数据加载到数据库中
- 我创建了自己的自定义数据类型,它实现了
FeatureVector,尽管每个实例只有一个对象 - 我自己的自定义对象 - 我创建了
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