タグ付けされた質問 「multi-class」

マルチクラス分類は、3つ以上のクラスがある分類タスクです。これは多項分類とも呼ばれます。

3
混同マトリックスを使用してマルチクラス分類の精度とリコールをどのように計算しますか?
マルチクラス分類問題の混同マトリックスを使用して、精度を計算し、リコールする方法を疑問に思います。具体的には、観測値は最も可能性の高いクラス/ラベルにのみ割り当てることができます。計算したい: 精度= TP /(TP + FP) リコール= TP /(TP + FN) クラスごとに、マイクロ平均Fメジャーを計算します。



3
マルチクラス分類器の品質を判断する方法
与えられた インスタンスを持つデータセットはと一緒にすべてのインスタンスクラス 1つのクラスに正確に属しバツ私バツ私x_iNNNバツ私バツ私x_iy私y私y_i マルチクラス分類器 トレーニングとテストの後、基本的に、テストセット内のすべてのインスタンスについて、真のクラスと予測クラスを含むテーブルを作成しました。したがって、すべてのインスタンスについて、一致()またはミス()があります。y私y私y_ia私a私a_iバツ私バツ私x_iy私= a私y私=a私y_i= a_iy私≠ a私y私≠a私y_i\neq a_i 試合の質をどのように評価できますか?問題は、いくつかのクラスが多くのメンバーを持つことができる、つまり多くのインスタンスがそれに属するということです。すべてのデータポイントの50%が1つのクラスに属し、最終的な分類子が全体で50%正しい場合、明らかに何も得られません。入力が何であれ、その最大クラスを出力する単純な分類器を作成することもできました。 各クラスの既知のテストセットの一致とヒットの結果に基づいて分類子の品質を推定する標準的な方法はありますか?特定のクラスごとに一致率を区別することも重要かもしれません。 私が考えることができる最も単純なアプローチは、最大クラスの正しい一致を除外することです。ほかに何か?

2
テストセットとトレーニングセットの分布の違いを処理する方法
機械学習またはパラメーター推定の基本的な前提の1つは、目に見えないデータがトレーニングセットと同じ分布に由来するということです。ただし、実際のケースによっては、テストセットの分布はトレーニングセットとほとんど異なります。 製品の説明を約17,000クラスに分類しようとする大規模な複数分類問題について考えてみましょう。トレーニングセットには、非常に歪んだクラス事前分布があります。そのため、一部のクラスには多くのトレーニング例があり、一部のクラスにはほんのわずかしかありません。クライアントから未知のクラスラベルを持つテストセットが与えられたとします。トレーニングセットでトレーニングされた分類器を使用して、テストセットの各製品を17,000クラスのいずれかに分類しようとします。テストセットのクラス分布は歪んでいる可能性がありますが、異なるビジネス分野に関連している可能性があるため、トレーニングセットのそれとはおそらく非常に異なっています。2つのクラス分布が大きく異なる場合、トレーニングされた分類器はテストセットでうまく機能しない可能性があります。これは、Naive Bayes分類器で特に明らかです。 確率的分類器のトレーニングセットと特定のテストセットの違いを処理する原則的な方法はありますか?「トランスダクティブSVM」はSVMでも同様のことを行うと聞きました。特定のテストセットで最高のパフォーマンスを発揮する分類器を学習するための同様の手法はありますか?次に、この実用的なシナリオで許可されているように、異なるテストセットに対して分類器を再トレーニングできます。

