[python] k-meansクラスタリングをするときはデータの規格化、標準化をする
概要
とある機械学習の問題に取り組んでいるときに、データをk-meansクラスタリングしてみた。ところが、どうもある一つのカラムの値に依存しすぎているように見えた。こうならないためには、事前にデータの大きさを揃えておかないといけない。
k-meansクラスタリングとは
k-meansクラスタリングは、データを複数のクラスタに分割するアルゴリズム。事前に指定した個数のクラスタ重心を作り、各データを最寄りのクラスタに分類する。

なぜ規格化が必要なのか
k-meansでのクラスタ分類において座標空間上のデータ点同士の距離を用いる。そのため、ある一つのデータだけ絶対値が大きいと、同じ分散でも点同士の距離は大きくなり、クラスタ分類の計算に影響を与える。

実際に僕が使用していたデータはカラムA、C、Dが0~2の範囲を取り、カラムBは1000~3000の範囲を取るようなデータでした。規格化を忘れてクラスタリングをしてみたら、カラムBにだけ影響を受けているようなクラスタリングとなっていました。今回はすぐおかしいことに気づいたので良かったですが、、、
結論
kmeansクラスタリングを行う前は必ず規格化、標準化をしましょう。そして、クラスタリングの結果を必ず確認しましょう。
最新記事
すべて表示現象 raspberry piでfirestoreをimportしようとするとタイトルのエラーが発生。 from from firebase_admin import firestore ImportError: Failed to import the Cloud Firestore library for Python. Make sure to install the "google-clo
概要 フィッティングを行いたい場合、pythonならばscipy.optimize.leastsqなどでできます。 しかし、フィッティングを行う場合、フィッティングパラメータに条件を付けたい場合も多々あります。 例えば、下記のようにパラメータa、bは共に正の範囲で最適な値を求める、という感じです。 f(x, a, b)=a*x^2+b (a>0 and b>0) 今回はそんな手法についてご紹介しま
現象 spicy.optimizeのleastsqで最小二乗法でフィッティングをしようとしたらタイトルのエラーが発生。 from scipy import optimize import numpy as np def internalFunc1(x, plist): a=plist[0] b=plist[1] return a*x**2+b