logo

Sklearn の StandardScaler

StandardScaler をいつどのように使用するか?

特定のデータセットの特徴が範囲内で大きく変動する場合、またはさまざまな測定単位で記録される場合、StandardScaler が役に立ちます。

StandardScaler によって平均が 0 に減らされた後、データは分散 1 にスケーリングされます。ただし、データの経験的平均と標準偏差を決定する場合、データ内に存在する外れ値は、特性値のスペクトルを減少させる重大な影響を及ぼします。

多くの機械学習アルゴリズムでは、開始時の特徴のこうしたばらつきが原因で問題が発生する可能性があります。たとえば、距離を計算するアルゴリズムの場合、データセットの特徴のいずれかが、範囲が広いか完全に異なる値を持つ場合、データセットのその特定の特徴が距離の計算を制御します。

sklearn の StandardScaler 関数は、値が異なる範囲にあるデータセットの変数は、モデルの適合パラメーターとトレーニング関数に均等に寄与せず、そのモデルで行われた予測にバイアスをもたらす可能性があるという理論に基づいています。

したがって、機械学習モデルに特徴を含める前に、データを正規化する必要があります (μ = 0、σ = 1)。この潜在的な問題に対処するために、特徴量エンジニアリングの標準化が一般的に採用されています。

Sklearnを使用した標準化

 sklearn.preprocessing.StandardScaler(*, copy = True, with_mean = True, with_std = True) 

この関数を使用して、特徴から平均を除去し、単位分散にスケールすることにより、特徴が標準化されます。

特徴の標準スコアを計算する式は z = (x - u) / s です。ここで、u はトレーニング特徴の平均 (または with_mean = False の場合は 0)、s はサンプルの標準偏差 (または with_std = False の場合は 1) です。 )。

トレーニング セット内の特徴に関する関連統計を計算することにより、センタリングとスケーリングが各特徴に個別に適用されます。次に、transform() を使用する後のサンプルで使用するために、fit() メソッドは平均と標準偏差を保存します。

パラメーター:

    コピー (ブール値、デフォルト = True):-このパラメータが True に設定されている場合は、コピーを避け、代わりにサンプルを所定の位置でスケールするようにしてください。これは、必ずしも適切に機能することが保証されているわけではありません。たとえば、入力が NumPy 配列または scipy.sparse CSR 行列の形式でない場合でも、関数はコピーを返す可能性があります。with_mean (ブール値、デフォルト = True):-このパラメータが True に設定されている場合は、データを中央に配置した後にスケーリングします。疎行列に適用すると、これは失敗します (例外が発生します)。これは、疎行列を中心に配置するには、ほとんどの使用状況では、RAM に収まらないほど巨大になることが予想される密行列の構築が必要になるためです。with_std (ブール値、デフォルト = True):-このパラメーターは、true に設定されている場合、入力データを単位分散に合わせてスケーリングします (単位標準偏差を作成すると言うこともできます)。

属性:

    scale_ ((n_features,) または None の形状を持つ ndarray):-データは特徴ごとに相対的にスケーリングされ、平均値と単位分散はゼロになります。means_ ((n_features,) または None の形状を持つ ndarray):-これは、すべての特徴に対するトレーニング データセットの平均値です。引数 with_mean が False に設定されている場合、この値は None と等しくなります。var_ ((n_features,) または None の形状を持つ ndarray):-これは、トレーニング データセット内の各特徴の分散の値です。フィーチャのスケールを決定するために使用されます。引数 with_std が False に設定されている場合、この値は None と等しくなります。n_features_in_ (_int 型):-この属性は、フィッティング時に検出されるフィーチャの数を示します。feature_names_in_ ((n_features_in_,) のような形状を持つ ndarray):-この属性は、フィッティング中に名前によって識別されるフィーチャです。 X は、そのすべての機能名がデータ型文字列である場合にのみ定義されます。n_samples_seen_ (int 型、または (n_features,) のような形状を持つ ndarray):-これにより、推定器が各特徴について検査したサンプルの数が得られます。

StandardScaler クラスのメソッド

フィット(X[, y, サンプルの重み]) このメソッドは、後でデータをスケーリングするために使用する平均と標準偏差を計算します。
fit_transform(X[, y]) このメソッドは、データのパラメーターを適合させてから、それを変換します。
get_feature_names_out([入力_機能]) このメソッドは、変換の機能名を取得します。
get_params([ディープ]) このメソッドは、特定の推定器のパラメータを提供します。
inverse_transform(X[, コピー]) データのサイズを元の形式に合わせて縮小します。
部分フィット(X[, y, サンプルの重み]) X の平均と標準偏差は、後のスケーリングのためにオンラインで計算されます。
set_params(**params) このメソッドは、推定器のパラメータの値を設定するために使用されます。
変換(X[,コピー]) このメソッドは、クラスにすでに格納されているパラメーターを使用してデータを変換します。

StandardScaler の例

まず、必要なライブラリをインポートします。 StandardScaler 関数を使用するには、Sklearn ライブラリをインポートする必要があります。

次に、iris データセットを読み込みます。 sklearn.datasets ライブラリから IRIS データセットをインポートできます。

StandardScaler クラスのオブジェクトを作成します。

独立した機能とターゲットの機能を分離します。

fittransform() メソッドを使用して、データセットへの変換を実装します。

構文:

区切り文字Java
 object_ = StandardScaler() object_.fit_transform(features) 

最初に、上記の構文に従って StandardScaler() メソッドのインスタンスを構築しました。さらに、提供されたオブジェクトとともに fit_transform() を使用してデータを標準化します。

コード

 # Python program to standardize the data # Importing the required library from sklearn.preprocessing import StandardScaler from sklearn.datasets import load_iris # Loading the dataset X, Y = load_iris(return_X_y = True) # Printing 3 rows of original data print(X[:3, :]) # Creating an object of the StandardScaler class std_scaler = StandardScaler() # Printing 3 rows of the transformed data print(std_scaler.fit_transform(X)[:3, :]) print(std_scaler.mean_) 

出力

 [[5.1 3.5 1.4 0.2] [4.9 3. 1.4 0.2] [4.7 3.2 1.3 0.2]] [[-0.90068117 1.01900435 -1.34022653 -1.3154443 ] [-1.14301691 -0.13197948 -1.34022653 -1.3154443 ] [-1.38535265 0.32841405 -1.39706395 -1.3154443 ]] [5.84333333 3.05733333 3.758 1.19933333]