2012-06-13 14 views
5

私はRとSVMの新人です。の機能をe1071パッケージからプロファイルしようとしています。しかし、入力データのサイズを変えて、結果の良いプロファイリング範囲を得るための大きなデータセットを見つけることはできません。誰もどのようにsvm仕事を知っていますか?どのデータセットを使用する必要がありますか? svmへの任意の特定のパラメータは、それをより困難にするでしょうか?SVM(e1071)のプロファイルをR

パフォーマンスをテストするために使用しているコマンドをいくつかコピーします。おそらくそれは、私はここにしようとしています何を得るために最も便利で簡単です:

#loading libraries 
library(class) 
library(e1071) 
#I've been using golubEsets (more examples availables) 
library(golubEsets) 

#get the data: matrix 7129x38 
data(Golub_Train) 
n <- exprs(Golub_Train) 

#duplicate rows(to make the dataset larger) 
n<-rbind(n,n) 

#take training samples as a vector 
samplelabels <- as.vector([email protected]@data$ALL.AML) 

#calculate svm and profile it 
Rprof('svm.out') 
svmmodel1 <- svm(x=t(n), y=samplelabels, type='C', kernel="radial", cross=10) 
Rprof(NULL) 

を私は

+1

トレーニングポイントを複製しても問題はそれほど難しくありません。ほとんどのSVMではデータセット全体がメインメモリに収まる必要があるため、最終的にはメモリエラーが発生することがあります。 – karenu

+0

なので、どのように適切なビッグデータセットを試すことができますか?私が使用できる例を知っていますか? – Manolete

+0

はい、あなたが私の答えを見たら、私は利用可能なデータセットの数を列挙しました。また、最適なパラメータを見つけるためにパラメータチューニングを行う必要があります。最も正確なパラメータを検索する際に、他のパラメータよりも訓練に時間がかかることがあります。実践ガイドは、著者のlibsvmからチェックしてください。http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CFYQFjAA&url=http%3A%2F%2Fwww.csie.ntu .edu.tw%2F〜cjlin%2Fitter%2Fguide%2Fguide.pdf&ei = WtLhT46NO-jw0gG3​​0pHVAw&usg = AFQjCNFol0McRktHC6gsBxKXqQMvmQUFeg – karenu

答えて

8
...行と列を複製したデータセットを増やすことが、私は代わりに難しく svm作品を作るのメモリの限界に達しておきます

「SVMの作業」という点では、SVMの作業を「より困難にする」というのは、容易に分離できないより複雑なモデルであり、次元が大きく、密度の高いデータセットです。

  • データセットのサイズが大きくなる(データ点数)
  • スパース性が減少(より少ないゼロ)
  • 次元上昇(属性の数)
  • 非:

    SVMの性能はと劣化します線形カーネルが使用されます(カーネルパラメータによって、カーネル評価がより複雑になります)

を変化させたパラメータ

あなたはSVMに時間がかかるの向上のために変更することができますがパラメータです。もちろん、これらのパラメータは、得られるソリューションの品質に影響し、使用する意味がない場合があります。

C-SVMを使用すると、Cを変更すると実行時間が異なります。 (nu-SVMの同様のパラメータはnuです。)データセットが合理的に分離可能である場合、SVMはより多くのトレーニングポイントをサポートベクトルにすることができるため、Cを小さくすると実行時間が長くなります。データセットが非常に分離できない場合は、Cを大きくすると実行時間が長くなります。なぜなら、基本的にSVMにデータに密接した狭いマージンのソリューションを必要とし、データが簡単ではない場合分離する。

パラメータ検索を実行すると、精度が大幅に向上することなく計算時間が増加するパラメータが存在することがよくあります。

その他のパラメータはカーネルパラメータであり、カーネルの計算の複雑さを増やすためにそれらを変更すると、必然的にSVMランタイムが増加します。リニアカーネルはシンプルで最速になります。もちろん、非線形カーネルは長い時間がかかります。パラメータの中には、カーネルの計算量を増やさないものもあれば、より複雑なモデルを強制するものもあります。

データセットを使用する方法:

UCI Machine Learning Repositoryは、データセットの偉大な源です。

MNIST handwriting recognition datasetは、データのサブセットをランダムに選択して、ますますサイズの大きいデータセットを作成することができます。リンクのデータにはすべての数字が含まれていますので、SVMはもちろんバイナリなので、データを2桁に減らすか、何らかのマルチクラスSVMを行う必要があります。

データセットも簡単に作成できます。線形データセットを生成するには、超平面への法線ベクトルをランダムに選択し、次にデータポイントを生成し、超平面のどちら側にそれをラベリングするかを決定します。超平面のある距離内の点に時には異なるラベルを付けるためのランダム性を追加します。クラス間のオーバーラップを増やすことで複雑さを増やしてください。または、1または-1とラベル付けされた正規分布点のいくつかのクラスタを生成し、分布が端で重なるようにします。古典的な非線形の例はチェッカーボードです。ポイントを生成し、チェッカーボードのパターンでラベルを付けます。それをより困難にするには、四角形の数を増やし、寸法を増やし、データポイントの数を増やします。もちろん、非線形カーネルを使用する必要があります。

+0

あなたの素晴らしい説明をありがとうございました。それは有り難いです。私はこれが役立つかどうかを確認するために私の質問を更新しました – Manolete

+0

karenu入力マトリックスはどうですか?私はいつ、なぜ私が転置をそれに適用する必要があるのか​​を理解することに本当に苦労しています。私はそこにいくつかの例を見てきました、そして、それぞれが異なったことをしています。入力行列をt()に適用する必要があるときは、どうすればわかりますか? – Manolete

関連する問題