Weka只将数字改为名义

时间:2013-11-16 03:44:54

标签: weka

我有一个CSV文件,我将其导入Weka。所有变量都以数字形式导入。我需要将其中的3个改为名义上的。然而,当我在其上放置数字解释过滤器时 - 所有变量都会发生变化。我只想改变3.

1)有没有办法通过过滤器改变一些 2)或者你可以在导入过程中设置它。如果是这样,我也无法解决这个问题。

3 个答案:

答案 0 :(得分:15)

我假设您使用的是Weka Explorer(GUI)。要将过滤器应用于特定属性,请执行以下操作。

步骤1:在预处理选项卡中选择您的过滤器 第2步:点击“选择”按钮右侧的框(打开一个新窗口)
第3步:在attributeIndices框中输入自定义范围

如果您在过滤器窗口中选择“更多”按钮,您将获得不同选项和您可以提供的值的说明。

在您的特定情况下,默认情况下,过滤器应用于第一个到最后一个属性。您应该更改范围以反映您的个人需求。

====编辑====
如果您使用的是Java API,则以下代码将指向正确的方向。

 
import weka.core.Instances;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.NumericToNominal;

public class Main {

    public static void main(String[] args) throws Exception
    {

        //load training instances
        Instances originalTrain= //...load data with numeric attributes 

        NumericToNominal convert= new NumericToNominal();
        String[] options= new String[2];
        options[0]="-R";
        options[1]="1-2";  //range of variables to make numeric

        convert.setOptions(options);
        convert.setInputFormat(originalTrain);

        Instances newData=Filter.useFilter(originalTrain, convert);

        System.out.println("Before");
        for(int i=0; i<2; i=i+1)
        {
            System.out.println("Nominal? "+originalTrain.attribute(i).isNominal());
        }

        System.out.println("After");
        for(int i=0; i<2; i=i+1)
        {
            System.out.println("Nominal? "+newData.attribute(i).isNominal());
        }

    }

} 

答案 1 :(得分:7)

首先打开arff文件。 在过滤下单击&#34;选择&#34; 。在过滤器树下,导航到无人监督并搜索&#34; NumerictoNomial&#34; 。单击一次,然后按“应用”。保存文件并重新加载。注意:确保已选中要更改的所需字段的复选框。

答案 2 :(得分:2)

单击NumericToNominal选项卡并显示一个窗口,选择要更改为名义的相应attributeIndices