空間計算機
SpatialImputer
クラスを使用すると、ネイバーのデータを使用して観測の欠落値を埋めることができます。
トブラーの法則によれば、遠いものよりも近いものが関係しています。 そのため、空間重みを利用して欠落値をコンピュートすることが目標です。
次の表に、SpatialImputer
クラスのパラメータを示します。
パラメータ | 説明 |
---|---|
spatial_weights_definition |
近隣のロケーション間の関係を定義します。 隣人から情報を取得する必要があります。 |
missing_values |
missing_values のすべての出現がインプットされます
|
strategy |
デフォルトでは、SpatialImputer は" mean"を使用して欠落値を入力します。 つまり、隣接する観測値からの加重平均によって、欠落した値が置き換えられます。 その他のオプションは、「中央値」、maximum、およびminimumです。
|
SpatialImputer
クラスはトランスフォーマで、その主なメソッドを次の表に示します。
メソッド | 説明 |
---|---|
fit |
トレーニング・データから空間ラグを計算します。 |
transform |
指定されたstrategy に従って渡されるデータ・パラメータを持つNumPy配列を返します。 use_fit_lag パラメータを定義して、トレーニング・セットからネイバーを使用するかどうかを決定します。
|
fit_transform |
トレーニング・データを使用して、fit およびtransform メソッドを順番にコールします。
|
詳細は、「Oracle Spatial AI Python APIリファレンス」のSpatialImputerクラスを参照してください。
次の例では、前に作成したblock_groups
SpatialDataFrame
を使用して、次のことを実行します:
INTERNET
列に欠落値を追加します。- K-Nearest Neighborsメソッドを使用して、空間ウェイトを定義します。
- SpatialImputerのfit_transformメソッドをコールして、トレーニング・セットの欠損値を入力します。
ターゲット列( MEDIAN_INCOME
)および列ジオメトリは、出力の一部ではないことに注意してください。
import random
import numpy as np
from oraclesai import GeoDataFrameDataset
from oraclesai.preprocessing import SpatialImputer
from oraclesai.weights import KNNWeightsDefinition
random.seed(32)
block_groups_missing_df = block_groups.as_geodataframe()
# Assign missing values randomly to the internet column
ix = [row for row in range(block_groups.shape[0])]
for row in random.sample(ix, int(round(.1*len(ix)))):
block_groups_missing_df.loc[row, "INTERNET"] = np.nan
# Create a SpatialDataFrame with the data containing missing values
block_groups_missing_pdf = SpatialDataFrame.create(GeoDataFrameDataset(block_groups_missing_df))
# Define the variables of the model
X = block_groups_missing_pdf[["MEDIAN_INCOME", "MEAN_AGE", "HOUSE_VALUE", "INTERNET", "geometry"]]
# Define the spatial weights
weights_definition = KNNWeightsDefinition(k=10)
# Print the total number of missing values
print(f"Missing Values Before Imputation = {np.sum(np.isnan(X.get_values()))}")
# Create an instance of SpatialImputer
spatial_imputer = SpatialImputer(missing_values=np.nan, spatial_weights_definition=weights_definition)
# Fill the missing values of the training data
X_imputed = spatial_imputer.fit_transform(X, y="MEDIAN_INCOME")
# Print the total number of missing values (0 is expected)
print(f"Missing Values After Imputation = {np.sum(np.isnan(X_imputed))}")
結果の出力には、インピュテーションの前後の欠落値の数が表示されます。
Missing Values Before Imputation = 344
Missing Values After Imputation = 0