Атрибут ни номинальный, ни строковый - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь взять однопользовательский ввод с android и предсказать, если у человека рак или нет, я применяю Наивный байесовский от Weka через его API в java. Все мои функции категоричны, поэтому я преобразовал ввод пользователя в Stringи пытался передать данные в атрибут Weka, как в этом примере Как использовать тип даты в weka в коде Java?

, но я получаю сообщение об ошибке «ошибка: java.lang.IllegalArgumentException: Атрибут ни номинальный, ни строка ", PrintStackTrace () выбрасывает это сообщение об ошибке из той строки кода, где я прокомментировал" // printStackTrace Выдает ошибку из этой строки ", пожалуйста, проверьте.Я не могу найти ошибку в своем коде, ниже мой код, пожалуйста, помогите мне решить эту проблему, заранее спасибо

public class MainActivity extends AppCompatActivity {

    private Spinner spinner1,spinner3,spinner4,spinner5,spinner6,spinner7,spinner8,spinner9,spinner10,spinner11,spinner12;
    private Button btnSubmit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        addListenerOnButton();
        addListenerOnSpinnerItemSelection();
    }


    // add items into spinner dynamically



    public void addListenerOnSpinnerItemSelection() {
        spinner1 = findViewById(R.id.spinner1);
        spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());
    }
    // get the selected dropdown list value

    public void addListenerOnButton() {
        spinner1 = findViewById(R.id.spinner1);
        spinner3 = findViewById(R.id.spinner3);
        spinner4 = findViewById(R.id.spinner4);
        spinner5 = findViewById(R.id.spinner5);
        spinner6 = findViewById(R.id.spinner6);
        spinner7 = findViewById(R.id.spinner7);
        spinner8 = findViewById(R.id.spinner8);
        spinner9 = findViewById(R.id.spinner9);
        spinner10 = findViewById(R.id.spinner10);
        spinner11 = findViewById(R.id.spinner11);
        spinner12 = findViewById(R.id.spinner12);


        btnSubmit = findViewById(R.id.btnSubmit);
        btnSubmit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String menarche = String.valueOf(spinner1.getSelectedItem());
                String oral = String.valueOf(spinner3.getSelectedItem());
                String diet = String.valueOf(spinner4.getSelectedItem());
                String breast = String.valueOf(spinner5.getSelectedItem());
                String cervical = String.valueOf(spinner6.getSelectedItem());
                String history = String.valueOf(spinner7.getSelectedItem());
                String education = String.valueOf(spinner8.getSelectedItem());
                String aohusband = String.valueOf(spinner9.getSelectedItem());
                String menopause = String.valueOf(spinner10.getSelectedItem());
                String foodfat = String.valueOf(spinner11.getSelectedItem());
                String abortion = String.valueOf(spinner12.getSelectedItem());

                int counter = 0;

                try {
                    int features = 12;
                    int num_instances = 1;

                    Attribute menarche1 = new Attribute("menarche11");
                    Attribute oral1 = new Attribute("oral11");
                    Attribute diet1 = new Attribute("diet11");
                    Attribute breast1 = new Attribute("breast11");
                    Attribute cervical1 = new Attribute("cervical11");
                    Attribute history1 = new Attribute("history11");
                    Attribute education1 = new Attribute("education11");
                    Attribute aohusband1 = new Attribute("aohusband11");
                    Attribute menopause1 = new Attribute("menopause11");
                    Attribute foodfat1 = new Attribute("foodfat11");
                    Attribute abortion1 = new Attribute("abortion11");
                    Attribute ovarian1 = new Attribute("ovarian11");

                    //FastVector fvwekaAttributes = new FastVector(features);

                    ArrayList<Attribute>  fvwekaAttributes = new ArrayList<Attribute>(12);


                    fvwekaAttributes.add(0,menarche1);
                    fvwekaAttributes.add(1,oral1);
                    fvwekaAttributes.add(2,diet1);
                    fvwekaAttributes.add(3,breast1);
                    fvwekaAttributes.add(4,cervical1);
                    fvwekaAttributes.add(5,history1);
                    fvwekaAttributes.add(6,education1);
                    fvwekaAttributes.add(7,aohusband1);
                    fvwekaAttributes.add(8,menopause1);
                    fvwekaAttributes.add(9,foodfat1);
                    fvwekaAttributes.add(10,abortion1);
                    fvwekaAttributes.add(11,ovarian1);


                    Instances trainingset = new Instances("string",fvwekaAttributes,num_instances);

                    trainingset.setClassIndex(11);

                    Instance iExample = new DenseInstance(12);

                    //printStackTrace Throws error from this line

                    iExample.setValue(menarche1, 1);


                    iExample.setValue(oral1, 1);
                    iExample.setValue(diet1, 1);
                    iExample.setValue(breast1, 1);
                    iExample.setValue(cervical1, 1);
                    iExample.setValue(history1, 1);
                    iExample.setValue(education1, 1);
                    iExample.setValue(aohusband1, 1);
                    iExample.setValue(menopause1, 1);
                    iExample.setValue(foodfat1, 1);
                    iExample.setValue(abortion1, 1);
                    //iExample.setValue(ovarian1, "?");

                    trainingset.add(iExample);



                    Classifier cls = (Classifier) weka.core.SerializationHelper.read(getAssets().open("NaiveBayes.model"));


                    Toast.makeText(MainActivity.this, "hoynai ", Toast.LENGTH_LONG).show();

                    double pred = cls.classifyInstance(trainingset.instance(0));

                    int predict = (int) (pred*100);



                    Toast.makeText(MainActivity.this, "predicted probability: " + String.valueOf(predict) + "%", Toast.LENGTH_LONG).show();



                } catch (Exception e) {
                    e.printStackTrace();


                    Toast.makeText(MainActivity.this, "error: " + String.valueOf(e) + "%", Toast.LENGTH_LONG).show();

                }


            }
        });
    }
}

...