5

私はRとSVMを初めて使用し、パッケージsvmから関数のプロファイルを作成しようとしています。e1071ただし、入力データのサイズを変えて結果の適切なプロファイリング範囲を取得できる大きなデータセットは見つかりません。誰かが解決する方法を知っていますsvmか?どのデータセットを使用する必要がありますか?それに対する特定のパラメータsvmはそれをより難しくしますか?

パフォーマンスをテストするために使用しているいくつかのコマンドをコピーします。おそらく、私がここで試しているものを入手するのが最も便利で簡単です。

#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(Golub_Train@phenoData@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)

svm行と列を複製するデータセットを増やし続けていますが、作業を難しくするのではなく、メモリの制限に達しました...

4

1 に答える 1

8

「SVMの作業」に関して-SVMの作業を「難しく」するのは、簡単に分離できないより複雑なモデル、より高い次元、およびより大規模で高密度のデータセットです。

SVM のパフォーマンスは次の場合に低下します。

  • データセットのサイズが大きくなります (データ ポイントの数)
  • スパース性が低下します (ゼロが少なくなります)
  • 次元が増える(属性の数)
  • 非線形カーネルが使用されます (カーネル パラメーターにより、カーネル評価がより複雑になる場合があります)。

可変パラメータ

SVM の処理時間を長くするために変更できるパラメータはありますか。もちろん、パラメータは得られる解の品質に影響し、使用しても意味がない場合があります。

C-SVM を使用すると、C を変えるとランタイムが異なります。(nu-SVM の同様のパラメーターは nu です) データセットが合理的に分離可能である場合、C を小さくすると実行時間が長くなります。これは、SVM がより多くのトレーニング ポイントをサポート ベクターにできるためです。データセットがあまり分離可能でない場合、C を大きくすると実行時間が長くなります。これは、データにぴったりと適合する狭いマージンのソリューションが必要であり、データが容易でない場合は計算に時間がかかることを本質的に SVM に伝えているためです。分ける。

パラメーター検索を行っているときに、計算時間を増加させても精度があまり向上しないパラメーターがあることに気付くことがよくあります。

他のパラメーターはカーネルパラメーターであり、それらを変更してカーネルの計算の複雑さを増すと、当然 SVM ランタイムが増加します。線形カーネルはシンプルで最速です。もちろん、非線形カーネルはもっと時間がかかります。一部のパラメーターは、カーネルの計算の複雑さを増やさない可能性がありますが、より複雑なモデルを強制するため、SVM が最適解を見つけるのにはるかに時間がかかる場合があります。

使用するデータセット:

UCI Machine Learning Repositoryは、データセットの優れたソースです。

MNIST 手書き認識データセットは、使用するのに適したデータセットです。データのサブセットをランダムに選択して、より大きなサイズのデータ​​セットを作成できます。リンクのデータにはすべての数字が含まれていることに注意してください。SVM はもちろんバイナリであるため、データを 2 桁に減らすか、ある種のマルチクラス SVM を実行する必要があります。

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

于 2012-06-14T20:37:15.273 に答える