ディープラーニングニューラルネットワークによる予測区間

ディープラーニングニューラルネットワークによる予測区間

[[390133]]

予測区間は、回帰問題の予測における不確実性の尺度を提供します。

たとえば、95% の予測区間は、100 回のうち 95 回は、真の値が範囲の下限値と上限値の間に収まることを意味します。これは、不確実性区間の中心を表す可能性のある単純なポイント予測とは異なります。回帰予測モデリング問題におけるディープラーニングニューラルネットワークの予測区間を計算するための標準的な手法は存在しません。ただし、一連のモデルを使用して、大まかな予測間隔を推定することはできます。これにより、間隔を計算できるポイント予測の分布が提供されます。

このチュートリアルでは、ディープラーニング ニューラル ネットワークの予測区間を計算する方法を説明します。このチュートリアルを完了すると、次のことが分かります。

  • 予測区間は、回帰予測モデリングの問題に対する不確実性の尺度を提供します。
  • 標準的な回帰問題で単純な多層パーセプトロン ニューラル ネットワークを開発および評価する方法。
  • ニューラル ネットワーク モデルのアンサンブルを使用して予測区間を計算し、報告する方法。

チュートリアルの概要

このチュートリアルは、次の 3 つの部分に分かれています。

  • 予測区間
  • リカレントニューラルネットワーク
  • ニューラルネットワーク予測間隔

予測区間

通常、回帰問題(つまり、数値の予測)に使用される予測モデルは、ポイント予測を行います。つまり、単一の値を予測することはできますが、その予測の不確実性を示すものは提供できません。定義上、予測は推定値または近似値であり、ある程度の不確実性が含まれます。不確実性は、モデル自体のエラーと入力データのノイズから生じます。モデルは、入力変数と出力変数の関係を近似したものです。予測区間は、予測における不確実性を定量化したものです。結果変数の推定値の上限と下限の確率境界を提供します。

予測区間は、数量を予測する回帰モデルで予測や予想を行うときに最も一般的に使用される時間区間です。予測区間はモデルによって行われた予測を囲み、実際の結果の範囲をカバーすることが期待されます。予測区間全般の詳細については、チュートリアルを参照してください。

機械学習の予測区間:

https://machinelearningmastery.com/prediction-intervals-for-machine-learning/

予測区間について理解できたので、ニューラル ネットワークの区間を計算する方法について考えてみましょう。まず、回帰問題と、この問題を解決するためのニューラル ネットワーク モデルを定義します。

リカレントニューラルネットワーク

このセクションでは、回帰予測モデリングの問題とそれを解決するためのニューラル ネットワーク モデルを定義します。まず、標準的な回帰データセットを紹介しましょう。住宅データセットを使用します。住宅データセットは、13 個の数値入力変数と 1 つの数値ターゲット変数を含む 506 行のデータで構成される標準的な機械学習データセットです。

3 回の反復による層別 10 分割交差検証を繰り返したテスト ハーネスを使用すると、単純なモデルで約 6.6 の平均絶対誤差 (MAE) を達成できます。最高性能のモデルは、同じテスト ハーネスで約 1.9 の MAE を達成します。これにより、このデータセットの予想されるパフォーマンスの上限が提供されます。このデータセットは、米国ボストン市の住宅郊外の詳細な情報に基づいて住宅価格を予測したものです。

住宅データセット (housing.csv):

https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv

家の説明(家の名前):

https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.names

データセットをダウンロードする必要はありません。実例の一部として自動的にダウンロードされます。

次の例では、データセットを Pandas DataFrame としてダウンロードして読み込み、データセットの形状とデータの最初の 5 行の概要を示します。

  1. 負荷 住宅データセットを要約する
  2. pandasからread_csvをインポートする
  3. matplotlibからpyplotをインポートする
  4. #データセットをロード
  5. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'  
  6. データフレーム = read_csv(url, ヘッダー=なし)
  7. # 形状を要約する
  8. 印刷(データフレーム.shape)
  9. #最初の数行を要約する
  10. 印刷(データフレーム.head())

