2016-05-31 1 views
0

Ich versuche, einen Entscheidungsbaum an Matrizen von Features und Labels anzupassen. Hier ist mein Code:ValueError: Festlegen eines Array-Elements mit einer Sequenz mit Entscheidungsbaum, in dem alle Zeilen die gleichen Elemente haben?

print FEATURES_DATA[0] 
print "" 
print TARGET[0] 
print "" 
print np.unique(list(map(len, FEATURES_DATA[0]))) 

die folgende Ausgabe gibt:

[ array([[3, 3, 3, ..., 7, 7, 7], 
     [3, 3, 3, ..., 7, 7, 7], 
     [3, 3, 3, ..., 7, 7, 7], 
     ..., 
     [2, 2, 2, ..., 6, 6, 6], 
     [2, 2, 2, ..., 6, 6, 6], 
     [2, 2, 2, ..., 6, 6, 6]], dtype=uint8)] 

[ array([[31], 
     [31], 
     [31], 
     ..., 
     [22], 
     [22], 
     [22]], dtype=uint8)] 

[463511] 

Die Matrix enthält tatsächlich 463.511 Proben.

Danach laufe ich den folgenden Block:

from sklearn.tree import DecisionTreeClassifier 
for i in xrange(5): 
    Xtrain=FEATURES_DATA[i] 
    Ytrain=TARGET[i] 
    clf=DecisionTreeClassifier() 
    clf.fit(Xtrain,Ytrain) 

, die mir die folgende Störung gibt:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-4-3d8b2a7a3e5f> in <module>() 
     4  Ytrain=TARGET[i] 
     5  clf=DecisionTreeClassifier() 
----> 6  clf.fit(Xtrain,Ytrain) 

C:\Users\singhg2\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\tree\tree.pyc in fit(self, X, y, sample_weight, check_input, X_idx_sorted) 
    152   random_state = check_random_state(self.random_state) 
    153   if check_input: 
--> 154    X = check_array(X, dtype=DTYPE, accept_sparse="csc") 
    155    if issparse(X): 
    156     X.sort_indices() 

C:\Users\singhg2\AppData\Local\Enthought\Canopy\User\lib\site-packages\sklearn\utils\validation.pyc in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 
    371          force_all_finite) 
    372  else: 
--> 373   array = np.array(array, dtype=dtype, order=order, copy=copy) 
    374 
    375   if ensure_2d: 

ValueError: setting an array element with a sequence. 

ich andere Beiträge auf SO gesucht und gefunden, dass die meisten Antworten waren, dass die Matrizen waren nicht vollständig Zahlen, oder das Array unterscheidet sich in der Länge über Samples. Aber das ist bei meinem Problem nicht der Fall?

Irgendwelche Hilfe?

Antwort

2

wenn print FEATURES_DATA[0] tatsächlich

druckt
[ array([[3, 3, 3, ..., 7, 7, 7], 
     [3, 3, 3, ..., 7, 7, 7], 
     [3, 3, 3, ..., 7, 7, 7], 
     ..., 
     [2, 2, 2, ..., 6, 6, 6], 
     [2, 2, 2, ..., 6, 6, 6], 
     [2, 2, 2, ..., 6, 6, 6]], dtype=uint8)] 

dann das Problem, dass FEATURES_DATA [0] ist eine Python-Liste mit einem numpy Array in seinem Inneren. (Sie können verstehen, dass aus dem [ und ])

Sie können die erste Option (und nur) Element der Liste, um es zu beheben

from sklearn.tree import DecisionTreeClassifier 
for i in xrange(5): 
    Xtrain=FEATURES_DATA[i][0] 
    Ytrain=TARGET[i][0] 
    clf=DecisionTreeClassifier() 
    clf.fit(Xtrain,Ytrain) 
+0

Das in der Tat das Problem löst. Aber wie wäre es mit der Größe des Trainingssatzes? z.B. etwas in dieser Zeile: Xtrain = Xtrain.append (FEATURES_DATA [i] [0]) – GKS

+0

Wenn Sie einfach die Größe Xtrain verdoppeln wollen, indem Sie es mit Duplikaten füllen, können Sie 'Xtrain = numpy.concatenate ((Xtrain, Xtrain))' 'machen –

+0

Nicht die Größe zu verdoppeln, sondern ich möchte Xtrain mit jeder Iteration wachsen. Für die erste Iteration sollte es FEATURES_DATA [i] [0] sein, aber für die zweite Iteration sollte es FEATURES_DATA [i] [0] und FEATURES_DATA [i] [1] verkettet sein. Ich habe versucht, Verkettung, und es gab mir einen Fehler "nur Länge-1-Arrays können in Python-Skalare " – GKS

Verwandte Themen