2

为了提取 Weka 中的Logistic 分类器使用的系数,可以使用此处解释的系数方法:可以检查 Weka 中的逻辑回归分类器学习的权重吗? .

然而,并非数据集中给出的所有属性(即 Instances 对象)都在分类器中使用。

所以我的问题是 - 如何创建出现在 toString() 方法中的属性名称\对应系数的映射?

例如,使用 toString 示例,我得到以下系数:

在此处输入图像描述

我想要一个如下映射:

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

4

1 回答 1

2

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

这很好地为我映射了一些东西。

于 2013-06-25T02:50:39.907 回答