Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

normalize

説明

N = normalize(A) は、中心が 0 で標準偏差が 1 の、A にあるデータのベクトル単位での z スコアを返します。

  • A がベクトルの場合、normalize はベクトル A 全体について演算します。

  • A が行列の場合、normalizeA の各列を個別に処理します。

  • A が多次元配列の場合、normalize は、サイズが 1 に等しくない A の最初の次元に沿って演算します。

  • A が table または timetable の場合、normalizeA の各変数で別々に動作します。

N = normalize(A,dim) は、演算の対象とする A の次元を指定します。たとえば、normalize(A,2) は各行を正規化します。

N = normalize(___,method) は、前述の任意の構文で正規化方式を指定します。たとえば、normalize(A,"norm")A のデータをユークリッド ノルム (2 ノルム) により正規化します。

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) で別のデータ セットに対してこれらのパラメーターを再利用します。

N = normalize(___,Name,Value) は、名前と値の引数を 1 つ以上使用して、正規化に関する追加のパラメーターを指定します。たとえば、normalize(A,"DataVariables",datavars) は、A が table または timetable である場合に、datavars で指定された変数を正規化します。

[N,C,S] = normalize(___) はさらに、正規化の実行に使用されるセンタリング値 C とスケーリング値 S を返します。これにより、N = normalize(A2,"center",C,"scale",S)CS の値を使用して別の入力データを正規化できます。

すべて折りたたむ

"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 つの変数 TemperatureWindSpeed をもつ 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 は、CS にも存在する T2 のすべての変数に対して演算を行います。T2 の変数のサブセットを正規化するには、名前と値の引数 DataVariables で演算の対象とする変数を指定します。指定する変数のサブセットは CS に存在しなければなりません。

演算の対象とするデータ変数として 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 です。

normalizeANaN の値を無視します。

データ型: double | single | table | timetable
複素数のサポート: あり

操作次元。正の整数スカラーとして指定します。値を指定しない場合、既定値は、サイズが 1 ではない最初の配列の次元です。

入力データが table または timetable の場合、dim はサポートされず、演算は各 table 変数または timetable 変数に沿って個別に行われます。

正規化方式。次の表のオプションのいずれかとして指定します。

方式

説明

"zscore"

z スコアを計算。平均値が 0 になるようにデータをセンタリングし、標準偏差が 1 となるようにデータをスケーリング。

"norm"

データを 2 ノルム (ユークリッド ノルムとも呼ばれる) でスケーリング。

"scale"

標準偏差が 1 となるようにデータをスケーリング。

"range"

データ範囲を [0, 1] に再スケーリング

"center"

平均が 0 となるようにデータをセンタリング。

"medianiqr"

中央値が 0 となるようにデータをセンタリングし、四分位数間範囲が 1 となるようにデータをスケーリング。

関数がデータの正規化に使用するパラメーターを返すには、CS の出力引数を指定します。

方式のタイプ。指定した方式に応じて、配列、table、2 要素行ベクトル、またはタイプ名として指定します。

方式

方式のタイプのオプション

説明

"zscore"

"std" (既定)

z スコアを計算。平均値が 0 になるようにデータをセンタリングし、標準偏差が 1 となるようにデータをスケーリング。

"robust"

z スコアを計算。平均値が 0 になるようにデータをセンタリングし、中央絶対偏差が 1 となるようにデータをスケーリング。

"norm"

正の数値スカラー (既定値は 2)

p ノルムでデータをスケーリング (p は正の数値スカラー)。

Inf

p ノルムでデータをスケーリング (p は Inf)。無限大ノルム (最大ノルム) はデータ内の要素の最大の大きさと同じです。

"scale"

"std" (既定)

標準偏差が 1 となるようにデータをスケーリング。

"mad"

中央絶対偏差が 1 となるようにデータをスケーリング。

"first"

データの最初の要素でデータをスケーリング。

"iqr"

四分位数間範囲が 1 となるようにデータをスケーリング。

数値配列

数値の配列でデータをスケーリング。配列は入力 A互換性のあるサイズでなければなりません。

table

table の変数でデータをスケーリング。入力データ A の各 table 変数は、スケーリング table 内にある似た名前の変数の値を使用してスケーリングされます。

"range"

2 要素の行ベクトル (既定値は [0 1])

データ範囲を [a b]再スケーリング (a < b)。

"center"

"mean" (既定)

平均が 0 となるようにデータをセンタリング。

"median"

中央値が 0 となるようにデータをセンタリング。

数値配列

数値の配列で中心をシフト。配列は入力 A互換性のあるサイズでなければなりません。

table

table の変数で中心をシフト。入力データ A の各 table 変数は、センタリング table 内にある似た名前の変数の値を使用してセンタリングされます。

関数がデータの正規化に使用するパラメーターを返すには、CS の出力引数を指定します。

センタリングとスケーリングのメソッドのタイプ。"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 内のその他の変数は、正規化されずに出力に渡されます。

インデックス方式

変数名:

  • string、文字ベクトル、または cell 配列

  • pattern オブジェクト

  • "A" または 'A'A という名前の変数

  • ["A","B"] または {'A','B'}A および B という名前の 2 つの変数

  • "Var"+digitsPattern(1)"Var" の後に数字 1 桁が続く名前の変数

