私は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を間違って計算したと言っています、それはとても小さいからです)。
また、あなたのモデルが悪い結果を与えている行を確認するために基本的なデータ分析を行うことはありません。これらの行にパターンを表示し、そのパターンを使用して変数を作成してみてください – abhiieor
最後のステートメントを説明できますか?どのようにパターンを認識するのですか?そのため、トレーニングデータの各行で分類器をテストして、どの行が悪い結果をもたらすかを調べる必要があります。 –
私はあなたの分類器に誤った分類があった場合、その誤分類がどれほど悪いかを調べることを意味しました。いくつかのレコードについてクラス1を期待しているが、クラス1の確率0.1を得ることは、確率0.4(しきい値がデフォルト0.5である場合)と比較して非常に悪い。だからそのような誤分類のケースを探し、それらに間違っていたかもしれないと考えるようにしてください。 – abhiieor