1

Python で作業しているランダム フォレストの実装に少し問題があります。念のため言っておきますが、Python は非常に効率的な数値計算を目的としていないことをよく知っています。この選択は、Python をより深く理解し、さらに経験を積みたいという欲求に基づいていました。「合理的」にするための解決策を見つけたいと思います。

そうは言っても、ここの誰かが私の実装に対してパフォーマンス改善の提案をしてくれるかどうか興味があります。プロファイラーで実行すると、リストの「追加」コマンドとデータセット分割操作の実行にほとんどの時間が費やされていることが明らかです。基本的に、マトリックス (むしろリストのリスト) として実装された大規模なデータセットがあります。そのデータセットを使用してデシジョン ツリーを作成しているので、情報ゲインが最も高い列に分割します。分割は、いくつかの条件に一致する行のみを含む 2 つの新しいデータセットを作成することで構成されます。新しいデータセットは、2 つの空の lista を初期化し、適切な行を追加することによって生成されます。

リストのサイズは事前にわからないので、事前に十分なリスト スペースを割り当て、最後にリストのサイズを更新することができない限り、それらを事前に割り当てることはできません (これはどこにも参照されていません)。 .

Pythonでこのタスクを処理するより良い方法はありますか?

4

1 に答える 1

1

最適化はコードに依存するプロセスであり、ケースバイケースで異なるため、コードを見ないと具体的な提案をするのは非常に困難です。ただし、まだいくつかの一般的な事項があります。

  1. アルゴリズムを見直して、ループの数を減らしてみてください。多くのループがあり、そのうちのいくつかは他のループに深く埋め込まれているようです (私は推測します)。
  2. 可能であれば、自分で作成した単純なコードの代わりに、itertools などの高性能ユーティリティ モジュールを使用してください。
  3. 興味がある場合は、PyPy ( http://pypy.org/ ) を試してください。これは Python のパフォーマンス指向の実装です。
于 2012-03-15T22:05:22.687 に答える