missForest 関数を適切に並列化するのは少し難しいです。それを行うには2つの基本的な方法があるようです:
- randomForest モデル オブジェクトを並行して作成します。
- NA を含むデータ フレームの列ごとに、複数の randomForest 操作 (モデルの作成と予測) を並行して実行します。
方法 1 はかなり簡単に実装できますが、randomForestcombine
関数では推定誤差が計算されないため、自分で推定誤差を計算する必要があります。ただし、randomForest オブジェクトの計算にそれほど時間がかからず、NA を含む列が多数ある場合は、集計操作の計算に長い時間がかかる場合でも、速度が向上する可能性はほとんどありません。
xmis
方法 2 は、 randomForest 操作のたびにシーケンシャル アルゴリズムがデータ フレームの列を更新するため、実装が少し難しくなります。n
これを並列化する正しい方法は、一度に列を並列に処理することだと思います(n
ワーカー プロセスの数はどこですか)。したがってn
、データ フレームのすべての列を処理するには、列の周りに別のループが必要です。私の実験では、これが行われない限り、外側のループの収束に時間がかかり、並列実行の利点が失われることが示唆されています。
一般に、パフォーマンスを向上させるには、これらの両方の方法を実装し、入力データに基づいてどちらを使用するかを選択する必要があります。NA を持つ列がいくつかあるだけで、randomForest モデルの計算に時間がかかる場合は、方法 1 を選択する必要があります。外側の while ループの余分な反復が必要になる可能性はありますが、これはより効率的に実行できるため、計算にかかる時間は短縮されます。
missForest を試す過程で、最終的にパッケージの並列バージョンを開発しました。library.R の修正版をGitHub Gistに置きましたが、特にドキュメントがなければ、その形式で使用するのは簡単ではありません。そこで、missForest の作成者に連絡を取りました。彼は、私の変更の少なくとも一部を公式パッケージに組み込むことに非常に関心を持っているので、CRAN に投稿される次のバージョンの missForest で並列実行がサポートされることを願っています。