0

トレーニング セットは、サンプルのセットとサンプルごとに 1 つのラベルのセットから作成されます。私の場合、サンプルはベクトルですが、ラベルはスカラーです。これに対処するために、Numpy を使用します。次の例を検討してください。

samples = np.array([[1,0],[0.2,0.5], [0.3,0.8]])
labels = np.array([1,0,0])

ここで、要素をシャッフルする 2 つのパーティションにトレーニング セットを分割する必要があります。この事実は問題を提起します: 私はラベルとの対応を失います. どうすればこれを解決できますか?

私のプロジェクトではパフォーマンスが重要であるため、順列ベクトルを構築したくないので、ラベルをサンプルにバインドする方法を探しています。今では私の解決策は、サンプル配列の最後の列を次のようにラベルとして使用することです。

samples_and_labels = np.array([[1,0,0],[0.2,0.5,0], [0.3,0.8,1]])

これは私の場合の最速の解決策ですか? それとも他に良いものはありますか?たとえば、ペアを作成しますか?

4

2 に答える 2

1

インデックスとfloatデータ型が混在していると、不安になります。トレーニングセットを分割すると言うとき、これは完全にランダムですか?もしそうなら、私はランダム置換ベクトルを使用します-samples_and_labels配列を作成するときにまだメモリを割り当てているので、(データ型の予約がなくても)ソリューションがこれ以上速くなるとは思いません。

次のようなことができます(len(samples)説明を簡単にするためでもあると仮定します)。

# set n to len(samples)/2
ind = np.hstack((np.ones(n, dtype=np.bool), np.zeros(n, dtype=np.bool)))
# modifies in-place, no memory allocation
np.random.shuffle(ind)

そして、あなたはすることができます

samples_left, samples_right = samples[ind], samples[ind == False]
labels_left, labels_right = labels[ind], labels[ind == False]

と電話

np.random.shuffle(ind)

新しい分割が必要なときはいつでも

于 2013-03-15T17:04:51.030 に答える
0

numpy がなければ、それほど速くないかもしれません。シャッフルのパフォーマンスを向上させるために、「random」だけでなく「_random」をインポートしてみてください。

import random

samples = [[1,0],[0.2,0.5], [0.3,0.8]]
labels = [1,0,0]

print(samples, '\n', labels)

z = list(zip(samples, labels))
random.shuffle(z)

samples, labels = zip(*z)

print(samples, '\n', labels)
于 2013-03-15T17:36:52.300 に答える