天天看點

weka中屬性值的了解:(int) data.instance(i).classValue()

起因

在看老師KNN代碼時,對下面疑惑不解:

int classVal = (int) data.instance(i).classValue();      

其中,data是instances(資料集)執行個體。分的類明明是yes/no,怎麼還能強制轉換?

經過

資料集取自weka安裝目錄data

@relation weather

@attribute outlook {sunny, overcast, rainy}
@attribute temperature real
@attribute humidity real
@attribute windy {TRUE, FALSE}
@attribute play {yes, no}

@data
sunny,85,85,FALSE,no
sunny,80,90,TRUE,no
overcast,83,86,FALSE,yes
rainy,70,96,FALSE,yes
rainy,68,80,FALSE,yes
rainy,65,70,TRUE,no
overcast,64,65,TRUE,yes
sunny,72,95,FALSE,no
sunny,69,70,FALSE,yes
rainy,75,80,FALSE,yes
sunny,75,70,TRUE,yes
overcast,72,90,TRUE,yes
overcast,81,75,FALSE,yes
rainy,71,91,TRUE,no      

此處省略N個字

結果

weka處理離散屬性時,根據arff檔案的聲明順序做了個 0.0−>n.0

outlook {sunny=0.0, overcast=1.0, rainy=2.0}      

classValue()傳回的是對應的double數值。

測試代碼

.read("E:/DataLearing/data/weather.numeric.arff");
        instances.setClassIndex(instances.numAttributes()-1);

        System.out.println(instances.numClasses());//輸出分類類别數,即yes/no        
        System.out.println(instances.attribute(0).value(0));//輸出第一個屬性值,與上面結合可輸出對應關系

        System.out.println(instances.instance(0).classValue());//輸出執行個體屬性對應數值

        System.out.println(instances.classAttribute().value((int) instances.instance(0).classValue()));//輸出執行個體屬性值      

輸出結果