HOWTO · NumPy
Python でベクトルを正規化する
このチュートリアルでは、Python でベクトルを正規化する方法を示します
このページの内容
機械学習の世界で一般的な概念は、ベクトルまたはデータセットをアルゴリズムに渡す前に正規化することです。
ベクトルの正規化について話すとき、そのベクトルの大きさは単位ベクトルとして 1 であると言います。
このチュートリアルでは、numpy 配列を単位ベクトルに変換します。
Python で数式を使用してベクトルを正規化する
この方法では、数式を使用して配列のベクトルノルムを計算します。このノルムベクトルで配列を除算すると、正規化されたベクトルが得られます。次のコードはこれを実装しています。
import numpy as np
v = np.random.rand(10)
normalized_v = v / np.sqrt(np.sum(v ** 2))
print(normalized_v)
出力:
[0.10366807 0.05821296 0.11852538 0.42957961 0.27653372 0.36389277
0.47575824 0.32059888 0.2721495 0.41856126]
ベクトルの長さが 0 の場合、このメソッドはエラーを返すことに注意してください。
Python で numpy.linalg.norm() 関数を使用してベクトルを正規化する
Python の NumPy モジュールには、配列のベクトルノルムを返すことができる norm() 関数があります。次に、このノルムベクトルで配列を除算して、正規化されたベクトルを取得します。たとえば、以下のコードでは、ランダム配列を作成し、このメソッドを使用してその正規化された形式を見つけます。
import numpy as np
v = np.random.rand(10)
normalized_v = v / np.linalg.norm(v)
print(normalized_v)
出力:
[0.10881785 0.32038649 0.51652046 0.05670539 0.12873248 0.52460815
0.32929967 0.32699446 0.0753471 0.32043046]
Python で sklearn.preprocessing.normalize() 関数を使用してベクトルを正規化する
sklearn モジュールには、データ前処理やその他の機械学習ツールに利用できる効率的な方法があります。このライブラリの normalize() 関数は通常、2 次元行列で使用され、L1 および L2 正規化のオプションを提供します。以下のコードは、この関数を 1 次元配列で使用し、正規化された形式を見つけます。
import numpy as np
from sklearn.preprocessing import normalize
v = np.random.rand(10)
normalized_v = normalize(v[:, np.newaxis], axis=0).ravel()
print(normalized_v)
出力:
[0.19361438 0.36752554 0.26904722 0.10672546 0.32089067 0.48359538
0.01824837 0.47591181 0.26439268 0.33180998]
上記のメソッドで使用されている ravel() メソッドは、Python で多次元配列をフラット化するために使用されます。