normalize
データの正規化
構文
説明
は、与えられた方式の正規化のタイプを指定します。たとえば、N = normalize(___,method,methodtype)normalize(A,"norm",Inf) は A のデータを無限大ノルムを使って正規化します。
は、N = normalize(___,"center",centertype,"scale",scaletype)"center" メソッドと "scale" メソッドを同時に使用します。一緒に使用できるメソッドはこれらのメソッドだけです。centertype または scaletype を指定しない場合、normalize ではそのメソッドの既定のメソッド タイプが使用されます (平均が 0 となるようにセンタリングし、標準偏差によってスケーリングします)。
この構文では、任意のセンタリング タイプとスケーリング タイプを使用して両方のメソッドをまとめて実行します。たとえば、N = normalize(A,"center","median","scale","mad") のようになります。また、この構文を使用して、以前に計算された正規化のセンタリング値 C とスケーリング値 S の指定もできます。たとえば、[N1,C,S] = normalize(A1) で 1 つのデータ セットを正規化してパラメーターを保存します。その後、N2 = normalize(A2,"center",C,"scale",S) で別のデータ セットに対してこれらのパラメーターを再利用します。
は、名前と値の引数を 1 つ以上使用して、正規化に関する追加のパラメーターを指定します。たとえば、N = normalize(___,Name,Value)normalize(A,"DataVariables",datavars) は、A が table または timetable である場合に、datavars で指定された変数を正規化します。
例
"z" スコアを計算してベクトルと行列のデータを正規化します。
ベクトル v を作成して "z" スコアを計算し、平均が 0、標準偏差が 1 となるようデータを正規化します。
v = 1:5; N = normalize(v)
N = 1×5
-1.2649 -0.6325 0 0.6325 1.2649
行列 B を作成し、各列の "z" スコアを計算します。その後、各行を正規化します。
B = magic(3)
B = 3×3
8 1 6
3 5 7
4 9 2
N1 = normalize(B)
N1 = 3×3
1.1339 -1.0000 0.3780
-0.7559 0 0.7559
-0.3780 1.0000 -1.1339
N2 = normalize(B,2)
N2 = 3×3
0.8321 -1.1094 0.2774
-1.0000 0 1.0000
-0.2774 1.1094 -0.8321
ベクトル A を標準偏差によりスケーリングします。
A = 1:5;
Ns = normalize(A,"scale")Ns = 1×5
0.6325 1.2649 1.8974 2.5298 3.1623
A をスケーリングして、その範囲が区間 [0, 1] に収まるようにします。
Nr = normalize(A,"range")Nr = 1×5
0 0.2500 0.5000 0.7500 1.0000
ベクトル A を作成して、1 ノルムにより正規化します。
A = 1:5;
Np = normalize(A,"norm",1)Np = 1×5
0.0667 0.1333 0.2000 0.2667 0.3333
A のデータをセンタリングし、平均が 0 になるようにします。
Nc = normalize(A,"center","mean")
Nc = 1×5
-2 -1 0 1 2
5 人の身長情報が含まれる table を作成します。
LastName = ["Sanchez";"Johnson";"Lee";"Diaz";"Brown"]; Height = [71;69;64;67;64]; T = table(LastName,Height)
T=5×2 table
LastName Height
_________ ______
"Sanchez" 71
"Johnson" 69
"Lee" 64
"Diaz" 67
"Brown" 64
身長データを最高身長により正規化します。
N = normalize(T,"norm",Inf,"DataVariables","Height")
N=5×2 table
LastName Height
_________ _______
"Sanchez" 1
"Johnson" 0.97183
"Lee" 0.90141
"Diaz" 0.94366
"Brown" 0.90141
実数部と虚数部を含むベクトルを作成します。
a = [1; 2; 3; 4]; b = [2; -2; 7; -7]; z = complex(a,b)
z = 4×1 complex
1.0000 + 2.0000i
2.0000 - 2.0000i
3.0000 + 7.0000i
4.0000 - 7.0000i
複素数ベクトルを正規化します。位相を維持しながら大きさをスケーリングするには、無限大ノルムまたは最大の大きさでスケーリングします。norm メソッドで Inf オプションを指定します。関数は複素数単位ベクトルを返します。
N = normalize(z,"norm",Inf)N = 4×1 complex
0.1240 + 0.2481i
0.2481 - 0.2481i
0.3721 + 0.8682i
0.4961 - 0.8682i
正規化したベクトルが複素数単位円内にあることを検証します。
Nmag = max(abs(N))
Nmag = 1
正規化したベクトルと元のベクトルの対応する要素間の比が同じであることを検証します。
r = N ./ z
r = 4×1
0.1240
0.1240
0.1240
0.1240
正規化したベクトルの位相角が元のベクトルの位相角と同じであることを検証します。
ztheta = angle(z)
ztheta = 4×1
1.1071
-0.7854
1.1659
-1.0517
Ntheta = angle(N)
Ntheta = 4×1
1.1071
-0.7854
1.1659
-1.0517
データ セットを正規化して計算されたパラメーター値を返し、そのパラメーターを再利用して同じ正規化を別のデータ セットに適用します。
2 つの変数 Temperature と WindSpeed をもつ timetable を作成します。次に、同じ変数をもち、サンプルを 1 年後に取得する 2 番目の timetable を作成します。
rng default Time1 = (datetime(2019,1,1):days(1):datetime(2019,1,10))'; Temperature = randi([10 40],10,1); WindSpeed = randi([0 20],10,1); T1 = timetable(Temperature,WindSpeed,'RowTimes',Time1)
T1=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2019 35 3
02-Jan-2019 38 20
03-Jan-2019 13 20
04-Jan-2019 38 10
05-Jan-2019 29 16
06-Jan-2019 13 2
07-Jan-2019 18 8
08-Jan-2019 26 19
09-Jan-2019 39 16
10-Jan-2019 39 20
Time2 = (datetime(2020,1,1):days(1):datetime(2020,1,10))';
Temperature = randi([10 40],10,1);
WindSpeed = randi([0 20],10,1);
T2 = timetable(Temperature,WindSpeed,'RowTimes',Time2)T2=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 30 14
02-Jan-2020 11 0
03-Jan-2020 36 5
04-Jan-2020 38 0
05-Jan-2020 31 2
06-Jan-2020 33 17
07-Jan-2020 33 14
08-Jan-2020 22 6
09-Jan-2020 30 19
10-Jan-2020 15 0
最初の timetable を正規化します。3 つの出力として、正規化された table のほか、関数が正規化の実行に使用するセンタリング パラメーター値 C とスケーリング パラメーター値 S を指定します。
[T1_norm,C,S] = normalize(T1)
T1_norm=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2019 0.57687 -1.4636
02-Jan-2019 0.856 0.92885
03-Jan-2019 -1.4701 0.92885
04-Jan-2019 0.856 -0.4785
05-Jan-2019 0.018609 0.36591
06-Jan-2019 -1.4701 -1.6044
07-Jan-2019 -1.0049 -0.75997
08-Jan-2019 -0.26052 0.78812
09-Jan-2019 0.94905 0.36591
10-Jan-2019 0.94905 0.92885
C=1×2 table
Temperature WindSpeed
___________ _________
28.8 13.4
S=1×2 table
Temperature WindSpeed
___________ _________
10.748 7.1056
次に、最初の正規化のパラメーター値を使用して 2 番目の timetable T2 を正規化します。この手法により、T2 のデータが必ず T1 と同じようにセンタリングおよびスケーリングされるようになります。
T2_norm = normalize(T2,"center",C,"scale",S)
T2_norm=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 0.11165 0.084441
02-Jan-2020 -1.6562 -1.8858
03-Jan-2020 0.66992 -1.1822
04-Jan-2020 0.856 -1.8858
05-Jan-2020 0.2047 -1.6044
06-Jan-2020 0.39078 0.50665
07-Jan-2020 0.39078 0.084441
08-Jan-2020 -0.6327 -1.0414
09-Jan-2020 0.11165 0.78812
10-Jan-2020 -1.284 -1.8858
既定では、normalize は、C と S にも存在する T2 のすべての変数に対して演算を行います。T2 の変数のサブセットを正規化するには、名前と値の引数 DataVariables で演算の対象とする変数を指定します。指定する変数のサブセットは C と S に存在しなければなりません。
演算の対象とするデータ変数として WindSpeed を指定します。normalize はその変数に対して演算を行い、Temperature を変更せずに返します。
T2_partial = normalize(T2,"center",C,"scale",S,"DataVariables","WindSpeed")
T2_partial=10×2 timetable
Time Temperature WindSpeed
___________ ___________ _________
01-Jan-2020 30 0.084441
02-Jan-2020 11 -1.8858
03-Jan-2020 36 -1.1822
04-Jan-2020 38 -1.8858
05-Jan-2020 31 -1.6044
06-Jan-2020 33 0.50665
07-Jan-2020 33 0.084441
08-Jan-2020 22 -1.0414
09-Jan-2020 30 0.78812
10-Jan-2020 15 -1.8858
入力引数
入力データ。スカラー、ベクトル、行列、多次元配列、table、または timetable として指定します。
A が数値配列で、型が single である場合、出力の型も single になります。それ以外の場合、出力の型は double です。
normalize は A の NaN の値を無視します。
データ型: double | single | table | timetable
複素数のサポート: あり
操作次元。正の整数スカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。
入力データが table または timetable の場合、dim はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。
正規化方式。次の表のオプションのいずれかとして指定します。
方式 | 説明 |
|---|---|
| z スコアを計算。平均値が 0 になるようにデータをセンタリングし、標準偏差が 1 となるようにデータをスケーリング。 |
| データを 2 ノルム (ユークリッド ノルムとも呼ばれる) でスケーリング。 |
| 標準偏差が 1 となるようにデータをスケーリング。 |
| データ範囲を [0, 1] に再スケーリング。 |
| 平均が 0 となるようにデータをセンタリング。 |
| 中央値が 0 となるようにデータをセンタリングし、四分位数間範囲が 1 となるようにデータをスケーリング。 |
方式のタイプ。指定した方式に応じて、配列、table、2 要素行ベクトル、またはタイプ名として指定します。
方式 | 方式のタイプのオプション | 説明 |
|---|---|---|
|
| z スコアを計算。平均値が 0 になるようにデータをセンタリングし、標準偏差が 1 となるようにデータをスケーリング。 |
| z スコアを計算。平均値が 0 になるようにデータをセンタリングし、中央絶対偏差が 1 となるようにデータをスケーリング。 | |
| 正の数値スカラー (既定値は 2) | p ノルムでデータをスケーリング (p は正の数値スカラー)。 |
| p ノルムでデータをスケーリング (p は Inf)。無限大ノルム (最大ノルム) はデータ内の要素の最大の大きさと同じです。 | |
|
| 標準偏差が 1 となるようにデータをスケーリング。 |
| 中央絶対偏差が 1 となるようにデータをスケーリング。 | |
| データの最初の要素でデータをスケーリング。 | |
| 四分位数間範囲が 1 となるようにデータをスケーリング。 | |
数値配列 | 数値の配列でデータをスケーリング。配列は入力 A と互換性のあるサイズでなければなりません。 | |
table | table の変数でデータをスケーリング。入力データ A の各 table 変数は、スケーリング table 内にある似た名前の変数の値を使用してスケーリングされます。 | |
| 2 要素の行ベクトル (既定値は [0 1]) | データ範囲を [a b] に再スケーリング (a < b)。 |
|
| 平均が 0 となるようにデータをセンタリング。 |
| 中央値が 0 となるようにデータをセンタリング。 | |
数値配列 | 数値の配列で中心をシフト。配列は入力 A と互換性のあるサイズでなければなりません。 | |
table | table の変数で中心をシフト。入力データ A の各 table 変数は、センタリング table 内にある似た名前の変数の値を使用してセンタリングされます。 |
センタリングとスケーリングのメソッドのタイプ。"center" メソッドまたは "scale" メソッドのそれぞれに有効な任意の methodtype オプションとして指定します。各メソッドで使用可能なオプションの一覧については、methodtype 引数の説明を参照してください。
例: N = normalize(A,"center",C,"scale",S)
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: normalize(T,ReplaceValues=false)
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: normalize(T,"ReplaceValues",false)
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables の値は、入力 table 内のどの変数を埋めるかを示します。
DataVariables で指定されていない table 内のその他の変数は、正規化されずに出力に渡されます。
| インデックス方式 | 指定する値 | 例 |
|---|---|---|
変数名 |
|
|
変数インデックス |
|
|
関数ハンドル |
|
|
変数の型 |
|
|
例: normalize(T,"DataVariables",["Var1" "Var2" "Var4"])
値置換インジケーター。A が table または timetable の場合に、次の値のいずれかとして指定します。
trueまたは1— 入力 table 変数を、正規化されたデータが格納された table 変数に置き換えます。falseまたは0— 入力 table 変数に、正規化されたデータが格納された table 変数を追加します。
入力データがベクトル、行列、または多次元配列の場合、ReplaceValues はサポートされません。
例: normalize(T,"ReplaceValues",false)
出力引数
正規化された値。配列、table、または timetable として返されます。
N は、ReplaceValues の値が false の場合を除き、A と同じサイズになります。ReplaceValues の値が false の場合、N の幅は入力データの幅と指定したデータ変数の数の合計となります。
normalize は通常、入力 table と入力 timetable のすべての変数に対して演算を行いますが、次の場合は除きます。
DataVariablesを指定した場合、normalizeは指定された変数に対してのみ演算を行います。構文
normalize(T,"center",C,"scale",S)を使用して、以前に計算されたパラメーターCとSを使用して table または timetableTを正規化した場合、normalizeは自動的にCとS内の変数名を使用して、演算の対象とするT内のデータ変数を判別します。
センタリング値。配列または table として返されます。
A が配列の場合、normalize は N = (A - C) ./ S を満たす C と S を配列として返します。C の各値は、指定された次元に沿って正規化を実行するために使用されるセンタリング値です。たとえば、A がデータの 10 行 10 列の行列で、normalize が最初の次元に沿って演算を行う場合、C は、A の各列のセンタリング値を含む 1 行 10 列のベクトルです。
A が table または timetable の場合、normalize は、N.Var = (A.Var - C.Var) ./ S.Var となるように正規化された各 table 変数のセンターとスケールを含む table として C と S を返します。C と S の table 変数名は、入力の対応する table 変数と一致します。C の各変数には、A の似た名前の変数を正規化するために使用されるセンタリング値が含まれます。
スケーリング値。配列または table として返されます。
A が配列の場合、normalize は N = (A - C) ./ S を満たす C と S を配列として返します。S の各値は、指定された次元に沿って正規化を実行するために使用されるスケーリング値です。たとえば、A がデータの 10 行 10 列の行列で、normalize が最初の次元に沿って演算を行う場合、S は、A の各列のスケーリング値を含む 1 行 10 列のベクトルです。
A が table または timetable の場合、normalize は、N.Var = (A.Var - C.Var) ./ S.Var となるように正規化された各 table 変数のセンターとスケールを含む table として C と S を返します。C と S の table 変数名は、入力の対応する table 変数と一致します。S の各変数には、A の似た名前の変数を正規化するために使用されるスケーリング値が含まれます。
詳細
z スコアは、標準偏差に基づいて平均からのデータ点の距離を測定します。標準化されたデータ セットの平均は 0 で、標準偏差は 1 です。また、元のデータ セットの形状プロパティ (同じ傾斜と尖度) は保持されます。
平均が μ、標準偏差が σ の確率変数 X では、値 x の z スコアは です。平均が 、標準偏差が S のサンプル データでは、データ点 x の z スコアは です。
N 個の要素をもつベクトル v の p ノルムの一般的定義は次のとおりです。
ここで、p は任意の正の実数値、Inf、または -Inf です。p の一般的な値には 1、2、Inf などがあります。
p が 1 の場合、結果の 1 ノルムはベクトル要素の絶対値の和となります。
p が 2 の場合、結果の 2 ノルムはベクトルの大きさすなわちユークリッド長を表します。
p が
Infの場合は、 になります。
再スケーリングを行うと、数直線に沿って点を伸張または圧縮することで、データ セット内の最小値と最大値の間の距離が変更されます。データの z スコアは保持されるため、分布の形状は同じままです。
データ X を任意の区間 [a b] に再スケーリングする方程式は次のとおりです。
A が定数の場合、normalize は区間の下限 (既定値は 0) または NaN (指定した区間に Inf が含まれる場合) を返します。
関数 normalize と関数 rescale はどちらもデータを任意の区間に再スケーリングできますが、rescale では指定した最小値と最大値への入力データのクリップもできます。
データ セットの四分位数間範囲 (IQR) は、値が並べ替えられるときの値の中間 50% の範囲を示しています。Q1 がデータの 25 番目の百分位数で、Q3 がデータの 75 番目の百分位数である場合、 になります。
A が定数の場合は A の四分位数間範囲は 0 ですが、値が欠損しているか無限大である場合は A の四分位数間範囲は NaN になります。
データに外れ値 (非常に大きい値または非常に小さい値) が含まれている場合、通常は全範囲のデータを確認するよりも IQR が推奨されます。なぜなら、IQR では、データの最大 25% および最小 25% の値が除外されるからです。
データ セットの中央絶対偏差 (MAD) は、次のように、データの中央値 からの絶対偏差の中央値です。。したがって、MAD は中央値を基準としてデータの変動性を示しています。
データに外れ値 (非常に大きい値または非常に小さい値) が含まれている場合、通常はデータの標準偏差を使用するよりも MAD が推奨されます。なぜなら、標準偏差は平均値からの偏差を二乗し、過度に大きな影響を外れ値に与えるからです。逆に、外れ値の数が少ない偏差は MAD の値に影響を与えません。
拡張機能
normalize 関数は tall 配列をサポートしていますが、以下の使用上の注意および制限があります。
出力
Cおよび出力Sはサポートされていません。"center"メソッドと"scale"メソッドは同時に指定できません。"center"でサポートされるメソッドのタイプは"mean"、"median"または数値スカラーです。"scale"でサポートされるメソッドのタイプは"std"、"mad"、"first"または数値スカラーです。名前と値の引数
DataVariablesでは関数ハンドルを指定できません。最初の次元に沿った中央値または四分位数間範囲の計算を必要とする正規化方式は、tall 列ベクトル データのみをサポートします。これには方式
normalize(___,"zscore","robust")、normalize(___,"scale","mad")、normalize(___,"scale","iqr")、normalize(___,"center","median")、およびnormalize(___,"medianiqr")が含まれます。
詳細については、tall 配列を参照してください。
使用上の注意および制限:
"center"と"scale"の方式のタイプがどちらも table で、DataVariablesが指定されていない場合、方式のタイプには table 変数名が同じ順序で含まれていなければなりません。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
normalize 関数は、GPU 配列を完全にサポートします。GPU 上で関数を実行するには、入力データを gpuArray (Parallel Computing Toolbox) として指定します。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
使用上の注意および制限:
構文
normalize(___,"medianiqr")はサポートされていません。構文
normalize(___,"scale","iqr")はサポートされていません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018a で導入名前と値の引数 ReplaceValues を false に設定すると、正規化されたデータを含む table 変数を入力 table 変数に追加できます。この場合、変数の置換は行われません。
名前と値の引数 ReplaceValues は table および timetable 入力データでのみサポートされます。
センタリングとスケーリングの正規化パラメーター値を返して、以降のデータ セットの正規化に再使用します。たとえば、配列 A を正規化し、その後同じパラメーターを使用して配列 B を正規化します。
[Anorm,C,S] = normalize(A); Bnorm = normalize(B,"center",C,"scale",S);
新しい出力はセンタリング値 C とスケーリング パラメーター S で、以降の正規化ステップで再使用できます。"center" および "scale" 正規化方式を同時に指定します。同時に指定できる正規化方法はこの 2 つのみです。
method が "center" または "scale" の場合、methodtype が取りうる値には配列や table が含まれます。これらの methodtype 値は新しい出力 C および S と連携することを目的としていますが、指定する独自の正規化パラメーターを計算することもできます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
