2016-08-15 10 views
0

私はSVMを使用して分類器を構築するためにUCI ML乳癌データセットを使用しています。私は、LIBSVMとfselect.pyスクリプトを使用して、機能選択のf-スコアを計算しています。私のデータセットは8つの機能を持っており、それらのスコアは、以下の通りである。SVM分類の機能選択 - 奇妙な動作

5: 1.765716 
2: 1.413180 
1: 1.320096 
6: 1.103449 
8: 0.790712 
3: 0.734230 
7: 0.698571 
4: 0.580819 

これは、第五の特徴が最も識別的であることを意味し、そして第四は、少なくともです。コードの私の次の部分は次のようになります。

x1=x(:,5); 
x2=x(:,[5,2]);  
x3=x(:,[5,2,6]);  
x4=x(:,[5,2,6,8]); 
x5=x(:,[5,2,6,8,3]); 
x6=x(:,[5,2,6,8,3,7]); 
x7=x(:,[5,2,6,8,3,7,4]); 


errors2=zeros(7,1); 

errors2(1)=svmtrain(y,x1,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(2)=svmtrain(y,x2,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(3)=svmtrain(y,x3,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(4)=svmtrain(y,x4,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(5)=svmtrain(y,x5,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(6)=svmtrain(y,x6,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 
errors2(7)=svmtrain(y,x7,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10'); 

注:ガンマおよびCは、グリッドサーチを使用して計算し、xは(8つの特徴に対応する)8列

私は印刷すると、完全な行列でありますerrors2行列は、私は次のような出力が得られます。

errors2 = 

    88.416 
    92.229 
    93.109 
    94.135 
    94.282 
    94.575 
    94.575 

これは私がすべての機能を使用して、私はほとんどの識別機能を使用する場合、少なくとも精度を得るとき、私は最も精度を得ることを意味します。私が知る限り、最も差別的なものを含むフィーチャのサブセットを使用すると、最も正確なものを得ることができます。なぜプログラムはこのように動作していますか?誰かが私がした可能性のあるエラーを指摘できますか? (私の直感は、私がCを間違って計算したと言っています、それはとても小さいからです)。

+0

また、あなたのモデルが悪い結果を与えている行を確認するために基本的なデータ分析を行うことはありません。これらの行にパターンを表示し、そのパターンを使用して変数を作成してみてください – abhiieor

+0

最後のステートメントを説明できますか?どのようにパターンを認識するのですか?そのため、トレーニングデータの各行で分類器をテストして、どの行が悪い結果をもたらすかを調べる必要があります。 –

+0

私はあなたの分類器に誤った分類があった場合、その誤分類がどれほど悪いかを調べることを意味しました。いくつかのレコードについてクラス1を期待しているが、クラス1の確率0.1を得ることは、確率0.4(しきい値がデフォルト0.5である場合)と比較して非常に悪い。だからそのような誤分類のケースを探し、それらに間違っていたかもしれないと考えるようにしてください。 – abhiieor

答えて

1

あなたが得るエラー率は、予想通りです。余分な機能を追加すると、より多くの情報があるため、エラー率を下げることができます。

例として、車のモデルを考え出すことを検討してください。最も差別的な機能はおそらくメーカーですが、エンジンのサイズ、高さ、幅、長さ、重量などの機能を追加することで、それをさらに絞り込むことができます。

多くの機能を検討している場合、その中には識別力が非常に低いものもあります。トレーニングデータのオーバーフィットに問題が生じる可能性があります。ここには8つの機能しかありませんが、すでに8番目の機能を追加しても効果はありません。 (車の例では、車の汚れ、タイヤに残っているトレッドの量、ラジオが調整されているチャンネルなどの機能があります)。

+0

クラシファイアの精度を向上させる方法をいくつか教えてください。私は少なくとも98%を目指しています。 –

+0

多項式カーネルを使ってみることもできます – Richard