55

すべての本と例では、常にバイナリ分類 (2 つのクラス) のみを示しており、新しいベクトルはいずれか 1 つのクラスに属することができます。

ここでの問題は、4 つのクラス (c1、c2、c3、c4) があることです。私は4つのクラスのトレーニングデータを持っています。

新しいベクトルの場合、出力は次のようになります

C1 80% (勝者)

c2 10%

c3 6%

c4 4%

これを行う方法?libsvm を使用する予定です (最も人気があるため)。私はそれについてあまり知りません。以前に使用した人がいる場合は、使用することになっている特定のコマンドを教えてください。

4

8 に答える 8

41

LibSVM は、マルチクラスの学習問題に対して 1 対 1 のアプローチを使用します。よくある質問から:

Q: libsvm はマルチクラス SVM にどのような方法を使用しますか? 「1 対 1 残り」方式を使用しないのはなぜですか。

一対一です。次の比較を行った後に選択しました: C.-W. Hsu と C.-J. リン。マルチクラス サポート ベクター マシンのメソッドの比較、IEEE Transactions on Neural Networks、13(2002)、415-425。

「1 対 1」は、「1 対 1」に匹敵するパフォーマンスを持つ優れた方法です。トレーニング時間が短いという理由だけで後者を使用します。

于 2011-02-23T08:50:01.907 に答える
22

一般的に使用される方法は、One vs. Rest および One vs. One です。最初の方法では、n 個の分類子を取得し、結果のクラスのスコアが最も高くなります。2 番目の方法では、結果のクラスはすべての分類子の多数決によって得られます。

AFAIR、libsvmはマルチクラス分類の両方の戦略をサポートしています。

于 2009-12-24T13:20:35.187 に答える
6

クラスのセットのランダムなパーティションを再帰的に選択することにより、マルチクラスの分類問題を常にバイナリの問題に減らすことができます。これは、一度にすべてを学習するよりも効果的または効率的であるとは限りません。これは、分割問題が小さいため、サブ学習の問題に必要な例が少なくなるためです。(最大で一定の注文時間、たとえば 2 倍の時間がかかる場合があります)。また、より正確な学習につながる可能性もあります。

必ずしもこれを推奨しているわけではありませんが、これは質問に対する 1 つの回答であり、任意のバイナリ学習アルゴリズムに適用できる一般的な手法です。

于 2009-12-24T13:09:05.367 に答える
1

SVM マルチクラス ライブラリを使用します。Thorsten Joachims による SVM ページで見つけてください。

于 2011-12-02T20:07:41.273 に答える
0

バイナリ予測と比較して特別なことは何もありません。SVM に基づく 3 クラス予測については、次の例を参照してください。

install.packages("e1071")
library("e1071")
data(iris)
attach(iris)
## classification mode
# default with factor response:
model <- svm(Species ~ ., data = iris)
# alternatively the traditional interface:
x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y) 
print(model)
summary(model)
# test with train data
pred <- predict(model, x)
# (same as:)
pred <- fitted(model)
# Check accuracy:
table(pred, y)
# compute decision values and probabilities:
pred <- predict(model, x, decision.values = TRUE)
attr(pred, "decision.values")[1:4,]
# visualize (classes by color, SV by crosses):
plot(cmdscale(dist(iris[,-5])),
     col = as.integer(iris[,5]),
     pch = c("o","+")[1:150 %in% model$index + 1])
于 2016-07-25T18:10:02.937 に答える
0
data=load('E:\dataset\scene_categories\all_dataset.mat');
    meas = data.all_dataset;
    species = data.dataset_label;
    [g gn] = grp2idx(species);                      %# nominal class to numeric

%# split training/testing sets
[trainIdx testIdx] = crossvalind('HoldOut', species, 1/10);
%# 1-vs-1 pairwise models
num_labels = length(gn);
clear gn;
num_classifiers = num_labels*(num_labels-1)/2;
pairwise = zeros(num_classifiers ,2);
row_end = 0;
for i=1:num_labels - 1
    row_start = row_end + 1;
    row_end = row_start + num_labels - i -1;
    pairwise(row_start : row_end, 1) = i;
    count = 0;
    for j = i+1 : num_labels        
        pairwise( row_start + count , 2) = j;
        count = count + 1;
    end    
end
clear row_start row_end count i j num_labels num_classifiers;
svmModel = cell(size(pairwise,1),1);            %# store binary-classifers
predTest = zeros(sum(testIdx),numel(svmModel)); %# store binary predictions

%# classify using one-against-one approach, SVM with 3rd degree poly kernel
for k=1:numel(svmModel)
    %# get only training instances belonging to this pair
    idx = trainIdx & any( bsxfun(@eq, g, pairwise(k,:)) , 2 );

    %# train
    svmModel{k} = svmtrain(meas(idx,:), g(idx), ...
                 'Autoscale',true, 'Showplot',false, 'Method','QP', ...
                 'BoxConstraint',2e-1, 'Kernel_Function','rbf', 'RBF_Sigma',1);

    %# test
    predTest(:,k) = svmclassify(svmModel{k}, meas(testIdx,:));
end
pred = mode(predTest,2);   %# voting: clasify as the class receiving most votes

%# performance
cmat = confusionmat(g(testIdx),pred);
acc = 100*sum(diag(cmat))./sum(cmat(:));
fprintf('SVM (1-against-1):\naccuracy = %.2f%%\n', acc);
fprintf('Confusion Matrix:\n'), disp(cmat)
于 2017-01-04T12:06:44.617 に答える
0

SVM を使用したマルチクラス分類の場合。それは、NOT (1 対 1) と NOT (1 対 REST) です。

代わりに、特徴ベクトルが (x, y) である 2 クラスの分類器を学習します。ここで、x はデータであり、y はデータに関連付けられた正しいラベルです。

トレーニング ギャップは、正しいクラスの値と最も近い他のクラスの値との差です。

推論では、(x,y) の最大値を持つ "y" を選択します。

y = arg_max(y') W.(x,y') [W は重みベクトル、(x,y) は特徴ベクトル]

リンクにアクセスしてください: https://nlp.stanford.edu/IR-book/html/htmledition/multiclass-svms-1.html#:~:text=It%20is%20also%20a%20simple,the%20label%20of %20構造%20SVM%20 .

于 2020-06-17T12:41:31.690 に答える