3

大きなファイル (行列 ~50k 行 X ~500 列) を取得し、それをデータセットとして使用してランダム フォレスト モデルをトレーニングするための Python スクリプトを作成しました。

私のスクリプトには 2 つの機能があります。1 つはデータセットをロードする機能、もう 1 つはそのデータを使用してランダム フォレスト モデルをトレーニングする機能です。これらはどちらも問題なく動作しますが、ファイルのアップロードには約 45 秒かかり、微妙に異なるモデルをトレーニングする (同じデータセットで多くのモデルをテストする) たびにこれを行うのは面倒です。ファイルアップロードコードは次のとおりです。

def load_train_data(train_file):
    # Read in training file
    train_f = io.open(train_file)
    train_id_list = []
    train_val_list = []
    for line in train_f:
        list_line = line.strip().split("\t")
        if list_line[0] != "Domain":
            train_identifier = list_line[9]
            train_values = list_line[12:]
            train_id_list.append(train_identifier)
            train_val_float = [float(x) for x in train_values]
            train_val_list.append(train_val_float)
    train_f.close()
    train_val_array = np.asarray(train_val_list)

    return(train_id_list,train_val_array)

これは、col を含む numpy 配列を返します。ラベルと列として9。12-end をメタデータとしてランダム フォレストをトレーニングします。

同じデータを使用してさまざまな形式のモデルをトレーニングするので、ファイルを 1 回アップロードして、ランダム フォレスト関数にフィードできるようにします。ファイルを私が思うオブジェクトにしたいです(私はpythonにかなり慣れていません)。

4

4 に答える 4

1

私が正しく理解している場合、データセットは変更されませんが、モデルパラメーターは変更され、実行ごとにパラメーターが変更されます。

ファイル ロード スクリプトを 1 つのファイルに入れ、これを Python インタープリターで実行します。次に、ファイルがロードされ、使用する変数とともにメモリに保存されます。

次に、モデル コードを含む別のファイルをインポートし、トレーニング データを引数として実行します。

すべてのモデルの変更を関数呼び出しのパラメーターとして決定できる場合は、モデルをインポートしてから、さまざまなパラメーター設定でトレーニング関数を呼び出すだけです。

実行間でモデル コードを変更する必要がある場合は、新しいファイル名で保存してそのファイルをインポートし、再度実行してソース データをそのファイルに送信します。

各モデルの変更を新しいファイル名で保存したくない場合は、Python のバージョンによってはリロード機能を使用できる場合がありますが、推奨されません (「コンソールから Python モジュールをリロードする適切な方法」を参照) 。

于 2015-06-23T22:55:55.673 に答える
0

最も簡単な方法は、次のように結果をキャッシュすることです。

_train_data_cache = {}
def load_cached_train_data(train_file):
  if train_file not in _train_data_cache:
    _train_data_cache[train_file] = load_train_data(train_file)
  return _train_data_cache[train_file]
于 2015-06-23T22:47:32.790 に答える