2016-07-12 4 views
0

ich einen zufälligen Zustand mit einem festen Samen habe ich bin mit meinen prädiktive Ergebnisse wiederholbar zu machen:kann nicht eine zufällige Anordnung von kategorischen Etikett erzeugen

rng = np.random.RandomState(101) 
len(finalTestSentences) = 500 

Ich versuche, diese Samen zu verwenden, um ein Array zu erzeugen von zufälligen kategorischen Variablen unter Verwendung einer einzigartigen Liste von Möglichkeiten. Hier ist ein Beispiel (I verwendet set auf meine Ausbildung Etiketten die einzigartigen Etiketten zu erzeugen, ich habe):

unique_train_labels = set([u'bla', u'blee', u'blu', u'ma']) 

ich dann tun:

categorical_random = np.array[rng.choice(unique_train_labels, len(finalTestSentences))] 

Aber ich bin immer:

categorical_random = np.array[rng.choice(unique_train_labels, len(finalTestSentences))] 
    File "mtrand.pyx", line 1072, in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:11545) 
ValueError: a must be 1-dimensional or an integer 

Beachten Sie, das war von dieser Problemumgehung here

Was schief läuft und Wie kann ich mein Ziel erreichen?

+2

Es ist nicht einen Satz zu akzeptieren. Sie können es in eine Liste konvertieren, sobald Sie die eindeutigen bekommen 'rng.choice (list (unique_train_labels), len (finalTestSentences))' – ayhan

+0

@ayhan, die es gelöst hat - Ich wusste nicht, dass Sie kein einzigartiges Set benötigen Als Eingabe können Sie sogar eine nicht eindeutige Liste für "random.choice" nehmen. –

+0

Ich bin mir über die Implementierung nicht sicher. Das könnte zu einer Verzerrung der uneinheitlichen führen (wenn sie häufiger vorkommen). Lass es mich versuchen. – ayhan

Antwort

0

Wenn Sie bei der Definition von np.random.choice anschauen, werden Sie sehen, dass a, die Bevölkerung zu einem numpy Array umgewandelt wird durch

a = np.array(a, copy=False) 

Wenn ein ein Satz ist, ist die Umwandlung ein wenig anders. Zum Beispiel gibt np.array([1, 2, 3]) ein Array mit drei Elementen: array([1, 2, 3]) aber np.array({1, 2, 3}) gibt ein Array mit einem einzelnen Element, wo das Element eine Menge ist. Aufgrund des Dimensionsproblems löst numpy den ValueError aus.

Um zu vermeiden, dass Sie entweder Ihren Satz auf eine Liste mit umwandeln kann:

rng.choice(list(unique_train_labels), len(finalTestSentences)) 

oder direkt verwenden np.unique die einzigartigen Labels zu erhalten:

rng.choice(np.unique([u'bla', u'blee', u'blu', u'ma']), len(finalTestSentences)) 
Verwandte Themen