第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

WEKA 分類器返回一個分類而不考慮值

WEKA 分類器返回一個分類而不考慮值

白衣非少年 2021-12-01 15:59:05
我正在嘗試在 Android 應用程序中使用/導入在 WEKA 3.8.3(GUI 分類器)中制作的 J48 分類器,但生成的類只返回一個分類結果,而不管傳入的值如何。原始數(shù)據(jù)集看起來像這樣,所以我在 SO 上找到的第一個答案是使用 SMOTE 來彌補這一點。我找不到 SMOTE,但從我所看到的 ClassBalancer 過濾器獲得了相同的結果。結果數(shù)據(jù)如下所示。這些是原始數(shù)據(jù)的結果,這些是過濾數(shù)據(jù)的結果。使用原始數(shù)據(jù)的 J48 類只返回 2.0 的值,這與步行相對應,我猜這是因為步行是訓練集中最常見的分類。使用過濾數(shù)據(jù)的 J48 類只返回值 1.0,我無法解釋清楚。我已經嘗試將以前項目中的工作分類器加載到應用程序中;這個(J48)分類器確實返回了不同的值。我還嘗試手動刪除數(shù)據(jù)行,直到所有活動都具有相同數(shù)量的條目,但這并沒有解決問題。我也試過手動輸入一個我知道應該對應于“坐”的值,但這也不起作用。當我將值打印到日志時,發(fā)送到分類器的實例看起來非常好,所以我認為這與輸入無關。以防萬一我遺漏了一些明顯的東西,我將包含以下代碼:    public double createInstances(double x, double y, double z){    double result = 0;    Instances dataRaw = new Instances("TestInstances", atts, 3);    dataRaw.setClassIndex(dataRaw.numAttributes()-1);    Log.d(TAG,"Rawdata:" + dataRaw);    Instance inst = new DenseInstance(3);    inst.setDataset(dataRaw);    inst.setValue(accel_x,x);    inst.setValue(accel_y,y);    inst.setValue(accel_z,z);    Log.d(TAG,"NEWDATARAW:" + inst);    try {        result = weka.classifyInstance(inst);        Log.d(TAG,"RESULT:" + result);    }    catch (Exception e){        Log.e(TAG,"DID NOT WORK:" + e);    }    return result;}我還確保將屬性添加到 Attributes ArrayList“atts”。我能想到的唯一剩下的選擇是數(shù)據(jù)格式有問題,但我想在創(chuàng)建算法時它已經顯示出問題的跡象。這是包含數(shù)據(jù)的 ARFF 文件的示例。我嘗試在默認的 J48 算法中輸入兩個數(shù)據(jù)集(原始/過濾),一個禁用所有修剪選項,以防它修剪其他活動,但這些分類器中沒有一個返回超過一個活動。我認為這是所有相關信息,但如果我遺漏了任何信息,請告訴我,以便我可以添加它。我相當確定問題出在分類器本身的某個地方,但我不知道它到底是什么。
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

結果 WEKA 將以下代碼放在了分類實例方法中:


// set class value to missing

   s[i.classIndex()] = null;

這導致數(shù)組中的最后一個值(在本例中為 accel_z 值)設置為 null,導致分類器始終返回相同的值,因為這是分類器中的第一次檢查(注意“if(i[2 ] == null”語句):


static double N69cd8e58128(Object []i) {

    double p = Double.NaN;

    if (i[2] == null) {

        p = 1;

    } else if (((Double) i[2]).doubleValue() <= 6.43) {

        p = WekaClassifier.Nad3034129(i);

    } else if (((Double) i[2]).doubleValue() > 6.43) {

        p = WekaClassifier.N26ef16ed242(i);

    }

    return p;

}

我不確定這條線通常用于什么目的,但刪除它似乎解決了這個問題。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 174 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號