20

データを予測するために、ガウス過程回帰 (GPR) 操作にscikit Learn を使用しています。私のトレーニングデータは次のとおりです。

x_train = np.array([[0,0],[2,2],[3,3]]) #2-D cartesian coordinate points

y_train = np.array([[200,250, 155],[321,345,210],[417,445,851]]) #observed output from three different datasources at respective input data points (x_train)

平均と分散/標準偏差を予測する必要があるテスト ポイント (2-D) は次のとおりです。

xvalues = np.array([0,1,2,3])
yvalues = np.array([0,1,2,3])

x,y = np.meshgrid(xvalues,yvalues) #Total 16 locations (2-D)
positions = np.vstack([x.ravel(), y.ravel()]) 
x_test = (np.array(positions)).T

ここで、GPR ( GausianProcessRegressor) フィットを実行した後 (ここでは、ConstantKernel と RBF の積が のカーネルとして使用されGaussianProcessRegressorます)、次のコード行によって平均と分散/標準偏差を予測できます。

y_pred_test, sigma = gp.predict(x_test, return_std =True)

予測平均 ( y_pred_test) と分散 ( sigma) を出力しているときに、コンソールに次の出力が出力されます。

ここに画像の説明を入力

予測値 (平均) では、内部配列内に 3 つのオブジェクトを含む「ネストされた配列」が出力されます。内部配列は、各 2 次元テスト ポイント位置での各データ ソースの予測平均値であると推測できます。ただし、印刷された差異には、16 個のオブジェクト (おそらく 16 個のテスト位置ポイント) を持つ単一の配列のみが含まれています。分散が推定の不確実性を示していることはわかっています。したがって、各テスト ポイントでの各データ ソースの予測分散を期待していました。私の予想は間違っていますか?各テスト ポイントで各データ ソースの予測分散を取得するにはどうすればよいですか? 間違ったコードが原因ですか?

4

2 に答える 2

2

まず第一に、使用されるパラメーターが「シグマ」の場合、それは分散ではなく標準偏差を指しています (思い出してください、分散は標準偏差の 2 乗です)。

分散はデータ ポイントからセットの平均までのユークリッド距離として定義されるため、分散を使用して概念化する方が簡単です。

あなたの場合、一連の 2D ポイントがあります。これらを 2D 平面上の点と考えると、分散は各点から平均までの距離になります。分散の正の根となる標準偏差。

この場合、16 個のテスト ポイントと 16 個の標準偏差値があります。各テスト ポイントにはセットの平均値からの距離が独自に定義されているため、これは完全に理にかなっています。

ポイントのセットの分散を計算したい場合は、各ポイントの分散を個別に合計し、それをポイントの数で割ってから、平均二乗を差し引くことで計算できます。この数値の正の根は、セットの標準偏差になります。

補足: これは、挿入、削除、または置換によってセットを変更すると、すべてのポイントの標準偏差が変更されることも意味します。これは、新しいデータに対応するために平均が再計算されるためです。この反復プロセスは、k-means クラスタリングの背後にある基本的な力です。

于 2018-05-09T01:36:27.617 に答える