2015-04-29 14 views
6

eşleşmelidir. Sorunum, iki özellikten daha fazlasına sahibim. Ben 2'den 3'e veya 4'e özellikleri "genişletmek" için ....scitkit-öğrenme sorgu veri boyutu Siteyi öğrenmek scikit gelen bu kodu kullanmaya çalışıyorum eğitim verileri boyut

alıyorum isterseniz:

yılında

def machine(): 
with open("test.txt",'r') as csvr: 

    reader= csv.reader(csvr,delimiter='\t') 

    for i,row in enumerate(reader): 

     if i==0: 
      pass 
     elif '' in row[2:]: 
      pass 
     else: 
      liste.append(map(float,row[2:])) 

a = np.array(liste) 
h = .02 
names = ["Nearest Neighbors", "Linear SVM", "RBF SVM", "Decision Tree", 
     "Random Forest", "AdaBoost", "Naive Bayes", "LDA", "QDA"] 
classifiers = [ 
    KNeighborsClassifier(1), 
    SVC(kernel="linear", C=0.025), 
    SVC(gamma=2, C=1), 
    DecisionTreeClassifier(max_depth=5), 
    RandomForestClassifier(max_depth=5, n_estimators=10, max_features=1), 
    AdaBoostClassifier(), 
    GaussianNB(), 
    LDA(), 
    QDA()] 



X = a[:,:3] 
y = np.ravel(a[:,13]) 

linearly_separable = (X, y) 
datasets =[linearly_separable] 
figure = plt.figure(figsize=(27, 9)) 
i = 1 

for ds in datasets: 
    X, y = ds 

    X = StandardScaler().fit_transform(X) 
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4) 

    x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 
    y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5 
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h), 
         np.arange(y_min, y_max, h)) 

    cm = plt.cm.RdBu 
    cm_bright = ListedColormap(['#FF0000', '#0000FF']) 
    ax = plt.subplot(len(datasets), len(classifiers) + 1, i) 

    ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright) 

    ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright, alpha=0.6) 
    ax.set_xlim(xx.min(), xx.max()) 
    ax.set_ylim(yy.min(), yy.max()) 
    ax.set_xticks(()) 
    ax.set_yticks(()) 
    i += 1 

    for name, clf in zip(names, classifiers): 
     ax = plt.subplot(len(datasets), len(classifiers) + 1, i) 
     print clf.fit(X_train, y_train) 
     score = clf.score(X_test, y_test) 
     print y.shape, X.shape 
     if hasattr(clf, "decision_function"): 
      Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) 
      print Z 
     else: 
      Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1] 


     Z = Z.reshape(xx.shape) 

     ax.contourf(xx, yy, Z, cmap=cm, alpha=.8) 
     ax.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm_bright) 

     ax.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm_bright, 
        alpha=0.6) 

     ax.set_xlim(xx.min(), xx.max()) 
     ax.set_ylim(yy.min(), yy.max()) 
     ax.set_xticks(()) 
     ax.set_yticks(()) 
     ax.set_title(name) 
     ax.text(xx.max() - .3, yy.min() + .3, ('%.2f' % score).lstrip('0'), 
       size=15, horizontalalignment='right') 
     i += 1 

figure.subplots_adjust(left=.02, right=.98) 
plt.show() 

"eğitim verileri boyutunu aynı olmalıdır sorgu veri boyutu" Bu durumda üç özellik kullanıyorum. Kodda neyi yanlış yapıyorum, X_train ve X_test verileriyle bir şey mi var? Sadece iki özelliği ile her şey yolunda.

zaman X değeri:

(array([[ 1., 1., 0.], 
    [ 1., 0., 0.], 
    [ 1., 0., 0.], 
    [ 1., 0., 0.], 
    [ 1., 1., 0.], 
    [ 1., 0., 0.], 
    [ 1., 0., 0.], 
    [ 3., 3., 0.], 
    [ 1., 1., 0.], 
    [ 1., 1., 0.], 
    [ 0., 0., 0.], 
    [ 0., 0., 0.], 
    [ 0., 0., 0.], 
    [ 0., 0., 0.], 
    [ 0., 0., 0.], 
    [ 0., 0., 0.], 
    [ 4., 4., 2.], 
    [ 0., 0., 0.], 
    [ 6., 3., 0.], 
    [ 5., 3., 2.], 
    [ 2., 2., 0.], 
    [ 4., 4., 2.], 
    [ 2., 1., 0.], 
    [ 2., 2., 0.]]), array([ 1., 1., 1., 1., 0., 1., 1., 0., 1., 1., 0., 1., 1., 
    1., 1., 1., 0., 1., 1., 0., 1., 0., 1., 1.])) 