例を実行すると、506 行のデータと 13 個の入力変数、および 1 つの数値ターゲット変数 (合計 14 個) が確認されます。また、すべての入力変数が数値であることもわかります。

  1. (506、14)
  2. 0 1 2 3 4 5 ... 8 9 10 11 12 13
  3. 0 0.00632 18.0 2.31 0 0.538 6.575 ... 1 296.0 15.3 396.90 4.98 24.0
  4. 1 0.02731 0.0 7.07 0 0.469 6.421 ... 2 242.0 17.8 396.90 9.14 21.6
  5. 2 0.02729 0.0 7.07 0 0.469 7.185 ... 2 242.0 17.8 392.83 4.03 34.7
  6. 3 0.03237 0.0 2.18 0 0.458 6.998 ... 3 222.0 18.7 394.63 2.94 33.4
  7. 4 0.06905 0.0 2.18 0 0.458 7.147 ... 3 222.0 18.7 396.90 5.33 36.2
  8.   
  9. [5×14列]

次に、モデリング用のデータセットを準備します。まず、データセットを入力列と出力列に分割し、次に行をトレーニング データセットとテスト データセットに分割します。この場合、行の約 67% を使用してモデルをトレーニングし、残りの 33% の行を使用してモデルのパフォーマンスを推定します。

  1. #入力分割し  出力 価値観 
  2. x, y =[:,:-1]、[:,-1]
  3. #トレーニングセットテストセット分割
  4. X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67) です。

トレーニングとテストの分割の詳細については、次のチュートリアルを参照してください: 機械学習アルゴリズムを評価するためのトレーニングとテストの分割 次に、すべての入力列 (変数) を 0 ~ 1 の範囲にスケーリングします。これをデータ正規化と呼びます。これは、ニューラル ネットワーク モデルを操作するときに推奨される方法です。

  1. # 入力データのスケール
  2. スケーラー = MinMaxScaler()
  3. スケーラー.fit(X_train)
  4. X_train = スケーラー.transform(X_train)
  5. X_test = スケーラー.変換(X_test)

MinMaxScaler を使用して入力データを標準化する方法の詳細については、次のチュートリアルを参照してください: Python で StandardScaler および MinMaxScaler 変換を使用する方法:

https://machinelearningmastery.com/standardscaler-and-minmaxscaler-transforms-in-python/

モデリング用のデータの準備の完全な例を以下に示します。

  1. 負荷 そして モデリングのためのデータセットを準備する
  2. pandasからread_csvをインポートする
  3. sklearn.model_selectionからtrain_test_split をインポートします
  4. sklearn.preprocessingからMinMaxScaler をインポートします
  5. #データセットをロード
  6. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'  
  7. データフレーム = read_csv(url, ヘッダー=なし)
  8. =データフレーム.値 
  9. #入力分割し  出力 価値観 
  10. x, y =[:,:-1]、[:,-1]
  11. #トレーニングセットテストセット分割
  12. X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67) です。
  13. # 入力データのスケール
  14. スケーラー = MinMaxScaler()
  15. スケーラー.fit(X_train)
  16. X_train = スケーラー.transform(X_train)
  17. X_test = スケーラー.変換(X_test)
  18. # 要約
  19. 印刷(X_train.shape、X_test.shape、y_train.shape、y_test.shape)

例を実行すると、データセットが前と同じように読み込まれ、列が入力要素と出力要素に分割され、行がトレーニング セットとテスト セットに分割され、最後にすべての入力変数が [0,1] の範囲にスケーリングされます。トレーニング グラフとテスト セットの形状が印刷され、モデルのトレーニング用に 339 行、モデルの評価用に 167 行あることがわかります。

  1. (339、13) (167、13) (339、) (167、)

次に、データセット上で多層パーセプトロン (MLP) モデルを定義、トレーニング、評価します。 2 つの隠し層と数値を予測する出力層を持つ単純なモデルを定義します。 ReLU 活性化関数と「he」重み初期化を使用します。これは良い方法です。各隠し層のノード数は、試行錯誤の末に選択されました。

  1. # ニューラルネットワークモデルを定義する
  2. 特徴 = X_train.shape[1]
  3. モデル = シーケンシャル()
  4. モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
  5. モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
  6. モデル.add (密(1))

