0

Weka の Java クラスを使用して機械学習を matlab スクリプトに実装する機械学習スキームがあります。次に、別の言語 (obj-c) の別のマシンで分類を実行する必要があるため、分類子のモデルをデータベースにアップロードします。ネットワークの評価は非常に簡単にプログラムできましたが、後でネットワークの評価に使用できるように、トレーニングの前に WEKA がデータ セットを正規化するために使用した値が必要です。weka が多層パーセプトロン ネットワークのトレーニングに使用する正規化係数を取得する方法を知っている人はいますか? 私は答えがJavaであることを望みます。

4

1 に答える 1

2

WEKA のソース コードとドキュメントを調べた結果、これが思いつきました。WEKA には「正規化」と呼ばれるフィルターがありますが、多層パーセプトロンはそれを使用せず、代わりに次のようなコードを内部で使用します。

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幸いなことに、処理されたデータセットの最小値と最大値の double 配列を返すフィルターのメソッドがあることが判明しました。あとは、多層パーセプトロンに、データを自動的に正規化しないように指示し、フィルタを使用してデータを個別に処理するように指示するだけでした。これにより、最小値と最大値を抽出して、重みやその他すべてと一緒にデータベースに送信できます。

于 2013-08-21T20:35:37.293 に答える