K_DM Book
用語集
対象者 高校生
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

MinMaxScaler で区間正規化する(高校生向け)

入門高校生

01.3.4 高校生向け

MinMaxScaler で区間正規化する(高校生向け)

最終更新 2026-11-01 読了時間 2 分
まとめ
MinMaxScaler は、ある項目の最小値を 0、最大値を 1 に置き直し、間の値を比例配分する変換です(区間正規化)。式は一次式 \(x’ = \dfrac{x - x_{\min}}{x_{\max} - x_{\min}}\) で、平行移動して一定倍するだけなので、ヒストグラムの形は変わらず、横軸の目盛りだけが置き換わります。「秒」と「m」のように単位や桁のちがう項目を、同じものさしで比べたり足し合わせたりしたいときに使います。弱点は外れ値で、1 個の極端な値が最大値を決めてしまうと、残りが 0 のそばに押し込まれます。

こんな場面を想像してみよう #

体力テストで、50 m 走(秒)とハンドボール投げ(m)の記録から「似た体力の人」を探したいとします。A さんと B さんの 2 人の記録を見てみましょう。

50 m 走ハンドボール投げ
A さん7.2 秒25 m
B さん9.0 秒27 m

2 人のちがいは、走りで 1.8、投げで 2。数字の大きさだけ見ると「同じくらいちがう」ように見えます。でも 50 m 走でクラスの記録が 7〜9 秒に収まるなら、1.8 秒差は最速と最遅の差です。一方、ハンドボール投げの記録が 15〜35 m にちらばっているなら、2 m の差はほとんど誤差です。

つまり「数字の差」を単位のまま比べると、目盛りの粗い項目が勝手に重く数えられてしまうのです。そこで、すべての項目を「最小 0・最大 1」の同じものさしに移してから比べます。

変換前は 2 つの特徴量のヒストグラムが横軸の別々の場所に別々の幅で立っているが、MinMaxScaler 適用後は両方とも -1〜1 の同じ範囲に収まり山の形はそのまま重なっている

左は変換前。特徴量 1 は 20 のあたりに細く、特徴量 2 は 100 のあたりに幅広く立っていて、横軸の別々の場所にいます。右は変換後(この例では −1〜1 に移しています)。2 つの山が同じ範囲にぴったり重なり、横軸の目盛りが「最小が −1、最大が 1」に変わっただけで、山の形は左右で同じです。

仕組み:ものさしを作り直す #

まず、最小値と最大値を見つけます。ヒストグラムでいえば、山の左端 \(x_{\min}\) と右端 \(x_{\max}\) に印をつける作業です。次に、全部の値から \(x_{\min}\) を引きます。山がまるごと左へ平行移動して左端が 0 に来ますが、形は変わりません。続けて、右端までの長さ \(x_{\max} - x_{\min}\) で割ります。山が横に伸び縮みして右端がちょうど 1 に来て、ここでも山の高さの並びは変わりません。最後に、ほかの項目にも同じことをします。それぞれの項目が自分の最小・最大で 0〜1 に移るので、すべての山が同じ範囲に並びます。

式にまとめると次の一次式です。

$$ x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}} $$

50 m 走 4 人分の記録で、この式をそのまま計算してみます。

1
2
3
4
x = [7.2, 7.8, 8.5, 9.1]                 # 50 m 走の記録(秒)
lo, hi = min(x), max(x)
scaled = [(v - lo) / (hi - lo) for v in x]
print([round(s, 2) for s in scaled])     # [0.0, 0.32, 0.68, 1.0]

動かして見てみよう #

下の図で「再生」を押すと、説明した手順が 1 つずつ進みます。手順ごとの説明は図の下に出ます。

気をつけたいこと #

最初の弱点は外れ値です。ハンドボール投げで 1 人だけ 60 m 投げる人がいると、その人が 1 になり、残り全員が 0〜0.4 くらいに押し込まれます。ヒストグラムでいえば山が左端に寄ってつぶれた形で、外れ値がある場合は RobustScaler を考えます。二つ目は「0〜1 にしたから正規分布になる」という誤解です。形は変わらないので、ヒストグラムのゆがんだ山はゆがんだまま。平均 0・標準偏差 1 にそろえたいなら StandardScaler です。

やってみよう #

最初の課題は、自分のクラスの体力テストの 2 種目を選び、それぞれ最小・最大を調べて、自分の記録を 0〜1 に換算することです。どちらの種目が「クラス内では上位」か、換算前と印象が変わるか確かめましょう。二つ目は、身の回りで「単位がちがうのに足し合わせている例」を探すことです(例:総合評価の点数、ゲームの総合力)。どんなものさし(0〜1、100 点満点など)に直してから足しているか考えてみてください。三つ目は紙の実験です。「10 人の記録に 1 人だけ極端な値を入れる」状況を作り、0〜1 に換算したあとで残り 9 人の値がどの範囲に集まるか確かめると、外れ値に弱い理由が見えてきます。

つぎに読む #

数式の一般形(0〜1 以外の区間への変換)と scikit-learn の使い方は 標準版の MinMaxScaler で扱っています。平均 0・標準偏差 1 にそろえる兄弟分は StandardScaler(高校生向け)、外れ値に強い方法は RobustScaler(高校生向け) へ進んでください。「単位をそろえないと距離がゆがむ」実例は k 近傍法(高校生向け) で確かめられます。