2016-04-25 6 views
0

私はサイズNxDのトレーニングデータセットと、サイズAxDのテストデータセットを持っています。行はデータポイントであり、列はフィーチャです。データを[-1,1]の範囲に正規化する

ここでは、各フィーチャ(列)を[-1、1]の範囲に変換したいと考えています。さらに、テストセット内のフィーチャのスケーリングは、トレーニングセットで推定されたパラメータを使用して行う必要があります。たとえば、標準偏差を平均から差し引いて標準偏差を除算すると、トレーニングセットの平均と標準偏差が計算され、テストセットを標準化するために使用されます。範囲[-1、1]にスケーリングするために今私がしたいのと同じです。

どうすればいいですか?このような

答えて

2

何か:

mins = min(trainingDataset); 
maxs = max(trainingDataset); 
testDataset = 2*bsxfun(@rdivide, bsxfun(@minus,testDataset,mins), maxs-mins)-1; 
+0

何かが動作しないようです。私がtrainingDataset = rand(5,5)を作成し、次にあなたの関数を使ってtrainingDatasetを[-1,1]にスケーリングすると、異なる値を持つエントリはそれぞれ-1と1にマッピングされます。 – machinery

+0

私は、あなたが何を望んでいるのか誤解している可能性があるということを、あなたが言う問題を理解しているかどうか分かりません。 'trainingDataset'の対応する列の最小値と最大値が-1になるように' testDataset'(複数のデータ点にまたがる1つのフィーチャの値を表す)の各列を正規化するように、 1。 –

+0

私のコードで意図していることは(バグがあるかもしれません)最初に 'trainingDataset'の列の最小値と最大値を計算します(これは最初の2行で行います; 1つの機能ごとに1つのエントリがあります)。 'testDataset'を取って、各列(内部の' bsxfun'呼び出し)からminを減算し、適切な 'max-min'(これは外側の' bsxfun'呼び出しです)で各列を分割します。 'testDataset'の極値を[0,1]に変換し、次にそれをx-> 2x-1で変換して[-1、+ 1]を得る。 –

関連する問題