リージョン化を伴う合併
Agglomerativeクラスタリングは、ボトムアップ・アプローチを使用して階層クラスタリングを実行します。
集約クラスタリングでは、最初は監視ごとに1つのクラスタがあります。 反復ごとに、最も近い2つのクラスタがマージされます。 アルゴリズムは、次の停止条件のいずれかが適用されるまで続行されます:
- 特定の数のクラスタに到達します。
- 2つのクラスタ間の距離が特定のしきい値を超えています。
標準的な凝集クラスタリングでは、観測の空間ロケーションを完全に考慮していません。 空間データにこのアルゴリズムを適用すると、多くの場合、クラスタのデータ・ポイントが空間リージョンに分散されます。 リージョン化は、集合アルゴリズムに空間コンテキストを提供するために使用されます。 空間重みを定義することで、リージョン化を伴う集合体には、クラスタリング・アルゴリズムに空間制約が含まれるため、同じクラスタの要素は共通の特性を共有し、地理的に接続されます。
詳細は、「Oracle Spatial AI Python APIリファレンス」のAgglomerativeClusteringクラスを参照してください。
次の表に、AgglomerativeClustering
クラスのプロパティの一部を示します。
パラメータ | 説明 |
---|---|
n_clusters_ |
アルゴリズムは、指定した数のクラスタに到達すると停止します。 |
distance_threshold |
最も近い2つのクラスタ間の距離がこの値より大きい場合、アルゴリズムは停止します。 このパラメータを定義する場合は、n_clusters=None を設定する必要があります。
|
spatial_weights_definition |
近隣のロケーション間の関係を定義します。 隣人から情報を取得する必要があります。
KNNおよびDistanceBandの重みのみがサポートされています。 |
linkage |
2つのクラスタ間の距離を識別するための戦略。 オプションは次のとおりです。
|
affinity |
距離のコンピュートに使用されるメトリック。 |
n_jobs |
同時に実行されているジョブの最大数。 |
次のコードでは、block_groups
SpatialDataFrame
およびAgglomerativeClustering
を使用して、特定の機能に従って共通の特性を共有するロケーションを識別します。 リージョン化を使用して、クラスタを地理的に接続します。
from oraclesai.weights import KNNWeightsDefinition
from oraclesai.clustering import AgglomerativeClustering
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']]
# Use geodetic reference systems to calculate distances.
X = X.to_crs('epsg:3857')
# Create an instance defining stopping criteria and spatial weights
reg_agglomerative = AgglomerativeClustering(n_clusters=6, spatial_weights_definition=KNNWeightsDefinition(k=5))
# Create a spatial pipeline with preprocessing and clustering steps.
agglomerative_pipeline = SpatialPipeline([('scale', StandardScaler()), ('clustering', reg_agglomerative)])
# Train the model
agglomerative_pipeline.fit(X)
# Print the labels associated with each observation
print(f"labels = {agglomerative_pipeline.named_steps['clustering'].labels_[:20]}")
出力は、データの最初の20個の観測に関連付けられたラベルです。
labels = [1 4 4 4 4 0 0 0 1 1 1 1 1 1 1 1 0 2 0 2]