2016-07-31 8 views
-1

私はSVMを勉強していますが、これは基本的すぎる、原始的で時間がかかっていますが、実際にどのように動作しているのか見たいだけでした。残念ながら、私は何を取りこぼしたか?いくつかのコーディングエラーまたは数学的な間違い?データセットを見たい場合は、ここにリンクがあります。私はUCI Machine Learning Repositoryからそれを取り出しました。あなたの取引に感謝します。サポートベクターマシン悪い結果 - Python

def hypo(x,q): 
    return 1/(1+np.exp(-x.dot(q))) 

data=np.loadtxt('LSVTVoice',delimiter='\t'); 

x=np.ones(data.shape) 
x[:,1:]=data[:,0:data.shape[1]-1] 
y=data[:,data.shape[1]-1] 

q=np.zeros(data.shape[1]) 
C=0.002 

##mean normalization 
for i in range(q.size-1): 
    x[:,i+1]=(x[:,i+1]-x[:,i+1].mean())/(x[:,i+1].max()-x[:,i+1].min()); 

for i in range(2000): 
    h=x.dot(q) 
    for j in range(q.size): 
     q[j]=q[j]-(C*np.sum( -y*np.log(hypo(x,q))-(1-y)*np.log(1-hypo(x,q))) ) + (0.5*np.sum(q**2)) 

for i in range(y.size): 
    if h[i]>=0: 
     print y[i],'1'  
    else: 
     print y[i],'0' 
+0

。ライブラリーコールが表示されないので、自分でsvm-algorithmを実装したとしますか?どこ? 2番目のループ?それは何でしょうか? SGD?座標降下? – sascha

答えて

0

データによっては、SVMのシンプル・インプリメンテーションが悪い結果をもたらすことは非常に普通です。 SVM実装上のアドバンストバージョン(例えばSickit SVM)を試す必要があります。https://github.com/scikit-learn/scikit-learn/tree/master/sklearn/svm

SVMには、さまざまなカーネル(例:rbf)のような実装およびパラメータのタイプがあります。それらをチェックして、異なるパラメータ(データに応じて)で試してみて、結果を互いに比較しなければなりません。

あなたは(このチェック:http://scikit-learn.org/stable/modules/grid_search.html)を比較するためのグリッド検索アプローチを使用することができますたぶん、あなたはコードが何をしているのか、少し説明する必要があり

+1

ここにいくつかの真実がありますが、私はそれが少し誤解していると思います。私はカーネルベースのSVM *を上級*と呼んでいませんが(それらは効率的に実装する方がより複雑ですが)、それらはまったく異なるモデルです。また、rbfのようなカーネルは線形SVMの解を近似することができますが、多くのアプリケーションが線形アプローチ(NLPのような非常に高次元なデータでCVを見つけるには手間がかかりますそのrbfカーネルを動かす)。また、さまざまなsvm-solvers(カットプレーン、sgd、cd)はソリューションに関しては違いはありませんが、効率とパラメータ依存 – sascha