ほぼデフォルトの学習率と運動量値を持つ確率的勾配降下法の効率的な Adam バージョンを使用し、平均二乗誤差 (MSE) 損失関数 (回帰予測モデリング問題の標準) を使用してモデルを適合させます。

  1. # モデルをコンパイルし損失オプティマイザを指定します
  2. opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
  3. model.compile(オプティマイザー=opt, 損失= 'mse' )

Adam 最適化アルゴリズムの詳細については、次のチュートリアルを参照してください。

《Adam 勾配降下法の最適化をゼロからコーディングする》

https://machinelearningmastery.com/adam-optimization-from-scratch/

その後、モデルは 16 サンプルのバッチ サイズで 300 エポックに適合されます。この構成は、試行錯誤の末に選択されました。

  1. #トレーニングデータセットにモデルを適合させる
  2. model.fit(X_train、y_train、詳細=2、エポック=300、バッチサイズ=16)

バッチとエポックの詳細については、次のチュートリアルを参照してください。

ニューラルネットワークにおけるバッチとエポックの違い

https://machinelearningmastery.com/difference-between-a-batch-and-an-epoch/

最後に、モデルを使用してテスト データセットで予測を行い、予測値とテスト セットの期待値を比較して予測を評価し、モデルのパフォーマンスを測る有用な指標である平均絶対誤差 (MAE) を計算できます。

  1. #テストセット予測を行う 
  2. yhat = model.predict(X_test, 詳細=0)
  3. #予測平均誤差を計算する
  4. mae = 平均絶対誤差(y_test, yhat)
  5. print( 'MAE: %.3f' % mae)

完全な例は次のとおりです。

  1. #住宅回帰データセット多層パーセプトロンニューラルネットワークをトレーニングして評価する
  2. pandasからread_csvをインポートする
  3. sklearn.model_selectionからtrain_test_split をインポートします
  4. sklearn.metricsからmean_absolute_errorをインポートします
  5. sklearn.preprocessingからMinMaxScaler をインポートします
  6. tensorflow.keras.modelsからSequential をインポートします
  7. tensorflow.keras.layersからDense をインポートします
  8. tensorflow.keras.optimizersからAdam をインポートします
  9. #データセットをロード
  10. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'  
  11. データフレーム = read_csv(url, ヘッダー=なし)
  12. =データフレーム.値 
  13. #入力分割し  出力 価値観 
  14. x, y =[:, :-1]、[:,-1]
  15. #トレーニングセットテストセット分割
  16. X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
  17. # 入力データのスケール
  18. スケーラー = MinMaxScaler()
  19. スケーラー.fit(X_train)
  20. X_train = スケーラー.transform(X_train)
  21. X_test = スケーラー.変換(X_test)
  22. # ニューラルネットワークモデルを定義する
  23. 特徴 = X_train.shape[1]
  24. モデル = シーケンシャル()
  25. モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
  26. モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
  27. モデル.add (密(1))
  28. # モデルをコンパイルし損失オプティマイザを指定します
  29. opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
  30. model.compile(オプティマイザー=opt, 損失= 'mse' )
  31. #トレーニングデータセットにモデルを適合させる
  32. model.fit(X_train、y_train、詳細=2、エポック=300、バッチサイズ=16)
  33. #テストセット予測を行う 
  34. yhat = model.predict(X_test, 詳細=0)
  35. #予測平均誤差を計算する
  36. mae = 平均絶対誤差(y_test, yhat)
  37. print( 'MAE: %.3f' % mae)

例を実行すると、データセットが読み込まれて準備され、トレーニング データセットで MLP モデルが定義されて適合され、テスト セットでそのパフォーマンスが評価されます。

注意: アルゴリズムや評価手順の確率的特性、または数値精度の違いにより、結果が異なる場合があります。例を複数回実行し、平均結果を比較することを検討してください。

この場合、モデルは平均絶対誤差が約 2.3 を達成していることがわかります。これは、単純なモデルよりも優れており、最良のモデルに近い値です。

