【问题标题】:Classify music to genre with WEKA使用 WEKA 将音乐分类为流派
【发布时间】: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


【解决方案1】:

有一个非常有趣的 Weka 教程可以回答您的部分问题。

步骤如下:

  1. 使用 jAudio 进行特征提取教程
  2. 将输出文件格式更改为 ARFF
  3. 更改采样率以匹配音频文件
  4. 更改特征计算方案然后通过在 Weka 上加载数据集,您可以获得 有机会使用分类器对每个曲目的流派进行分类。

查看以下链接:https://www.cs.cmu.edu/~music/cmsip/projects/p6.pdf

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2017-07-28
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多