地理的規制
GeographicalRegressor
は、既存のscikit-learn
回帰アルゴリズムを利用して回帰を実行するために使用される空間機械学習アルゴリズムで、両方の作成に使用されます。グローバル・モデルには、トレーニング・データからのすべての観測と各観測のローカル・モデル、およびグローバル・モデルとローカル・モデルの加重結果の合計が含まれます。
GeographicalRegressor
とGeographicalClassifier
はいずれも、ランダム・フォレスト以外に基礎となる様々な機械学習アルゴリズムを使用できるようにし、ローカル・モデルのトレーニングで並列性をサポートして、堅牢でスケーラブルなパフォーマンスを確保することで、地理的ランダム・フォレスト・アルゴリズムを拡張します。 地理的ランダム・フォレスト・アルゴリズムの詳細は、[ 4 ]を参照してください。
このアルゴリズムは、データの空間異種性が高い場合に役立ちます。 これは、データが地理的に異なるリージョンで異なる動作をすることを意味します。 したがって、単一のモデルを適切に適合させることは困難です。 このアルゴリズムは、scikit-learn
回帰アルゴリズムをサポートします。 つまり、アプリケーションごとに、ランダム・フォレスト、サポート・ベクトル、グラデーション・ブーストおよびデシジョン・ツリーを含む回帰アルゴリズムの下位を指定できます。
GeographicalRegressor
クラスは、このリプレッサを実装します。 scikit-learn
回帰アルゴリズムは、このクラスのインスタンスの作成時に指定できます。 まず、グローバル・モデルは、作成時に提供されたパラメータを使用して構築されます。 空間関係が指定されていない場合(SpatialWeightsDefinition
または帯域幅情報を指定して)、最初に計算されます。 空間関係を定義した後、いくつかのローカル・モデルが作成されます。 予測は、予測するデータに近いローカル・モデルを検索し、グローバル・モデルとローカル・モデルの加重結果の合計によって実行されます。 具体的には、返される予測は次のように計算されます:
local_model_prediction * local_weight + global_model_prediction * (1.0 - local_weight)
前述の計算では、local_weight
をデフォルト値または指定値にできます。
GeographicalRegressor
クラスを使用するときは、このクラスのインスタンスを作成するときに使用するscikit-learn
回帰アルゴリズムを指定できます。 次の表に、このクラスの主なメソッドを示します。
メソッド | 説明 |
---|---|
fit |
まず、グローバル・モデルは、作成時に提供されたパラメータを使用して構築されます。 空間関係が(spatial_weights_definition またはbandwidth パラメータによって)指定されていない場合、内部的に計算されます。 その後、いくつかのローカル・モデルが訓練されています。
|
predict |
予測は、予測するデータに近いローカル・モデルを特定し、グローバル・モデルとローカル・モデルの加重結果を合計することによって実行されます。 返される予測は次のように計算されます:
local_weight はユーザーが指定できるパラメータです。
|
fit_predict |
トレーニング・データを使用して、fit およびpredict メソッドを順番にコールします。
|
score |
指定されたデータのR平方統計を返します。 |
詳細は、「Oracle Spatial AI Python APIリファレンス」のGeographicalRegressorクラスを参照してください。
次の例では、la_median_house_values
データベース表への接続とともにhouses_full
SpatialDataFrame
を使用します。 この表には、ロサンゼルス市の住宅情報が含まれています。 この例では、houses_full
インスタンスが使用されます。
from oraclesai import SpatialDataFrame, DBSpatialDataset
import oml
houses_full = SpatialDataFrame.create(DBSpatialDataset(table='la_median_house_values', schema='oml_user'))
houses_full = houses_full.to_crs('epsg:3857')
次に、コードは次のステップを実行します:
- 回帰モデルのターゲット変数(
HOUSE_VALUE_MEDIAN
)および説明変数を定義します。 - データをトレーニングおよびテスト・セットに分割します。
- 空間重みを定義し、複数のランダム・フォレスト・リグレッサをローカルで実行する
GeographicalRegressor
のインスタンスを作成します。 predict
メソッドとscore
メソッドをコールして、テスト・セットのターゲット変数と、同じテスト・セットからのR平方統計を見積もります。
from oraclesai.preprocessing import spatial_train_test_split
from oraclesai.weights import SpatialWeights, KNNWeightsDefinition
from sklearn.ensemble import RandomForestRegressor
from oraclesai.regression import GeographicalRegressor
# Define explanatory variables
feature_columns = [
'BEDROOMS_TOTAL',
'EDU_LEVEL_SCORE_MEDIAN',
'POPULATION_DENSITY',
'ROOMS_TOTAL',
'COMPLETE_PLUMBING_PERC',
'COMPLETE_KITCHEN_PERC',
'HOUSE_AGE_MEDIAN',
'RENTED_PERC',
'UNITS_TOTAL'
]
# Define the target variable
target_column = 'HOUSE_VALUE_MEDIAN'
# Select a subset of columns
houses = houses_full[[target_column] + feature_columns]
# Remove rows with null values
houses = houses.dropna()
# Define the training and test sets
X_train, X_test, y_train, y_test, geom_train, geom_test = spatial_train_test_split(houses,
y=target_column,
test_size=0.33,
numpy_result=True,
random_state=32)
# Define the spatial weights
weights_definition = KNNWeightsDefinition(k=3)
train_weights = SpatialWeights.create(geom_train, weights_definition)
test_weights = SpatialWeights.create(geom_test, weights_definition)
# Create an instance of GeographicalRegressor
grf_model = GeographicalRegressor(model_cls=RandomForestRegressor, n_estimators=10, random_state=32)
# Train the model
grf_model.fit(X_train, geometries=geom_train, y=y_train, spatial_weights=train_weights)
# Print the predictions with the test set
grf_predictions_test = grf_model.predict(X_test, geometries=geom_test).flatten()
print(f"\n>> predictions (X_test):\n {grf_predictions_test[:10]}")
# Print the score with the test set
grf_r2_score = grf_model.score(X_test, y_test, geometries=geom_test)
print(f"\n>> r2_score (X_test):\n {grf_r2_score}")
プログラムの出力は次のとおりです:
>> predictions (X_test):
[622135. 422560. 426457.5 749530. 925412.5 469420. 526467.5 880195.
460922.5 421930. ]
>> r2_score (X_test):
0.6774993920744854