2017-11-23 13 views
-1

同じ分類子の予測を比較したいと思います。 例としてとして、私はLinear Discriminant Analysisクラシファイアを選びました。Sklearnでクロスバリデーション(Kfold)を使ってラベルを予測する方法

したがって、私はsklearnのドキュメントを調べました。クロスバリデーション(例えば Kfold)の助けを借りて、ラベルの予測を:私はそれらを一緒にリンクしたい Link 1 Link 2

: は、私はこれらの2つのウェブサイトを見つけました。

しかし、私は自分のコードを動作させることはできません。

from sklearn.model_selection import cross_val_predict, KFold 
from sklearn.model_selection import train_test_split 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 

X = np.array([[1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4]]) 
Y = np.array([1, 2, 3, 4, 5, 6, 7, 8]) 

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,train_size=0.5,random_state=1) 

clf = LinearDiscriminantAnalysis() 
clf.fit(Xtrain, Ytrain) 
LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage='auto', solver='lsqr', store_covariance=False, tol=0.001) 

# without cross-valdidation 
prediction = clf.predict(Xtest) 

# with cross-valdidation 
cv = KFold(n_splits=2) 
prediction_cv = cross_val_predict(clf, X, Y, cv=cv) 

うまくいけば、誰かが私を助けることができます。

EDIT:

私はより多くを説明する必要があると思います。 現在、私は232のデータポイント(X)を持っています。各点は16の値で構成され、特定のクラスに割り当てられます。 Kfoldまたはのように、クロスバリデーションを使用しているときに、見通しを改善することができます(目に見えないデータポイントの分類ミスを減らすことができます)。

cross_val_predict(clf, X, Y, cv=cv)という行では、PythonはKfoldのクロス検証を行います。

今、私は新しいデータポイント(X_new)を取得したとしましょう。どのように分類できますか?

+0

さて、あなたは今まで正しいと 'prediction'と' prediction_cv'を持っています。どのようにそれらを比較したいですか?あなたがしたいことは、詳細に記述してください。 –

+0

コードは今まで動作しません。 'predict'と' prediction_cv'の結果は得られません。 Pythonは私のコードの中で何か好きではなく、私は何が分かりません。 背景:Pythonが予測を計算するとすぐに、 'predictions'と' Ytest'(真のラベル/クラス)間の間違いを数えたいと思います。 –

+0

あなたが提供したデータの例については、下記の答えをご覧ください。 –

答えて

2

は、私はあなたがこのようになりますあなたのコードを実行したときにトレースバックを得ていると推定:

私はあなたのコードを実行したときに、私は何を得るのです
376   # avoid division by zero in normalization 
    377   std[std == 0] = 1. 
--> 378   fac = 1./(n_samples - n_classes) 
    379 
    380   # 2) Within variance scaling 

ZeroDivisionError: float division by zero 

。これは、各クラスに1データポイントがあるため、n_samples - n_classesがゼロになるためです。

あなたはより多くの例を取り込むか、クラスの数を減らすことによって、これを軽減することができます

import numpy as np 

from sklearn.model_selection import cross_val_predict, KFold 
from sklearn.model_selection import train_test_split 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis 

X = np.array([[1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4], [1, 2], [2, 4], [3, 2], [4, 4], [5, 2], [6, 4], [7, 2], [8, 4]]) 
Y = np.array([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8]) 

Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,train_size=0.5,random_state=1) 

clf = LinearDiscriminantAnalysis() 
clf.fit(X, Y) 

# without cross-valdidation 
prediction = clf.predict(Xtest) 

# with cross-valdidation 
cv = KFold(n_splits=2) 
prediction_cv = cross_val_predict(clf, X, Y, cv=cv) 

あなたは別の問題がある場合は、あなたの質問を更新します。

EDIT:あなたの更新のために質問

、それはこの質問の重複です:Using cross_val_predict against test data set

+0

ありがとうございました!私は今、 'ZeroDivisionError'を理解しています。 コードラインは「LinearDiscriminantAnalysis(n_components = None、priors = None、shrinkage = 'auto'、solver = 'lsqr'、store_covariance = False、tol = 0.001) '関連しませんか? –

+0

サンプルコードスニペットから貼り付けたものをコピーするようです。その行はあなたのクラスの '__repr__'印刷された表現です。それが立っているので、その行はあなたにとって有用な何もしていません。この回答があなたの問題を解決した場合、それを回答として受け入れることができれば幸いです。 – jonnybazookatone

関連する問題