K平均法
K-meansは、広く使用されているクラスタリング・アルゴリズムです。 近接性に基づいています。
これは、一連のクラスタ重心から始まり、各観察が最も近い重心に割り当てられます。 次に、クラスタの重心が、それに割り当てられた観測の平均値で更新されます。 プロセスは、重心が更新されなくなるまで、または最大反復数に達するまで継続されます。
KMeansClustering
クラスは、リージョン化をサポートしていません。 つまり、同じクラスタの要素を地理的に切断できます。 ただし、比較目的のベンチマークとしてK-meansを使用できます。 空間情報が活用されていない場合でも、モデリングの入力パラメータとしてSpatialDataFrame
のインスタンスを直接取得できます。 その後、空間パイプラインに組み込むことができます。
K-Meansアルゴリズムでは、n_clusters
パラメータを使用してクラスタ数を定義する必要があります。 ただし、これが不明な場合、KMeansClustering
クラスにはクラスタ数を見積もる2つのメソッドが用意されています。 ユーザーは、init_method
パラメータで次のいずれかのメソッドを指定できます。
- Elbowメソッド: この方法では、Kの異なる値に対してK-Meansアルゴリズムが実行され、各値に対して合計平方誤差(SSE)が追跡されます。 Kの値に対してエラーをプロットすると、次の図に示すように、グラフの「肘」でKの最適値が示されます:
- シルエット方式: K-MeansアルゴリズムをKの異なる値に対して実行し、各実行のシルエット・スコアを測定します。 最大スコアに関連付けられたKの値を返します。 シルエット・スコアは、各観察がクラスタ内にどの程度あるかを測定します。 メジャーは
[-1, 1]
の範囲にあり、次のように解釈できます:1
の近くのシルエット係数は、観察が隣接するクラスタから遠く離れていることを示します。0
の値は、2つの隣接するクラスタ間のディシジョン境界に近いか、または境界にあることを示します。- 負の値は、観察が間違ったクラスタに割り当てられている可能性があることを示します。
n_clusters
パラメータが定義されていない場合、アルゴリズムはエルボ・メソッドを使用して推定します。 詳細は、「Oracle Spatial AI Python APIリファレンス」のKMeansClusteringクラスを参照してください。
次の例では、blocks_groups
SpatialDataFrame
およびKMeansClustering
クラスを使用して、特定の機能に基づいてクラスタを識別します。
from oraclesai.weights import KNNWeightsDefinition
from oraclesai.clustering import KMeansClustering
from oraclesai.pipeline import SpatialPipeline
from sklearn.preprocessing import StandardScaler
# Define training features
X = block_groups[['MEDIAN_INCOME', 'MEAN_AGE', 'MEAN_EDUCATION_LEVEL', 'HOUSE_VALUE', 'geometry']]
# Create an instance of KMeansClustering with K=5
kmeans_model = KMeansClustering(n_clusters=5)
# Create a spatial pipeline with preprocessing and clustering steps.
kmeans_pipeline = SpatialPipeline([('scale', StandardScaler()), ('clustering', kmeans_model)])
# Train the model
kmeans_pipeline.fit(X)
# Print the labels associated with each observation
print(f"labels = {kmeans_pipeline.named_steps['clustering'].labels_[:20]}")
出力は、最初の20個の観測のラベルで構成されます。
labels = [3 1 3 1 3 3 1 1 3 3 2 2 1 3 2 2 1 1 1 1]