Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

normalize

説明

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

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

  • A が行列、table、または timetable の場合、normalize はデータの各列について個別に演算する。

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

N = normalize(A,dim) は次元 dim に沿った z スコアを返します。たとえば、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(___,'DataVariables',datavars) は、入力データが table または timetable 内にある場合に演算の対象とする変数をオプションで指定します。このオプションは前述の任意の構文で使用できます。

[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

データセットを正規化して計算されたパラメーター値を返し、そのパラメーターを再利用して同じ正規化を別のデータセットに適用します。

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
複素数のサポート: あり

演算の対象の次元。正の整数のスカラーとして指定します。

データ型: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

方式

説明

'zscore'

平均が 0 で標準偏差が 1 の z スコア

'norm'

2 ノルム

'scale'

標準偏差によるスケーリング

'range'

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

'center'

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

'medianiqr'

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

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

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

方式

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

説明

'zscore'

'std' (既定)

平均が 0、標準偏差が 1 となるようなセンタリングとスケーリング

'robust'

中央値が 0、中央絶対偏差が 1 となるようなセンタリングとスケーリング

'norm'

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

p ノルム

Inf

無限大ノルム

'scale'

'std' (既定)

標準偏差によるスケーリング

'mad'

中央絶対偏差によるスケーリング。

'first'

データの最初の要素によるスケーリング。

'iqr'

四分位数間範囲単位のデータのスケーリング。

数値配列

数値によるデータのスケーリング。配列は入力 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)

演算の対象とする table 変数。次の表のオプションのいずれかとして指定します。datavars は、入力 table 内の正規化する変数を示します。datavars で指定されていない table 内のその他の変数は、演算されずに出力に渡されます。

オプション説明
変数名

単一の table 変数名を指定する文字ベクトルまたはスカラー string

'Var1'

"Var1"

変数名のベクトル

各要素が table 変数名である、文字ベクトルの cell 配列または string 配列

{'Var1' 'Var2'}

["Var1" "Var2"]

変数インデックスのスカラーまたはベクトル

table 変数インデックスのスカラーまたはベクトル

1

[1 3 5]

logical ベクトル

各要素が table 変数に対応する logical ベクトル。true の場合は対応する変数を含めて、false の場合は対応する変数を除外します。

[true false true]

関数ハンドル

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

@isnumeric

vartype 添字

関数 vartype によって生成される table の添字

vartype('numeric')

例: normalize(T,'norm','DataVariables',["Var1" "Var2" "Var4"])

出力引数

すべて折りたたむ

正規化された値。配列、table、または timetable として返されます。N は入力データ A と同じサイズです。

normalize は通常、入力 table と入力 timetable のすべての変数に対して演算を行いますが、次の場合は除きます。

  • 'DataVariables' を指定した場合、normalize は指定された変数に対してのみ演算を行い、データ内のその他の変数は変更されずに N に返されます。

  • 構文 normalize(T,'center',C,'scale',S) を使用して、以前に計算されたパラメーター CS を使用して table または timetable T を正規化した場合、normalize は自動的に CS 内の変数名を使用して、演算の対象とする T 内のデータ変数を判別します。T 内のその他の変数は変更されずに N に返されます。

センタリング値。配列または 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 スコア

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

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

P ノルム

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

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

ここで、p は任意の正の実数値、Inf、または -Inf です。p の一般的な値をいくつか次に挙げます。

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

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

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

再スケーリング

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

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

Xrescaled=a+[XminXmaxXminX](ba).

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

四分位数間範囲

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

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

中央絶対偏差

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

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

拡張機能

参考

| |

R2018a で導入