2013-08-21 33 views
0

我有一個機器學習方案,我使用Weka的java類來實現matlab腳本中的機器學習。然後,我將分類器的模型上傳到數據庫,因爲我需要在不同語言的機器上執行分類(obj-c)。網絡的評估對於編程非常簡單,但我需要WEKA用於在訓練之前對數據集進行規範化的值,以便稍後在評估網絡時使用它們。有誰知道如何獲得Weka用於培訓多層Perceptron網絡的標準化因子?我更喜歡Java中的答案。在Weka中提取用於規範化的值多層感知器

回答

1

經過對WEKA源代碼和文檔的深入挖掘......這就是我想到的。儘管WEKA中有一個名爲「Normalize」的過濾器,但多層感知器不使用它,而是在內部使用了一些代碼,如下所示。

m_attributeRanges = new double[inst.numAttributes()]; 
m_attributeBases = new double[inst.numAttributes()]; 
    for (int noa = 0; noa < inst.numAttributes(); noa++) { 
min = Double.POSITIVE_INFINITY; 
max = Double.NEGATIVE_INFINITY; 
for (int i=0; i < inst.numInstances();i++) { 
    if (!inst.instance(i).isMissing(noa)) { 
    value = inst.instance(i).value(noa); 
    if (value < min) { 
     min = value; 
    } 
    if (value > max) { 
     max = value; 
    } 
    } 
} 

m_attributeRanges[noa] = (max - min)/2; 
m_attributeBases[noa] = (max + min)/2; 
if (noa != inst.classIndex() && m_normalizeAttributes) { 
    for (int i = 0; i < inst.numInstances(); i++) { 
    if (m_attributeRanges[noa] != 0) { 
     inst.instance(i).setValue(noa, (inst.instance(i).value(noa) 
         - m_attributeBases[noa])/
       m_attributeRanges[noa]); 
    } 
    else { 
     inst.instance(i).setValue(noa, inst.instance(i).value(noa) - 
       m_attributeBases[noa]); 
    } 

因此,我應該需要傳輸到另一個系統,我試圖用來評估這個網絡的唯一值將是最小值和最大值。幸運的是,對我來說,原來是過濾器weka.filters.unsupervised.attribute.Normalize上的一種方法,該方法返回經過處理的數據集的分數和最大值的雙重數組。然後,我所要做的就是告訴多層感知器不會自動對數據進行歸一化處理,並使用過濾器單獨處理它,以便我可以提取分鐘和最大值,以及重量和其他所有數據一起發送到數據庫。