2

Weka のロジスティック分類器によって使用される係数を抽出するために、ここで axplained として係数メソッドを使用できます: weka のロジスティック回帰分類器によって学習された重みを調べることができますか? .

ただし、データセット (インスタンス オブジェクトなど) で指定されたすべての属性が分類子で使用されているわけではありません。

だから私の質問は、 toString() メソッドに表示される属性名\対応する係数のマッピングを作成するにはどうすればよいですか?

たとえば、toString の例を使用すると、次の係数が得られます。

ここに画像の説明を入力

次のようなマッピングが必要です。

{平均P=-9.6225、BysP=5.3931、度=0.0016...}

4

1 に答える 1

2

Coefficient() によって返される double[][] には、Logistic に渡す Instances オブジェクトとは異なる属性のセットがあります。それに対処する方法を理解するために、 Weka コードを熟読する必要がありました。Logistic のメソッドを介して情報を取得する方法を見つけることができませんでしたが、それが使用する Filter を簡単に複製して、操作する同じ属性のセットを取得できます。

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 変数は、Logistic によって作成されたものを反映した Instances コレクションですが、最後の問題があります。Logistic の内部では、インターセプトが係数と共に返される 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 に答える