2014-01-19 105 views
2

假設我向WEKA輸入了一些數據集併爲屬性設置了一個歸一化過濾器,因此這些值在0和1之間。然後假設歸一化通過除以最大值完成,然後建立模型。那麼,如果我部署模型並在新實例中進行分類,則實例的特徵值大於訓練集中的最大值。如何處理這種情況?它只需要1或是否需要超過1?或者它拋出異常?WEKA如何標準化屬性?

+0

此回答有用嗎? –

回答

3

該文檔沒有爲通用的過濾器指定此值,所以它必須取決於過濾器。我查看了weka.filters.unsupervised.attribute.Normalize的源代碼,我假設你正在使用它,並且我沒有看到任何邊界檢查。

的實際比例代碼在Normalize.convertInstance() method

value = (vals[j] - m_MinArray[j])/(m_MaxArray[j] - m_MinArray[j]) 
       * m_Scale + m_Translation; 

除非任何(不太可能),額外的檢查,這種方法之外我會說,它會擴展到大於1的值,在你所描述的情況。要100%確定你最好的選擇是編寫一個測試用例,自己調用過濾器,並找出答案。由於沒有在Javadoc中指定它們的庫,你永遠不知道下一個版本會做什麼。因此,如果您非常依賴特定的行爲,那麼編寫一個自動化測試來回歸測試庫的行爲並不是一個壞主意。

0

我有和你說的一樣的問題。我做了如下,並可能這種方法可以幫助你:

我想你使用weka.filters.unsupervised.attribute.Normalize規範化你的數據。

爲歐文Bolwidt說,WEKA使用

value = (vals[j] - m_MinArray[j])/(m_MaxArray[j] - m_MinArray[j]) 
      * m_Scale + m_Translation; 

一定要規範你的屬性。

不要忘記,規範化類有這兩方法:

public double[] getMinArray() 
public double[] getMaxArray() 

返回計算出的最小值/最大值在數據的屬性。

而且您可以存儲最小/最大值。然後使用該公式來自己標準化數據。

記住,你可以設置屬性,Instance類,你可以通過Evaluation.evaluationForSingleInstance

您的結果進行分類我會稍後給你的鏈接,這可能會幫助你。 謝謝