このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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
table 変数
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
入力引数
A
— 入力データ
スカラー | ベクトル | 行列 | 多次元配列 | table | timetable
入力データ。スカラー、ベクトル、行列、多次元配列、table、または timetable として指定します。
A
が数値配列で、型が single
である場合、出力の型も single
になります。それ以外の場合、出力の型は double
です。
normalize
は A
の NaN
の値を無視します。
データ型: double
| single
| table
| timetable
複素数のサポート: あり
dim
— 操作次元
正の整数スカラー
操作次元。正の整数スカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。
入力データが table または timetable の場合、dim
はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。
method
— 正規化方式
"zscore"
(既定値) | "norm"
| "scale"
| "range"
| "center"
| "medianiqr"
正規化方式。次の表のオプションのいずれかとして指定します。
方式 | 説明 |
---|---|
| z スコアを計算。平均値が 0 になるようにデータをセンタリングし、標準偏差が 1 となるようにデータをスケーリング。 |
| データを 2 ノルム (ユークリッド ノルムとも呼ばれる) でスケーリング。 |
| 標準偏差が 1 となるようにデータをスケーリング。 |
| データ範囲を [0, 1] に再スケーリング。 |
| 平均が 0 となるようにデータをセンタリング。 |
| 中央値が 0 となるようにデータをセンタリングし、四分位数間範囲が 1 となるようにデータをスケーリング。 |
methodtype
— 方式のタイプ
配列 | table | 2 要素の行ベクトル | タイプ名
方式のタイプ。指定した方式に応じて、配列、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 内にある似た名前の変数の値を使用してセンタリングされます。 |
centertype
, scaletype
— センタリングとスケーリングのメソッドのタイプ
配列 | 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)
DataVariables
— 演算の対象とする table 変数
table 変数名 | スカラー | ベクトル | cell 配列 | パターン | 関数ハンドル | table vartype
添字
演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。DataVariables
の値は、入力 table 内のどの変数を埋めるかを示します。
DataVariables
で指定されていない table 内のその他の変数は、正規化されずに出力に渡されます。
インデックス方式 | 例 |
---|---|
変数名:
|
|
変数インデックス:
|
|
関数ハンドル:
|
|
変数の型:
|
|
例: normalize(T,"DataVariables",["Var1" "Var2" "Var4"])
ReplaceValues
— 値置換インジケーター
true
または 1
(既定値) | false
または 0
値置換インジケーター。A
が table または timetable の場合に、次の値のいずれかとして指定します。
true
または1
— 入力 table 変数を、正規化されたデータが格納された table 変数に置き換えます。false
または0
— 入力 table 変数に、正規化されたデータが格納された table 変数を追加します。
入力データがベクトル、行列、または多次元配列の場合、ReplaceValues
はサポートされません。
例: normalize(T,"ReplaceValues",false)
出力引数
N
— 正規化された値
配列 | table | timetable
正規化された値。配列、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
内のデータ変数を判別します。
C
— センタリング値
配列 | table
センタリング値。配列または 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
の似た名前の変数を正規化するために使用されるセンタリング値が含まれます。
S
— スケーリング値
配列 | table
スケーリング値。配列または 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 スコア
z スコアは、標準偏差に基づいて平均からのデータ点の距離を測定します。標準化されたデータ セットの平均は 0 で、標準偏差は 1 です。また、元のデータ セットの形状プロパティ (同じ傾斜と尖度) は保持されます。
平均が μ、標準偏差が σ の確率変数 X では、値 x の z スコアは です。平均が 、標準偏差が S のサンプル データでは、データ点 x の z スコアは です。
P ノルム
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 の値に影響を与えません。
拡張機能
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 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
"center"
と"scale"
の方式のタイプがどちらも table で、DataVariables
が指定されていない場合、方式のタイプには table 変数名が同じ順序で含まれていなければなりません。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は GPU 配列を完全にサポートしています。詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
使用上の注意事項および制限事項:
構文
normalize(___,"medianiqr")
はサポートされていません。構文
normalize(___,"scale","iqr")
はサポートされていません。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018a で導入R2022a: 正規化された値の追加
名前と値の引数 ReplaceValues
を false
に設定すると、正規化されたデータを含む table 変数を入力 table 変数に追加できます。この場合、変数の置換は行われません。
名前と値の引数 ReplaceValues
は table および timetable 入力データでのみサポートされます。
R2021a: 同じパラメーターを使用した複数のデータ セットの正規化
センタリングとスケーリングの正規化パラメーター値を返して、以降のデータ セットの正規化に再使用します。たとえば、配列 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 コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)