モデルをさらに調整することで最適なパフォーマンスに近づくことは間違いありませんが、予測区間の調査にはこれで十分です。

  1. エポック 296/300
  2. 22/22 - 0s - 負け: 7.1741
  3. エポック 297/300
  4. 22/22 - 0s - 負け: 6.8044
  5. エポック 298/300
  6. 22/22 - 0s - 負け: 6.8623
  7. エポック 299/300
  8. 22/22 - 0s - 負け: 7.7010
  9. エポック 300/300
  10. 22/22 - 0s - 負け: 6.5374
  11. 前払費用: 2.300

次に、住宅データセットで MLP モデルを使用して予測区間を計算する方法を見てみましょう。

ニューラルネットワーク予測間隔

このセクションでは、前のセクションで開発した回帰問題とモデルを使用して予測区間を作成します。

予測区間の計算が簡単な線形回帰などの線形手法と比較すると、ニューラル ネットワークなどの非線形回帰アルゴリズムの予測区間の計算は困難です。標準的な技術はありません。ニューラル ネットワーク モデルの有効な予測区間を計算する方法は多数あります。さらに詳しく知るには、「さらに読む」セクションにリストされている論文のいくつかを読むことをお勧めします。

このチュートリアルでは、拡張の余地がたくさんある非常にシンプルなアプローチを使用します。これを「手っ取り早い」と呼ぶのは、計算が速くて簡単だが、一定の制限があるからです。複数の最終モデル(例:10 ~ 30)をフィッティングする必要があります。次に、アンサンブル メンバーからのポイント予測の分布を使用して、ポイント予測と予測間隔を計算します。

たとえば、ポイント予測をアンサンブル メンバーからのポイント予測の平均として取り、95% 予測区間をその平均からの 1.96 標準偏差としてとらえることができます。これは単純なガウス予測区間ですが、ポイント予測の最小値や最大値などの代替手段を使用することもできます。あるいは、ブートストラップ手法を使用して、各アンサンブル メンバーを異なるブートストラップ サンプルでトレーニングし、ポイント予測の 2.5 パーセンタイルおよび 97.5 パーセンタイルを予測区間として使用することもできます。

ブートストラップ方式の詳細については、チュートリアルを参照してください。

《ブートストラップ法の簡単な紹介》

https://machinelearningmastery.com/a-gentle-introduction-to-the-bootstrap-method/

これらの拡張は演習として残されており、ここでは単純なガウス予測区間に固執します。

前のセクションで定義したトレーニング データセットがデータセット全体であり、このデータセット全体で 1 つ以上の最終モデルをトレーニングしていると仮定します。その後、テスト セットの予測区間を使用して予測を行い、将来の区間の有効性を評価できます。

前のセクションで開発した要素を関数に分割することで、コードを簡素化できます。まず、URL で定義された回帰データセットを読み込んで準備する関数を定義しましょう。

  1. 負荷 そして データセットを準備する
  2. def load_dataset(url):
  3. データフレーム = read_csv(url, ヘッダー=なし)
  4. =データフレーム.値 
  5. #入力分割し  出力 価値観 
  6. x, y =[:, :-1]、[:,-1]
  7. #トレーニングセットテストセット分割
  8. X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
  9. # 入力データのスケール
  10. スケーラー = MinMaxScaler()
  11. スケーラー.fit(X_train)
  12. X_train = スケーラー.transform(X_train)
  13. X_test = スケーラー.変換(X_test)
  14. X_train、X_test、y_train、y_testを返す

次に、トレーニング データセットを指定して MLP モデルを定義およびトレーニングし、予測を行うのに適した適合モデルを返す関数を定義できます。

  1. #モデルを定義し適合する
  2. def fit_model(X_train, y_train):
  3. # ニューラルネットワークモデルを定義する
  4. 特徴 = X_train.shape[1]
  5. モデル = シーケンシャル()
  6. モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
  7. モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
  8. モデル.add (密(1))
  9. # モデルをコンパイルし損失オプティマイザを指定します
  10. opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
  11. model.compile(オプティマイザー=opt, 損失= 'mse' )
  12. #トレーニングデータセットにモデルを適合させる
  13. model.fit(X_train、y_train、詳細=0、エポック=300、バッチサイズ=16)
  14. リターンモデル

ポイント予測には複数のモデルが必要であり、これらのモデルによって、間隔を推定できるポイント予測の分布が定義されます。

