【发布时间】:2014-01-02 16:06:39
【问题描述】:
我正在努力实际实施我调查的分类部分,以根据音乐文件的某些特征对音乐进行分类。
我目前制作的是从数据库中读取特征表的代码,然后将其放回数据库中的另一个表中。
问题是我不知道如何使用实例类型。文档是废话-我不知道该怎么做。
我想做什么:我想使用一组给定的音乐文件并计算它们的特征向量。将此数据放入 arff 后,我将手动将其与流派数据(即 gial)连接起来。然后将其保存到 MySQL 表中。
AFAIU链应该是这样的:
从数据库读取
以某种方式在每个音乐文件的一组特征(与流派相关)上训练一个 K 近邻分类器,用于 10 个文件的主体。
使用它对一组具有相同特征但类型未知的文件进行分类。
- 以某种方式输出结果,以便它们可以在数据库中被机器读取。
我没有发现实际用于进一步处理的数据输出示例,因此我无法进一步讨价还价:/
完成此操作后,我想将其读回并对新的音乐体(我通过音乐或使用示例文件集计算的特征)进行分类。结果应在另一个新表中放回数据库中,详细说明哪个文件具有哪个类别(已分配)。
这是我的代码:
package org.tuhh.cpmgg.weka;
import weka.core.*;
import weka.core.converters.*;
import weka.experiment.InstanceQuery;
import java.io.*;
import java.util.ArrayList;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/weka2")
public class weka_chain {
/**
* loads a dataset from mysql db
* @param args the commandline arguments
*/
@GET
@Produces(MediaType.TEXT_PLAIN)
public String main()
throws Exception {
java.util.List resultList;
/*Gets data from DB*/
InstanceQuery query = new InstanceQuery();
query.setDatabaseURL("jdbc:mysql://127.2.73.130:3306/cpmgg");
query.setUsername("adminnNWqHkW");
query.setPassword("zLlkWsd-NsnQ");
query.setQuery("SELECT * FROM features"); //Read table
Instances data = query.retrieveInstances(); //into data
data.setClassIndex(data.numAttributes() - 1); //sets the number of classes (creates index)
/*Classifiers */
String algorithm = "weka.classifiers.bayes.NaiveBayes"; // Sets the type of classifier (many available)
resultList = new ArrayList();
Weka1 weka;
try {
weka = new Weka1(algorithm, "lol");
resultList = weka.weka(algorithm, data); //Essentially what is happening
/* TODO:
* Define Output so that it is in table form/instance form
* This means creating output using the old applet and somehow (?) distilling it into table shape
*/
/* Saves Results to DB */
DatabaseSaver save = new DatabaseSaver();
// save.setUrl("jdbc:mysql://localhost:3306/weka_test");
save.setUrl("jdbc:mysql://127.2.73.130:3306/cpmgg");
//save.setUrl("jdbc:mysql://localhost:3306/hibernate");
save.setUser("AMDINADMIN");
save.setPassword("PASS_ PASS");
save.setInstances(data); // define outputtype
save.setRelationForTableName(false);
save.setTableName("weka_rslts");
save.connectToDatabase();
save.writeBatch();
return "done";
}
}
【问题讨论】:
-
你是在 OpenShift 上运行这个吗?我在您的问题中没有看到任何具体内容。
-
是的,我在 OpenShift 上运行它,但由于构建错误(项目其他部分的构建失败,因此它在所有其他部分的轨道上停止运行)我已求助于在本地运行它。
-
** 附加信息 **
标签: java machine-learning weka nearest-neighbor