6

一連の実験を実行します。評価されるメイン メソッドには、次のシグネチャがあります。

[Model threshold] = detect(...
    TrainNeg, TrainPos, nf, nT, factors, ...
    removeEachStage, applyEstEachStage, removeFeatures);

ここremoveEachStageで、、、applyEstEachStageおよびremoveFeaturesはブール値です。これらのブール値パラメーターのいずれかの順序を逆にすると、間違った結果になる可能性があることがわかります。

この種のエラーを最小限に抑えるために、より良い編成を可能にする MATLAB の方法はありますか? または、これらのエラーから保護するために使用できるツールはありますか?

4

1 に答える 1

6

構造体を持つ組織

structこれらのパラメーターをフィールドとして持つ を入力できます。

たとえば、フィールドを持つ構造

setts.TrainNeg
     .TrainPos
     .nf
     .nT
     .factors
     .removeEachStage
     .applyEstEachStage
     .removeFeatures

そうすれば、フィールドを設定すると、パラメーターの順序を覚えておく必要がある関数呼び出しとは異なり、フィールドが何であるかが明確になります。

次に、関数呼び出しは次のようになります

[Model threshold] = detect(setts);

そして、あなたの関数定義は次のようになります

function [model, threshold] = detect(setts)

param次に、出現する egをに置き換えるだけsetts.paramです。

混合アプローチ

必要に応じて、このアプローチを現在のアプローチと組み合わせることもできます。

[Model threshold] = detect(in1, in2, setts);

in1とを明示的に含めたい場合はin2、残りを にバンドルしsettsます。

OOPアプローチ

別のオプションは、検出をクラスに変えることです。これの利点はdetect、フィールドを設定するときにタイプミスをすると、スペルミスのある名前で新しいフィールドを作成するだけの構造体とは対照的に、オブジェクトが固定名のメンバー変数を持つことです。

例えば

classdef detect()
properties
  TrainNeg = [];
  TrainPos  = [];
  nf = [];
  nT = [];
  factors = [];
  removeEachStage = [];
  applyEstEachStage = [];
  removeFeatures =[];
end
methods
  function run(self)
    % Put the old detect code in here, use e.g. self.TrainNeg to access member variables (aka properties)
  end
end
于 2012-08-10T18:24:38.150 に答える