したがって、トレーニング データセットに複数のモデルを適合させる必要があります。異なる予測を行うには、各モデルが異なっている必要があります。これは、確率性、ランダムな初期重み、および確率的勾配降下法最適化アルゴリズムを使用して MLP モデルをトレーニングすることで実現されます。モデルの数が多いほど、モデルのパワーを推定するポイント予測の精度が高まります。少なくとも 10 個のモデルを推奨します。30 個を超えると、あまりメリットが得られないでしょう。以下の関数は、モデルのアンサンブルを適合させ、返されたリストに格納します。興味深いことに、各適合モデルはテスト セットでも評価され、各モデルの適合後に報告されます。保留されたテスト セットにおける各モデルの推定パフォーマンスは若干異なることが予想され、報告されたスコアはこの予想を確認するのに役立ちます。

  1. #モデルアンサンブルを適合する
  2. fit_ensembleを定義します(n_members、X_train、X_test、y_train、y_test):
  3. アンサンブル = リスト()
  4. iが範囲(n_members)の場合:
  5. #トレーニングセットモデルを定義し適合させる 
  6. モデル = fit_model(X_train, y_train)
  7. #テストセットモデルを評価する 
  8. yhat = model.predict(X_test, 詳細=0)
  9. mae = 平均絶対誤差(y_test, yhat)
  10. print( '>%d, MAE: %.3f' % (i+1, mae))
  11. # モデルを保存する
  12. ensemble.append(モデル)
  13. リターンアンサンブル

最後に、トレーニングされたモデルのアンサンブルを使用してポイント予測を行うことができます。これは予測区間として要約できます。

以下の関数はこれを実現します。まず、各モデルは入力データに対してポイント予測を行い、次に 95% 予測区間を計算して、区間の下限値、平均値、上限値を返します。

この関数は、1 行を入力として受け取るように設計されていますが、複数の行に簡単に適応できます。

  1. #アンサンブル予測を行い予測区間を計算する
  2. def predict_with_pi(アンサンブル, X):
  3. # 予測する
  4. yhat = [model.predict(X, verbose=0) アンサンブル内のモデルの場合]
  5. yhat = asarray(yhat)
  6. # 95% ガウス予測区間を計算する
  7. 間隔 = 1.96 * yhat.std()
  8. 下限上限= yhat.mean() - 間隔、yhat.mean() + 間隔
  9. 戻る 下限、yhat.mean()、上限 

最後に、これらの関数を呼び出すことができます。まず、データセットが読み込まれて準備され、次にアンサンブルが定義されてフィッティングされます。

  1. #データセットをロード
  2. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'  
  3. X_train、X_test、y_train、y_test = load_dataset(url)
  4. # フィットアンサンブル
  5. n_メンバー = 30
  6. アンサンブル = fit_ensemble(n_members、X_train、X_test、y_train、y_test)

次に、テスト セットの行を使用して、予測間隔を使用して予測を行い、結果を報告できます。

また、予測区間でカバーされると予想される期待値も報告します (おそらく 95% に近い値ですが、完全に正確ではありませんが、おおよその近似値です)。

  1. #予測区間予測する
  2. 新しいX = asarray([X_test[0, :]])
  3. 下限、平均、上限= predict_with_pi(ensemble, newX)
  4. print( 'ポイント予測: %.3f' % 平均)
  5. print( '95%% 予測区間: [%.3f, %.3f]' % (下限,上限))
  6. print( '真の値: %.3f' % y_test[0])

