機械翻訳について

リージョン化を伴う合併

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つのクラスタ間の距離を識別するための戦略。 オプションは次のとおりです。
  • ward: 2つのクラスタ間の差異。
  • average: 2つのクラスタの平均間の距離。
  • complete: 2つの異なるクラスタからのポイントのペア間の最大距離。
  • single: 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]