2
マルチラベル分類器でscikit-learnの相互検証関数を使用する方法
5つのクラスがあり、各インスタンスがこれらのクラスの1つ以上に属することができるデータセットでさまざまな分類子をテストしているので、特にscikit-learnのマルチラベル分類子を使用していますsklearn.multiclass.OneVsRestClassifier。次に、を使用して相互検証を実行しsklearn.cross_validation.StratifiedKFoldます。これにより、次のエラーが生成されます。 Traceback (most recent call last): File "mlfromcsv.py", line 93, in <module> main() File "mlfromcsv.py", line 77, in main test_classifier_multilabel(svm.LinearSVC(), X, Y, 'Linear Support Vector Machine') File "mlfromcsv.py", line 44, in test_classifier_multilabel scores = cross_validation.cross_val_score(clf_ml, X, Y_list, cv=cv, score_func=metrics.precision_recall_fscore_support, n_jobs=jobs) File "/usr/lib/pymodules/python2.7/sklearn/cross_validation.py", line 1046, in cross_val_score X, y = check_arrays(X, …

2
scikitのマルチラベル分類メトリック
scikitを使用して既存のドキュメントにトピックを割り当てるために、マルチラベル分類子を構築しようとしています 私は、を介してそれらを渡す私の文書を処理していTfidfVectorizerて、ラベルMultiLabelBinarizerと作成したOneVsRestClassifierとSGDClassifier推定として。 しかし、分類子をテストするとき、私は0.29までのスコアしか得ません。これは、私が読んだものから同様の問題に対してかなり低いです。TfidfVectorizerでストップワード、ユニグラム、ステミングなどの複数のオプションを試しましたが、何もそれほど結果を変えないようです。 またGridSearchCV、推定器に最適なパラメーターを取得するために使用していましたが、現在、次に何をしようかというアイデアがありません。 同時に、私が使用できないことを理解scikit.metricsしているOneVsRestClassifierので、何が間違っているのかを理解するために、どのようにいくつかのメトリック(F1、Precision、Recallなど)を取得できますか? データコーパスに問題があるのでしょうか? 更新:とを使用CountVectorizerしHashingVectorizerてパイプライン処理も試みましたTfidfTransformerが、結果は似ています。だから私は、word-of-wordsアプローチがトークン化ドメインで最善であり、残りは分類器次第だと推測しています...

2
マルチクラスSVMを実行する最良の方法
SVMはバイナリ分類子であることを知っています。マルチクラスSVMに拡張したいと思います。それを実行するための最良の、そしておそらく最も簡単な方法はどれですか? コード:MATLAB u=unique(TrainLabel); N=length(u); if(N>2) itr=1; classes=0; while((classes~=1)&&(itr<=length(u))) c1=(TrainLabel==u(itr)); newClass=double(c1); tst = double((TestLabel == itr)); model = svmtrain(newClass, TrainVec, '-c 1 -g 0.00154'); [predict_label, accuracy, dec_values] = svmpredict(tst, TestVec, model); itr=itr+1; end itr=itr-1; end これはどのように改善できますか?

2
マルチクラスパーセプトロンはどのように機能しますか?
数学の背景はありませんが、単純なパーセプトロンの仕組みを理解しており、超平面の概念を理解していると思います(幾何学的には、線が分離するように2つの点群を分離する3D空間の平面として想像します) 2D空間の2つの点群)。 しかし、1つの平面または1つの線が3D空間または2D空間の3つの異なる点群をどのように分離するかはわかりません。これは幾何学的に不可能です。 ウィキペディアの記事の対応するセクションを理解しようとしましたが、「ここでは、入力xと出力yは任意のセットから描画されます」という文で惨めに失敗しました。誰かが私にマルチクラスパーセプトロンを説明し、それが超平面のアイデアとどのように関係するのか、あるいはあまり数学的ではない説明を私に指し示すことができますか?

2
複数のターゲットまたはクラスを予測しますか?
複数のイベント(たとえば、ダイスのロールとコインのトスの両方)を予測しようとする予測モデルを構築しているとします。私が精通しているほとんどのアルゴリズムは1つのターゲットのみで機能するため、この種のことに対する標準的なアプローチがあるかどうか疑問に思っています。 2つの選択肢があります。おそらく最も素朴なアプローチは、単純にそれらを2つの異なる問題として扱い、結果を結合することです。ただし、2つのターゲットが独立していない場合(および多くの場合、それらは非常に依存している可能性があります)、これには重大な欠点があります。 私にとってより賢明なアプローチは、結合されたターゲット属性を作成することです。そうダイと硬貨の場合には、我々が持っているであろうの状態((1 、H )、(1 、T )、(2 、H )、など)。ただし、これにより、複合ターゲットの状態/クラスの数がかなり大きくなることがあります(2つのサイコロがある場合など)。さらに、これは、一方の属性がカテゴリ属性でもう一方が数値属性の場合(たとえば、気温と降水量のタイプを予測する場合)、奇妙に思えます。6 ⋅ 2 = 126⋅2=126\cdot 2=12(1 、H)、(1 、T)、(2 、H)(1、H)、(1、T)、(2、H)(1, H), (1, T), (2, H) この種のことに対する標準的なアプローチはありますか?あるいは、これを処理するために特別に設計された学習アルゴリズムはありますか?

1
多くのバイナリ分類子と単一のマルチクラス分類子
複数のバイナリ分類器を使用するか、単一のマルチクラス分類器を使用するかを決定するときに考慮すべき要素は何ですか? たとえば、手振りの分類を行うモデルを構築しています。シンプルなケースには4つの出力があります:[なし、thumbs_up、clenched_fist、all_fingers_extended]。これに取り組むには2つの方法があります。 オプション1-複数のバイナリ分類子 [なし、thumbs_up] [なし、clenched_fist] [なし、all_fingers_extended] オプション2-単一のマルチクラス分類器 [なし、thumbs_up、clenched_first、all_fingers_extended] どのアプローチがより良い傾向にあり、どのような状況で?