以上を踏まえて、ここでは多層パーセプトロン ニューラル ネットワークを使用した予測区間による予測の完全な例を示します。

  1. #住宅回帰データセットにおけるmlps予測区間
  2. NumPyからasarrayをインポート
  3. pandasからread_csvをインポートする
  4. sklearn.model_selectionからtrain_test_split をインポートします
  5. sklearn.metricsからmean_absolute_errorをインポートします
  6. sklearn.preprocessingからMinMaxScaler をインポートします
  7. tensorflow.keras.modelsからSequential をインポートします
  8. tensorflow.keras.layersからDense をインポートします
  9. tensorflow.keras.optimizersからAdam をインポートします
  10.   
  11. 負荷 そして データセットを準備する
  12. def load_dataset(url):
  13. データフレーム = read_csv(url, ヘッダー=なし)
  14. =データフレーム.値 
  15. #入力分割し  出力 価値観 
  16. x, y =[:, :-1]、[:,-1]
  17. #トレーニングセットテストセット分割
  18. X_train、X_test、y_train、y_test = train_test_split(X、y、train_size=0.67、random_state=1)
  19. # 入力データのスケール
  20. スケーラー = MinMaxScaler()
  21. スケーラー.fit(X_train)
  22. X_train = スケーラー.transform(X_train)
  23. X_test = スケーラー.変換(X_test)
  24. X_train、X_test、y_train、y_testを返す
  25.   
  26. #モデルを定義し適合する
  27. def fit_model(X_train, y_train):
  28. # ニューラルネットワークモデルを定義する
  29. 特徴 = X_train.shape[1]
  30. モデル = シーケンシャル()
  31. モデルを追加します(Dense(20, kernel_initializer= 'he_normal' 、 activation= 'relu' 、 input_dim=features))
  32. モデルを追加します(Dense(5, kernel_initializer= 'he_normal' 、 activation= 'relu' ))
  33. モデル.add (密(1))
  34. # モデルをコンパイルし損失オプティマイザを指定します
  35. opt = Adam(学習率=0.01、ベータ1=0.85、ベータ2=0.999)
  36. model.compile(オプティマイザー=opt, 損失= 'mse' )
  37. #トレーニングデータセットにモデルを適合させる
  38. model.fit(X_train、y_train、詳細=0、エポック=300、バッチサイズ=16)
  39. リターンモデル
  40.   
  41. #モデルアンサンブルを適合する
  42. fit_ensembleを定義します(n_members、X_train、X_test、y_train、y_test):
  43. アンサンブル = リスト()
  44. iが範囲(n_members)の場合:
  45. #トレーニングセットモデルを定義し適合させる 
  46. モデル = fit_model(X_train, y_train)
  47. #テストセットモデルを評価する 
  48. yhat = model.predict(X_test, 詳細=0)
  49. mae = 平均絶対誤差(y_test, yhat)
  50. print( '>%d, MAE: %.3f' % (i+1, mae))
  51. # モデルを保存する
  52. ensemble.append(モデル)
  53. リターンアンサンブル
  54.   
  55. #アンサンブル予測を行い予測区間を計算する
  56. def predict_with_pi(アンサンブル, X):
  57. # 予測する
  58. yhat = [model.predict(X, verbose=0) アンサンブル内のモデルの場合]
  59. yhat = asarray(yhat)
  60. # 95% ガウス予測区間を計算する
  61. 間隔 = 1.96 * yhat.std()
  62. 下限上限= yhat.mean() - 間隔、yhat.mean() + 間隔
  63. 戻る 下限、yhat.mean()、上限 
  64.   
  65. #データセットをロード
  66. url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv'  
  67. X_train、X_test、y_train、y_test = load_dataset(url)
  68. # フィットアンサンブル
  69. n_メンバー = 30
  70. アンサンブル = fit_ensemble(n_members、X_train、X_test、y_train、y_test)
  71. #予測区間予測する
  72. 新しいX = asarray([X_test[0, :]])
  73. 下限、平均、上限= predict_with_pi(ensemble, newX)
  74. print( 'ポイント予測: %.3f' % 平均)
  75. print( '95%% 予測区間: [%.3f, %.3f]' % (下限,上限))
  76. print( '真の値: %.3f' % y_test[0])

例を実行すると、各アンサンブル メンバーが順番に適合され、保留されたテスト セットでの推定パフォーマンスが報告されます。最後に、予測区間による予測が作成され、予測されます。

注意: アルゴリズムや評価手順の確率的特性、または数値精度の違いにより、結果が異なる場合があります。例を複数回実行し、平均結果を比較することを検討してください。

この場合、各モデルのパフォーマンスがわずかに異なることがわかり、モデルが実際に異なるという予想が裏付けられます。