ilk dizi x dizisi ve ikinci dizi y (hedef) bir dizidir.

Kötü format = hata için üzgünüm:

 Traceback (most recent call last): 

File "allM.py", line 144, in <module> 
mainplot(namePlot,1,2) 
File "allM.py", line 117, in mainplot 

Z = clf.predict_proba(np.c_[xx.ravel(), yy.ravel()])[:, 1] 

File "/usr/local/lib/python2.7/dist-packages/sklearn/neighbors/classification.py", line 191, in predict_proba 
neigh_dist, neigh_ind = self.kneighbors(X) 

File "/usr/local/lib/python2.7/dist-packages/sklearn/neighbors/base.py", line 332, in kneighbors 
return_distance=return_distance) 

File "binary_tree.pxi", line 1298, in sklearn.neighbors.kd_tree.BinaryTree.query (sklearn/neighbors/kd_tree.c:10433) 

ValueError: query data dimension must match training data dimension 

ve bu Dataset "ds" onu koymadan X dizidir.

[[ 1. 1. 0.][ 1. 0. 0.][ 1. 0. 0.][ 1. 0. 0.][ 1. 1. 0.][ 1. 0. 0.][ 1. 0. 0.][ 3. 3. 0.][ 1. 1. 0.][ 1. 1. 0.][ 0. 0. 0.][ 0. 0. 0.][ 0. 0. 0.][ 0. 0. 0.][ 0. 0. 0.][ 0. 0. 0.][ 4. 4. 2.][ 0. 0. 0.][ 6. 3. 0.][ 5. 3. 2.][ 2. 2. 0.][ 4. 4. 2.][ 2. 1. 0.][ 2. 2. 0.]] 
+0

X'in örneğiniz hem örneklerinizi hem de hedeflerinizi içeren bir tuple benziyor, ancak bu kodun beklediği gibi değil. Bir örnek verebilir misiniz? Buradan kodunuzu test etmek çok daha kolay olacak. – ohruunuruus

+0

Ayrıca, hata hakkında daha fazla bilgi verebilir misiniz? Hata nerede oluşur? Tüm hata traceback de dahil olmak üzere yararlı olurdu – ohruunuruus

+0

Üzgünüm, bu X ve y, ilk dizi X ve ikinci dizi y (hedef). – auronsen

cevap

3

clf.predict_proba() her satır eğitim verileri satırlar olarak aynı sayıda elemana sahip olan bir dizi gerektirdiğinden, bu oluyor - diğer bir deyişle şekil (num_rows, 3) ile bir girdi. onlar np.meshgrid tarafından oluşturulan çünkü

print np.c_[xx.ravel(), yy.ravel()].shape 
(45738, 2) 

Bu örnekleri mekan iki öğeyi bulunmaktadır: Bir boyutlu örnekli ile çalışan edildiğinde np.c_[xx.ravel(), yy.ravel()] sonucu iki eleman satırlarla bir dizi olduğu için

bu çalıştı Örnek kod, güzel bir şekilde çizilecek iki boyutlu bir alanı kapsayacak bir dizi girdi oluşturmak için kullanır. Üç öğeli satır içeren bir diziyi clf.predict_proba numaralı sayfaya geçirmeyi deneyin ve işler iyi çalışmalıdır. Bu özel örnek kod parçasını çoğaltmak isterseniz, SO üzerinde this sorusunda açıklandığı gibi bir 3B meshgrid oluşturmanız gerekir. Ayrıca, örnek kodda çizime verdiğim (kuşkusuz) bir bakışa dayanarak, mplot3d'un iyi bir başlangıç ​​noktası olarak hizmet vereceği sonuçları 3D olarak çizeceksiniz, bunun değerinden daha fazla sorun olabileceğinden şüpheleniyorum. . Bu grafiklerin bir 3D analogunun nasıl göründüğünden emin değilim.

+1

Dilimlemeden sanırım gerçekten 3d arsa yapamazsın.Belki sınırlar ama dağınık görünecek. Her neyse, 3 boyutun üzerinde genelleme yapmayacaktır ... –

+0

@AndreasMueller Sanırım haklısınız. OP, bu örnekle çalışmaya devam etmeye karar vermesi gereken bir yön vermek istedim. – ohruunuruus

İlgili konular