2013-06-22 34 views
1

爲了解釋Weka中Logistic classifier所使用的係數,可以使用如下的係數方法: Can one inspect the weights learned by a logistic regression classifier in weka?weka中的係數映射Logistic分類器

然而,數據集(即Instances對象)中給出的所有屬性並非都在分類器中使用。

所以我的問題是 - 如何創建屬性名稱\對應係數的映射,如同在toString()方法中出現的那樣?

例如,通過toString例如得到以下係數:

enter image description here

我想有一個映射如下:

{avgP = -9.6225,BysP = 5.3931, Degree = 0.0016 ...}

回答

1

由係數()返回的double [] []具有與傳入Logistic的Instances對象不同的一組屬性。我不得不仔細閱讀Weka code以瞭解如何應對這種情況。我找不到通過Logistic方法獲取信息的方法,但是您可以輕鬆地複製它使用的過濾器並獲取相同的一組屬性以進行操作。

我使用Weka作爲JRuby中的庫,因此這裏的代碼是Ruby語法。

import 'weka.filters.unsupervised.attribute.RemoveUseless' 


logit_filter = RemoveUseless.new 
logit_filter.setInputFormat train_filtered 
logit_filtered = Filter.useFilter(train_filtered, logit_filter) 

的logit_filtered變量是一個實例集,反映什麼是物流創建的,但有一個最終難題。物流的內部保持截距的雙重[] []是與係數返回,所以我們必須忽略第一個元素映射屬性設置正確......

java_array = logit.coefficients.to_a #converting java array to ruby 
coeffs = java_array.map(&:to_a) #converting second level of java array to ruby 

coeffs.each_with_index do |arr, index| 
    next if index == 0 #this is the Intercept 
    puts "#{logit_filtered.attribute(index-1).name.to_s}: #{coeffs}" 
end 

這東西映射的第一要素一起對我來說很好。