適応的空間回帰
AdaptiveSpatialRegressor
クラスは、データに適合する回帰アルゴリズムを検出する自動化されたアプローチで構成されます。 これは、使用するモデルがわからない場合に最適なアプローチです。
このアルゴリズムは、空間診断を取得するために、spatial_weights_definition
パラメータを指定してOLSRegressor
モデルをトレーニングします。 空間統計に基づき、回帰アルゴリズムを提案した。 このアルゴリズムを使用する場合は空間加重定義を指定する必要があります。指定しない場合、アルゴリズムはOLSRegressor
を推奨します。
次の図は、最適なアルゴリズムを選択するための現在のワークフローを示しています。
空間診断から、このアルゴリズムはMoranのI統計を取得します。 値が統計的に有意である場合、次のように解釈されます:
- MoranのI統計の正の値は、空間依存性または空間クラスタリングの存在を示し、この空間依存性を含むアルゴリズムが優先されます。 空間依存性を考慮する2つのアルゴリズムは、
SpatialLagRegressor
とSpatialErrorRegressor
です。 空間診断から取得したLagrange乗数に応じて、アルゴリズムはそれらのいずれかを選択します(空間回帰診断の詳細は、[ 3 ]を参照)。 - MoranのI統計が負の場合は、リージョンの分散または空間異方性が存在することを示し、
GWRRegressor
などのローカル・メソッドがより適しています。
MoranのI統計が統計的に重要ではなく、残余の変動が重要である場合、アルゴリズムはGWRRegressor
を選択します。
詳細は、「Oracle Spatial AI Python APIリファレンス」のSpatialAdaptiveRegressorクラスを参照してください。
次の例では、block_groups
SpatialDataFrame
およびSpatialAdaptiveRegressor
を使用して、トレーニング・セットからモデルをトレーニングします。 次に、テスト・セットを使用して、コードがターゲット変数を推定し、R平方メトリックを取得します。
%python
from oraclesai.preprocessing import spatial_train_test_split
from oraclesai.weights import KNNWeightsDefinition
from oraclesai.regression import SpatialAdaptiveRegressor
from oraclesai.pipeline import SpatialPipeline
from sklearn.preprocessing import StandardScaler
# Define target and explanatory variables
X = block_groups[['MEDIAN_INCOME', 'MEAN_AGE', 'MEAN_EDUCATION_LEVEL', 'HOUSE_VALUE', 'INTERNET', 'geometry']]
# Define training and test sets
X_train, X_test, _, _, _, _ = spatial_train_test_split(X, y="MEDIAN_INCOME", test_size=0.2, random_state=32)
# Define spatial weights
weights_definition = KNNWeightsDefinition(k=5)
# Create an instance of SpatialAdaptiveRegressor
spreg_model = SpatialAdaptiveRegressor(spatial_weights_definition=weights_definition)
# Add the model to a spatial pipeline along with a preprocessing step
spreg_pipeline = SpatialPipeline([('scale', StandardScaler()), ('spreg_regression', spreg_model)])
# Train the model
spreg_pipeline.fit(X_train, "MEDIAN_INCOME")
# Print the selected model
print(f">> Algorithm chosen: {spreg_pipeline.named_steps['spreg_regression'].model_type.__name__}")
# Print the predictions with the test set
spreg_predictions_test = spreg_pipeline.predict(X_test.drop("MEDIAN_INCOME")).flatten()
print(f"\n>> predictions (X_test):\n {spreg_predictions_test[:10]}")
# Print the score with the test set
spreg_r2_score = spreg_pipeline.score(X_test, "MEDIAN_INCOME")
print(f"\n>> r2_score (X_test):\n {spreg_r2_score}")
プログラムの出力は、SpatialAdaptiveRegressor
によって選択されたアルゴリズムの名前、テスト・セットの最初の10個の観測の予測、およびテスト・セットのR平方メトリックで構成されます。
> Algorithm chosen: ErrorModel
>> predictions (X_test):
[101563.4135695 105231.46019748 24081.18722085 38529.02025428
164280.78271333 50332.38349005 102590.59769969 27659.63416001
81911.84382123 17657.93225933]
>> r2_score (X_test):
0.6456845274014411