変数インデックス:

  • table 内の変数の位置を参照するインデックス番号

  • 数値のベクトル

  • logical ベクトル。通常、このベクトルの長さは変数の数と同じですが、末尾の 0 値や false 値は省略できます。

  • 3 — table の 3 番目の変数

  • [2 3] — table の 2 番目と 3 番目の変数

  • [false false true] — 3 番目の変数

関数ハンドル:

  • 入力として table 変数をとり、logical スカラーを返す関数ハンドル

  • @isnumeric — 数値を含んでいるすべての変数

変数の型:

  • 指定した型の変数を選択する vartype 添字

  • vartype("numeric") — 数値を含んでいるすべての変数

例: 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) を使用して、以前に計算されたパラメーター CS を使用して table または timetable T を正規化した場合、normalize は自動的に CS 内の変数名を使用して、演算の対象とする T 内のデータ変数を判別します。

センタリング値。配列または table として返されます。

A が配列の場合、normalizeN = (A - C) ./ S を満たす CS を配列として返します。C の各値は、指定された次元に沿って正規化を実行するために使用されるセンタリング値です。たとえば、A がデータの 10 行 10 列の行列で、normalize が最初の次元に沿って演算を行う場合、C は、A の各列のセンタリング値を含む 1 行 10 列のベクトルです。

A が table または timetable の場合、normalize は、N.Var = (A.Var - C.Var) ./ S.Var となるように正規化された各 table 変数のセンターとスケールを含む table として CS を返します。CS の table 変数名は、入力の対応する table 変数と一致します。C の各変数には、A の似た名前の変数を正規化するために使用されるセンタリング値が含まれます。

スケーリング値。配列または table として返されます。

A が配列の場合、normalizeN = (A - C) ./ S を満たす CS を配列として返します。S の各値は、指定された次元に沿って正規化を実行するために使用されるスケーリング値です。たとえば、A がデータの 10 行 10 列の行列で、normalize が最初の次元に沿って演算を行う場合、S は、A の各列のスケーリング値を含む 1 行 10 列のベクトルです。

A が table または timetable の場合、normalize は、N.Var = (A.Var - C.Var) ./ S.Var となるように正規化された各 table 変数のセンターとスケールを含む table として CS を返します。CS の table 変数名は、入力の対応する table 変数と一致します。S の各変数には、A の似た名前の変数を正規化するために使用されるスケーリング値が含まれます。

詳細

すべて折りたたむ

Z スコア

z スコアは、標準偏差に基づいて平均からのデータ点の距離を測定します。標準化されたデータ セットの平均は 0 で、標準偏差は 1 です。また、元のデータ セットの形状プロパティ (同じ傾斜と尖度) は保持されます。

平均が μ、標準偏差が σ の確率変数 X では、値 x の z スコアは z=(xμ)σ. です。平均が X¯、標準偏差が S のサンプル データでは、データ点 x の z スコアは z=(xX¯)S. です。

P ノルム

N 個の要素をもつベクトル v の p ノルムの一般的定義は次のとおりです。

vp=[k=1N|vk|p]1/p,

ここで、p は任意の正の実数値、Inf、または -Inf です。p の一般的な値には 1、2、Inf などがあります。

  • p が 1 の場合、結果の 1 ノルムはベクトル要素の絶対値の和となります。

  • p が 2 の場合、結果の 2 ノルムはベクトルの大きさすなわちユークリッド長を表します。

  • p が Inf の場合は、v=maxi(|v(i)|) になります。

再スケーリング

再スケーリングを行うと、数直線に沿って点を伸張または圧縮することで、データ セット内の最小値と最大値の間の距離が変更されます。データの z スコアは保持されるため、分布の形状は同じままです。

データ X を任意の区間 [a b] に再スケーリングする方程式は次のとおりです。

Xrescaled=a+[XminXmaxXminX](ba).

A が定数の場合、normalize は区間の下限 (既定値は 0) または NaN (指定した区間に Inf が含まれる場合) を返します。

関数 normalize と関数 rescale はどちらもデータを任意の区間に再スケーリングできますが、rescale では指定した最小値と最大値への入力データのクリップもできます。

四分位数間範囲

データ セットの四分位数間範囲 (IQR) は、値が並べ替えられるときの値の中間 50% の範囲を示しています。Q1 がデータの 25 番目の百分位数で、Q3 がデータの 75 番目の百分位数である場合、IQR = Q3 - Q1 になります。

A が定数の場合は A の四分位数間範囲は 0 ですが、値が欠損しているか無限大である場合は A の四分位数間範囲は NaN になります。

データに外れ値 (非常に大きい値または非常に小さい値) が含まれている場合、通常は全範囲のデータを確認するよりも IQR が推奨されます。なぜなら、IQR では、データの最大 25% および最小 25% の値が除外されるからです。

中央絶対偏差

データ セットの中央絶対偏差 (MAD) は、次のように、データの中央値 X˜ からの絶対偏差の中央値です。MAD=median(|xX˜|)。したがって、MAD は中央値を基準としてデータの変動性を示しています。

データに外れ値 (非常に大きい値または非常に小さい値) が含まれている場合、通常はデータの標準偏差を使用するよりも MAD が推奨されます。なぜなら、標準偏差は平均値からの偏差を二乗し、過度に大きな影響を外れ値に与えるからです。逆に、外れ値の数が少ない偏差は MAD の値に影響を与えません。

拡張機能

バージョン履歴

R2018a で導入

すべて展開する

参考

関数

ライブ エディター タスク

アプリ