2016-12-22 9 views
2

私は学ぶscikitに新しいですし、私が最も可能性の高い特定の入力が与えられている車のタイプを予測する分類器を訓練しようとしています:scikit learn決定木でn個のフィーチャとn個のサンプルの配列を作るためにデータをどのように形成しますか?

私のデータは次のようになります。

18.0 8 307.0 130.0 3504 。12.0 70 1シボレー

15.0 8 350.0 165.0 11.5 3693. 70 1ビュイック

18.0 8 318.0 150.0 11.0 3436. 70 1プリマス

17.0 8 302.0 140.0 10.5 3449. 7 0 1フォードトリノ

15.0 8 429.0 198.0 4341. 10.0 70 1フォードギャラクシー500

14.0 8 454.0 220.0 4354. 9.0 70 1シボレー・インパラ

14.0 8 440.0 215.0 4312 8.5 70 1プリマス激怒III

データの各列は車の具体的な特徴である:MPG、シリンダ、馬力、加速度、等

Iは数値形式で車を表す午前:

data = np.loadtxt("my_data") 

    mpg = data[:,0] 
    cylinders = data[:,1] 
    displacement = data[:,2] 
    horsepower = data[:,3] 
    weight = data[:,4] 
    acceleration = data[:,5] 
    modelyear = data[:,6] 
    origin = data[:,7] 


    X = [mpg, cylinders, displacement, horsepower, weight, 
    acceleration, acceleration, modelyear, origin] 

    car_type = [1, 2, 3, 2, 6, 1, 0, 2, 5, 4, 2, 0, 3, 3, 2, 1, 0] 
    clf = tree.DecisionTreeClassifier() 
    clf.fit(X, car_type) 

しかし、私はそれを実行しようとすると、私はこのエラーを取得する:

ここでは0など=シボレー、1 =ビュイック、

は、プログラムのために私のコードです

cars = [0, 1, 2, 3, 3, 0, 2] 

Traceback (most recent call last): 
    File "scikitlearn_practice.py", line 21, in <module> 
    clf.fit(X, car_type) 
    File "/Library/Python/2.7/site-packages/sklearn/tree/tree.py", 
    line 739, in fit 
    X_idx_sorted=X_idx_sorted) 
    File "/Library/Python/2.7/site-packages/sklearn/tree/tree.py", line 
    240, in fit 
    "number of samples=%d" % (len(y), n_samples)) 
    ValueError: Number of labels=17 does not match number of samples=8 

ラベルがサンプル数と一致するようにこのエラーを修正するにはどうすればよいですか?

ありがとうございました

答えて

1

ここでXの宣言に問題があります。ドキュメントで述べるように、Xは形状[n_samples、n_features]でなければなりませんが、コードでは形状[n_features、n_samples]の配列[[18.0,15.0、...、14.0] [8,8、...、8]、...、[1,1、...、1]]である。

実際に必要なのは、各行が1つのサンプル、つまり[[18.0,8,307.0,130.0,3504。、12.0,70,1]、...、[14.0,8,440.0,215.0,4312。 、8.5,70,1]]。これは既にあなたのデータ配列にあるものです。この情報を使用して

、あなたがして、コードを書き換えることができます。

X = np.loadtxt("my_data") 

car_type = [1, 2, 3, 2, 6, 1, 0, 2, 5, 4, 2, 0, 3, 3, 2, 1, 0] 
clf = tree.DecisionTreeClassifier() 
clf.fit(X, car_type) 

ただし、このコードを実行すると、まだエラーにつながる、 Number of labels=17 does not match number of samples=7

あなたのラベル配列は、17枚のラベル(のために含まれているためです17個のサンプルが含まれています)、サンプル配列には7個のサンプルしか含まれていません。

car_type配列は、あなたがあなたのX配列を持っているサンプルのように多くのラベルが含まれている必要があり、その誤差は、あなたのデータです。

私はcar_typesをすることになって、しかし、あなたの車は配列はので、多分あなたがやろうとしているもので、7個のサンプルが含まれており、my_dataで持っているデータに対応するように思われているのか分からない:

X = np.loadtxt("my_data") 
cars = [0, 1, 2, 3, 3, 0, 2] 
clf = tree.DecisionTreeClassifier() 
clf.fit(X, cars) 

このようにすると、データをモデルに合わせることができました。 助けてくれることを願っています。

関連する問題