coefficients() 返回的 double[][] 具有与传递给 Logistic 的 Instances 对象不同的属性集。我必须仔细阅读Weka 代码才能了解如何应对。我找不到通过 Logistic 上的方法获取信息的方法,但您可以轻松复制它使用的过滤器并获得相同的一组属性进行操作。
我在 JRuby 中使用 Weka 作为库,因此这里的代码是 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 变量是一个 Instances 集合,它反映了 Logistic 创建的内容,但有一个最终问题。Logistic 的内部保持 Intercept 作为返回系数的 double[][] 的第一个元素,因此我们必须忽略第一个元素才能正确映射属性集......
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
这很好地为我映射了一些东西。