2016-08-12 38 views
0

從weka.classifiers M5P樹模型:蟒蛇,秧雞,包裝 在我的ARFF文件中的每一行包括與第六屬性被分配爲模型正在訓練的目標變量6個屬性。 我正在使用weka.core.converters.ArffLoader將arff文件進行訓練。 訓練結束後,如果我想用一些測試數據做出預測,我將創建實例並將其傳遞給構建的模型以進行預測。在實例中,我只傳遞5個屬性的值而不是目標變量的值。我得到一個Java異常:迴歸:用於預測的測試數據需要類別值?在Weka中

回溯(最近通話最後一個): 文件 「C:/Users/Sethuraman/PycharmProjects/Test_printer/m_M5P.py」,行85,在 pred_dict1 [索引+ 1 ] = cls.classify_instance(實例) 文件 「C:\用戶\ Sethuraman \ Anaconda2 \ lib中\站點包\ python_weka_wrapper-0.3.8-py2.7.egg \ WEKA \ classifiers.py」,線105,在classify_instance 迴歸自我.__分類(inst.jobject) 文件 「C:\用戶\ Sethuraman \ Anaconda2 \ LIB \站點包\ JavaBridge的-1.0.14-py2.7共贏 - amd64.egg \爲JavaBridge \ jutil.py」 ,線852,在FN 加註JavaException(X) javabridge.jutil.JavaException:Src和目的地在#ö不同f屬性:5!= 6

爲什麼要提供目標變量值?是否有必要通過目標值?基本上在訓練之後,模型應該預測目標值。如果是,爲什麼?如果沒有,該如何處理? 請幫忙!

回答

1

可以使用Add濾波器,以引入新的屬性。默認情況下,此過濾器會將新屬性的所有值標記爲缺失(「?」)。只要確保這個新屬性的名稱,以及在名義類別的情況下,類別標籤的順序與在訓練數據中的順序完全相同。

+0

您爲添加過濾器提供的鏈接是用於在Java中實現的。你能告訴我如何在py-weka中實現這個嗎?舉一些例子?我正在使用[此示例](https://github.com/fracpete/python-weka-wrapper3-examples/blob/master/src/wekaexamples/core/dataset.py)創建屬性和實例,但對於數字屬性,如何添加'?'在旅途中? – Sethuraman

+0

謝謝你的回答。有效 :-) – Sethuraman

0

如果你想驗證,你一定要提供目標值;算法如何知道它做得多好呢?但是如果你只是想讓它預測那個集合,最好的方法是用'?'填充目標點,這樣數據仍然有6個屬性,而目標只是標記爲未知。有關更多信息,請參閱http://weka.wikispaces.com/Making+predictions

+0

謝謝你的評論。我編輯了我的問題。我不想驗證模型。只需對測試數據進行預測即可。我正在使用'python weka wrapper'並通過使用從.csv文件中分別讀取的數據創建實例。由於我沒有目標價值信息,我該怎麼辦? – Sethuraman

+0

請參閱編輯答案。該文檔似乎表明,使這項工作的唯一方法是標記每個數據點的未知目標屬性。 –

+0

如果我聽起來很傻,請耐心等待。我試圖在python中創建實例,所以如果我必須添加第6個屬性,它需要添加爲字符串'?'。在實例列表的末尾。在試圖預測的時候,包裝器會拋出一個Value錯誤,說它不能將字符串轉換爲float;這是可以理解的,因爲我的目標變量是float。我在這裏錯過了什麼嗎?如何處理這個? – Sethuraman