2017-03-24 5 views
0

私はこのチュートリアルの後に自分自身のデータを使ってSVMを書こうとしています。 https://pythonprogramming.net/preprocessing-machine-learning/?completed=/linear-svc-machine-learning-testing-data/ValueError:クラスの数は1より大きくなければなりません。 1を得ました

私はこのエラーを取得しておいてください。

ValueError: The number of classes has to be greater than one; got 1 

私のコードは次のとおりです。

[[4, 0.001743713493735165, 0.6497055601752815, 90.795723552739275], 
[4, 0.0460937435599832, 0.19764217920409227, 90.204147248752378], 
[1, 0.001185534503063044, 0.3034913722821194, 60.348908179729023], 
[1, 0.015455289770298222, 0.8380914254332884, 109.02120657826231], 
[3, 0.0169961646358455, 0.2458746325894564, 136.83829993466398]] 

マイ:Xのために使用されている機能の

header1 = ["Number of Sides", "Standard Deviation of Number of Sides/Perimeter", 
     "Standard Deviation of the Angles", "Largest Angle"] 
header2 = ["Label"] 
features = header1 
features1 = header2 

def Build_Data_Set(): 

    data_df = pd.DataFrame.from_csv("featureVectors.csv") 
    #data_df = data_df[:3] 
    X = np.array(data_df[features].values) 

    data_df2 = pd.DataFrame.from_csv("labels.csv") 
    y = np.array(data_df2[features1].replace("Circle",0).replace("Triangle",1) 
       .replace("Square",2).replace("Parallelogram",3) 
       .replace("Rectangle",4).values.tolist()) 

    return X,y 

def Analysis(): 

    test_size = 4 
    X,y = Build_Data_Set() 
    print(len(X)) 

    clf = svm.SVC(kernel = 'linear', C = 1.0) 
    clf.fit(X[:-test_size],y[:-test_size]) 

    correct_count = 0 

    for x in range(1, test_size+1): 
      if clf.predict(X[-x])[0] == y[-x]: 
       correct_count += 1 

    print("Accuracy:", (correct_count/test_size) * 100.00) 

私の配列はこのようになりますYで使用されるラベルの配列は次のようになります:

['Square', 'Square', 'Circle', 'Circle', 'Triangle'] 

プログラムが動作していないことを知っていたので、私は今までに5セットのデータしか使用していません。

私は役に立つ場合に備えて、自分のcsvファイルに値の写真を添付し​​ました。

featureVectors.csv

Labels.csv

Printing X.shape and y.shape and showing the full error

+1

行がエラーを与えますか?そして 'print(len(X))'を実行すると、 'X.shape'と' y.shape'を出力し、出力を教えてください。 – exp1orer

+0

@ exp1orer投稿を編集しました。あなたがリクエストしたすべての情報は、最後に添付された画像になります。 –

+0

ありがとう、私の答えを見てください。 – exp1orer

答えて

1

問題はこのラインであるように私には見える:

clf.fit(X[:-test_size],y[:-test_size]) 

Xは5行があり、そしてあなたが4にtest_sizeを設定しているので、 、X [: - test_size]は1つの行(最初の行)を与えます。これが混乱する場合は、Pythonのスライス表記法をお読みください。Explain Python's slice notation

したがって、訓練セットには1つのクラスしかありません(この場合は「正方形」)。あなたが最初の4行を与えるX[:test_size]をすることを意味するのだろうかと思います。とにかく、より大きなデータセットでトレーニングを試してみてください。


私は次のようにあなたのエラーを再現することができます

import numpy as np 
from sklearn import svm 
X = np.array([[4, 0.001743713493735165, 0.6497055601752815, 90.795723552739275], 
[4, 0.0460937435599832, 0.19764217920409227, 90.204147248752378], 
[1, 0.001185534503063044, 0.3034913722821194, 60.348908179729023], 
[1, 0.015455289770298222, 0.8380914254332884, 109.02120657826231], 
[3, 0.0169961646358455, 0.2458746325894564, 136.83829993466398]]) 

y = np.array(['Square', 'Square', 'Circle', 'Circle', 'Triangle']) 
print X.shape # (5,4) 
print y.shape # (5,) 

clf = svm.SVC(kernel='linear',C=1.0) 

test_size = 4 
clf.fit(X[:-test_size],y[:-test_size]) 
+0

これは完全に機能しました。どうもありがとうございました! –

関連する問題