最後に、アンサンブルは95%予測区間[26.287, 34.822]で約30.5のポイント予測を行うことがわかります。また、真の値は 28.2 であり、間隔がこの値を捉えていることもわかります。これは非常に良好です。

  1. >1、MAE: 2.259
  2. >2、MAE: 2.144
  3. >3、MAE: 2.732
  4. >4、MAE: 2.628
  5. >5、MAE: 2.483
  6. >6、MAE: 2.551
  7. >7、MAE: 2.505
  8. >8、MAE: 2.299
  9. >9、MAE: 2.706
  10. >10、MAE: 2.145
  11. >11、MAE: 2.765
  12. >12、MAE: 3.244
  13. >13、MAE: 2.385
  14. >14、MAE: 2.592
  15. >15、MAE: 2.418
  16. >16、MAE: 2.493
  17. >17、MAE: 2.367
  18. >18、MAE: 2.569
  19. >19、MAE: 2.664
  20. >20、MAE: 2.233
  21. >21、MAE: 2.228
  22. >22、MAE: 2.646
  23. >23、MAE: 2.641
  24. >24、M​​AE: 2.492
  25. >25、MAE: 2.558
  26. >26、MAE: 2.416
  27. >27、MAE: 2.328
  28. >28、MAE: 2.383
  29. >29、MAE: 2.215
  30. >30、MAE: 2.408
  31. ポイント予想: 30.555
  32. 95%予測区間: [26.287, 34.822]
  33. 真の値: 28.200

真の値: 28.200

<<:  Java プログラミング スキル - データ構造とアルゴリズム「バイナリ ソート ツリー」

>>:  人工知能技術の到来。デジタル変革をどう理解するか?

ブログ    
ブログ    
ブログ    

推薦する

量子コンピューティングと人工知能の関係は何ですか?

量子コンピューティングは、学術誌だけでなく、一般の新聞や雑誌でも頻繁に議論される、非常に人気の高いト...

アリババがAIを使ってカップルをテスト:ルー・ハンとグアン・シャオトンのテストスコアは笑える

近年、人工知能技術の発展は急速ですが、敷居が高すぎるという人も多くいます。AI技術に関する報道を見る...

ピリパインテリジェントファイナンス&タックス2018エンタープライズサービス+ウィズダムフォーラムが成功裏に終了

ピリパ・インテリジェンス・アンド・タックスが主催する2018年企業サービス+ウィズダムフォーラムが、...

人工知能は希少疾患を患う4億人の患者がより効果的な診断を受けるのに役立っている

[[284630]] ▲人工知能は数百万の遺伝子変異を高速で検索し、希少疾患の原因を特定することがで...

これらの 10 個のオープンソース機械学習ツールを使用したことがありますか?

機械学習開発者として、あなたは多くの機械学習リソースに遭遇したことがあるかもしれません。今日は、オー...

最も人気のある 15 の機械学習フレームワークのうち、いくつ知っていますか?

機械学習エンジニアは、製品の開発やアルゴリズムの構築を行うチームの重要なメンバーです。データの専門家...

パラメータは最大2兆個、GPT-4をはるかに超える!アマゾンの新型オリンパス大型モデルが公開、近日発表予定

大きなモデルの波から遠ざかっていたように見えるAmazonが、ついに最新の進捗状況を発表することにな...

...

AppleがAI研究成果を公開、マルチモーダルLLMモデルFerretをリリース

IT Homeは12月25日、Appleがコロンビア大学の研究者らと協力して2023年10月にオープ...

...

Python か Java か? 2020年、優秀なプログラマーが習得すべき7つのプログラミング言語

どのプログラミング言語が最適ですか?この質問には答えがないかもしれません。人によって好みは異なります...

人工知能ガバナンスには「人工知能」の有効活用が必要

最近では、営業所での顔認証が標準装備になったというニュースが話題となり、個人情報セキュリティの問題が...

データ構造とアルゴリズム: 最小全域木、数秒で理解できます!

[[426679]]序文データ構造とアルゴリズムのグラフ理論において、最小全域木アルゴリズムは、比...

ディープ ニューラル ネットワークを構築するための 20 の「未熟な」ヒント

当社の機械学習ラボでは、数多くの高性能マシンで何万時間ものトレーニングを行って豊富な経験を蓄積してき...

2021年に注目すべき5つのAIトレンド

[[392513]] 2020年にCOVID-19が世界的に猛威を振るう中、人々は人工知能技術の助け...