2013-12-17 47 views
2

我試圖讓Weka從命令行預測,但我擔心我可能會做這個錯誤。我閱讀了數據挖掘書,並在他們的網站上搜索了文檔,但是我發現最多是模糊的,所以我希望你能幫助我。告訴Weka在ARFF文件中預測哪些屬性?

首先,我創建了一個訓練集(train.arff)。這裏有一個例子:

@relation test 
@attribute 'A' {0,1} 
@attribute 'B' {0,1} 
@attribute 'C' {0,1} 
@attribute 'D' {0,1} 
@attribute 'E' {0,1} 
@attribute 'F' {0,1} 
@data 
0,0,0,0,0,0 
0,0,0,0,0,0 
... 

然後,我創建的數據設置爲預測(test.arff)完成: 「?」

@relation test 
@attribute 'A' {0,1} 
@attribute 'B' {0,1} 
@attribute 'C' {0,1} 
@attribute 'D' {0,1} 
@attribute 'E' {0,1} 
@attribute 'F' {0,1} 
@data 
0,?,0,0,0,0 
0,?,0,0,0,0 
... 

的標誌着應該預測的屬性。

最後,我試圖通過在命令行中運行該工具來獲取預測:

java weka.classifiers.trees.J48 -t train.arff -T test.arff -p 0 

它產生以下輸出:

=== Predictions on test data === 

inst#  actual predicted error prediction 
    1  2:1  2:1  0.939 
    2  2:1  2:1  0.939 

然後我拿了號後的「:」在由inst#標記的數據行的預測列中。

這裏是我的問題:

  1. 這是正確的嗎?我很擔心「?」因爲我讀到它可能是估算的(儘管這可能只是在學習階段)。

  2. Weka是否支持多重預測?無論有多少個字段都標有「?」我總是得到每個實例只有一個預測值的同一個表。

  3. Can Weka可以生成一個完整的(預測的)ARFF文件,還是我必須從結果中自行構建?

如果我錯過了顯而易見的事情,請事先道歉並指出相關文檔的任何指標將不勝感激。

在此先感謝!

回答

2

'?'是一個未知值的通用標記。它可以用於培訓和測試數據,並告訴Weka,在這種特殊情況下,該值不可用。那麼對這些信息做什麼取決於實際的學習算法。因此要回答您的問題:

  1. 否。通過-c參數訓練模型時指定要預測的屬性。該參數給出要預測的屬性的索引。默認情況下,它是最後一個,所以'F'在你的情況下。
  2. 不,這實際上是更多實施學習算法的問題,但Weka中沒有一個支持這一點。要做到這一點的方法是針對不同的預測來訓練多個模型。
  3. 這在這種情況下沒有意義,因爲您必須提供已知值才能使Weka能夠評估分類器的準確性。如果這些價值觀是完全未知的,那麼就無法說明它有多好。

請注意,您可以save a trained model,然後use it to make predictions。後者頁面還包含您可以構建的知識流,以將此結果保存爲ARFF文件。

+0

非常感謝!因此,使用train.arff來預測test.arff的'F',我可以這樣做:「java weka.classifiers.trees.J48 -c'F'-t train.arff -T test.arff -p 0」,對吧?我知道關於保存模型,但我只是想先弄清楚基礎知識。 –

+0

我想我已經在那裏(1下)了。 –