1
2クラスモデルのマルチクラス問題への拡張
Adaboostに関するこのペーパーでは、2クラスモデルをKクラスの問題に拡張するための提案とコード(17ページ)を示します。このコードを一般化して、さまざまな2クラスモデルを簡単にプラグインして結果を比較できるようにします。ほとんどの分類モデルには数式インターフェースとpredictメソッドがあるため、これの一部は比較的簡単なはずです。残念ながら、2クラスモデルからクラス確率を抽出する標準的な方法が見つからないため、各モデルにはカスタムコードが必要になります。 Kクラス問題を2クラス問題に分解し、Kモデルを返すために私が書いた関数は次のとおりです。 oneVsAll <- function(X,Y,FUN,...) { models <- lapply(unique(Y), function(x) { name <- as.character(x) .Target <- factor(ifelse(Y==name,name,'other'), levels=c(name, 'other')) dat <- data.frame(.Target, X) model <- FUN(.Target~., data=dat, ...) return(model) }) names(models) <- unique(Y) info <- list(X=X, Y=Y, classes=unique(Y)) out <- list(models=models, info=info) class(out) <- 'oneVsAll' return(out) } これは、各モデルを反復処理して予測を行うために私が書いた予測方法です。 predict.oneVsAll <- …

3
マルチクラス分類器の混同行列を作成するにはどうすればよいですか?
6つのクラスに問題があります。したがって、私は次のようにマルチクラス分類子を作成します。クラスごとに、One vs. Allを使用して1つのロジスティック回帰分類子があります。つまり、6つの異なる分類子があります。 分類子ごとに混同行列を報告できます。しかし、ここで多くの例を見てきたように、すべての分類子の混同行列を報告したいと思います。 どうすればできますか?One vs. AllではなくOne vs. Oneアルゴリズムを使用して分類戦略を変更する必要がありますか?これらの混同行列では、レポートは各クラスの誤検知を示しているためです。 マルチクラス混同行列の例 誤分類されたアイテムの数を調べたいのですが。最初の行には、クラス1に分類されたクラス1の例が137個あり、クラス2に分類されたクラス1の例が13個あります。この番号を取得するには?

2
ランダムフォレストのマルチクラスよりもランダムフォレストの1対すべてを使用した方がパフォーマンスが良いですか?
私は9つの可能なラベルを持つマルチクラス問題に取り組んでいます。そのため、約50.000の例とそれぞれ約200の特徴で構成されるデータセットがあります。各例は1つのクラスにのみ属することができます。データは、異なるラベル間でかなりバランスが取れています。 その堅牢性とスケーラビリティを考慮して、学習方法としてランダムフォレスト(1,000本の木の集合)を使用することにしました。このデータセットが与えられたモデルのパフォーマンス精度を評価するために、私はstratified5Fold交差検証を使用しました(私はscikit-learn 0.18を使用しています)。 ランダムフォレストは本質的にマルチクラスデータセットを処理できるため、指定されたデータセットで直接使用し、79.5 0.3の精度を得ました。私はまた、機能がより重要性、簡単属性から抽出することができる何か持っていた知ることに興味があったfeature_importances_でRandomForestClassifier scikitのを。ただし、データセットはバランスが取れており、予想通り、200のうち異なるクラスに寄与するフィーチャの数はほぼ同じであることを考えると、どのフィーチャが各クラスに最も寄与するかを特定できませんでした。±±\pm 結果として、私は同じランダムフォレストのセットアップを使用して、1対すべての戦略を採用しました(ところで、oneVsAll戦略を使用するときにデータの不均衡を考慮に入れるとコストに敏感です)。これにより、各クラスと残りの機能はより重要です。これについて私が得た結果は合理的です。さらに、この戦略を使用してモデルのパフォーマンスを確認したところ、88.7 0.2の精度が得られました。これは、マルチクラスのランダムフォレストがマルチクラスの性質を考慮してより適切に分類することを期待していたので、驚きました。±±\pm 私はこれで正しいですか?このような精度の違いはもっともらしいでしょうか?さらに、ランダムフォレスト自体がoneVsAll戦略などの「ハッキング」なしでマルチクラスの問題に取り組むことができるという条件で、上記の戦略はOKで公正に採用されていますか?

2
マルチクラス分類でのScikit SVMの出力は常に同じラベルを与える
私は現在、次のコードでScikit Learnを使用しています: clf = svm.SVC(C=1.0, tol=1e-10, cache_size=600, kernel='rbf', gamma=0.0, class_weight='auto') そして、7つの異なるラベルを持つデータのセットを当てはめて予測します。奇妙な出力が出ました。検証セットで予測ラベルを使用する相互検証手法に関係なく、常にラベル7になります。 完全なデフォルトパラメータ(svm.SVC())を含む他のいくつかのパラメータを試しますが、私が使用するカーネルメソッドがのrbf代わりにあるpolyか、linearそれが機能しない限り、polyおよびに対しては非常にうまく機能しlinearます。 その上、検証データの代わりに列車データの予測をすでに試みており、完全に適合しています。 誰かがこの種の問題を以前に見て、ここで何が起こっているのか知っていますか? 私はクラスの分布を詳細に見ることはありませんが、約30%は7、14%は4であるべきだと思います。 私は手動の1-vs-rest実装を試みても、まだ役に立ちません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.