SupportVectorMachine(SVM)とその周辺
1 :
Vapnik :
2006/07/15(土) 22:21:02 SVMを中心に、そこから派生する話題も取り扱います。 ・ 汎化性能の評価(VC次元など) ・ 最適化(凸解析や最適化アルゴリズム) ・ カーネルトリック及びカーネルの設計
2get!! 塩漬けの予感。
乙 テンプレに何入れる?
主観的な感触だけど、総じてSVMよりLPの方が学習速いし、 判別性能の方もあんましかわらなくない?
9 :
名無しさん@5周年 :2006/07/17(月) 23:05:02
そりゃ問題によりますがな 一応SVMは本質的には(凸の)QPだから適用範囲は広いはず LPで済む問題なら当然速いし汎化性能も変わらないでしょ 本当はVC次元とかで議論すべきなんだろうけどよく分からん・・・
LP, SVM, NNでならどう使い分ける? 複雑化する理由見つけられずに、 線形世界で済んでるって人多いよね。 ところで、なんでシミュ板?
>>10 NNスレの派生なんだけど、どこか別の板が適切だった?
数値実験って意味ではここで合ってると思うけど。
もちろん理論系の人も大歓迎です。
使い分けの話はオレもよくわかんないから聞きたいな。
研究目的かそうでないかで根拠は違ってくるだろうけど。
正直NNスレ探すのも苦労したw
13 :
名無しさん@5周年 :2006/07/18(火) 07:12:50
LPで済むなら当然LP ほとんど無理だと思うわけだが SVMとNNはあまり比べるものではないが、幾つか並べると、 ・SVMは大局解、NNは局所解 NNの初期値依存性はかなり酷い ・SVMはマージン最大化による高い汎化能力を持つ NNは未知の入力に対する出力を全く保証しない ・容易にスパースになる問題においてはSVMの計算速度が上 ごちゃごちゃした問題では逆転する ・基本的にSVMはバッチ学習が前提になる NNはオンラインのほうがむしろ性能が高かったりする ・NNの方が亜種がたくさん 探せば目的に特化したのが見つかるかも なんでLPとSVM・NNを比べてるのかよく分からない 計画問題畑の人はSVMやNNよりSQPに着目してるのかと思ったが ちなみにSVMもNNも研究目的以外ではほとんど活躍しないだろうね
LPでほとんど無理ってなぜ? ある種のセンスはいるけど LPほど適用範囲の広いツールは 他にないと思うが。
15 :
名無しさん@5周年 :2006/07/18(火) 16:40:07
LPは目的関数も制約条件も線形と言う制限がついてるわけで、 >LPほど適用範囲の広いツールは他にない これはひどい 例えばQPはまるまるLPの適用範囲を含みますが
制約条件を線形の範囲で問題をうまく変換するのが ある種のセンスといってるわけで、 LPなら100万元の問題でも解けるけど、 QPなんてNP困難なんだからまともに解けやしないよ。
17 :
名無しさん@5周年 :2006/07/18(火) 17:28:51
LPのほうが速いのは当たり前 LPへの近似はより複雑なモデルで計算不可能になって初めて仕方なくやるもの 近似しないで計算できればそっちがいいから試みる QPくらいなら解く時代になってきてるよ より高次のものをQPに近似しながら解くSQPが流行りで、 近似先すらLPでなくてQPになりつつある ちなみにSVMやNNはそもそも目的関数の形の数式で記述できない問題も扱う (入力と出力の訓練例に対して、SVMなら汎化を、NNなら模倣を試みる) 思想がだいぶ違う
なんか話が逸れてきそうなんで、終わりにするけど、 要するに応用だと問題が100万元超なんてざらで、SVMとLPでの計算時間の差が 100倍以上になったりするから、LPはまだまだ最前線で活躍中ってことさ。 俺が揚げ足取ったから話が曲がっちまったんだな。すまんな。 LPも忘れないでやってくれ。結構使えるやつだから。
19 :
名無しさん@5周年 :2006/07/18(火) 18:01:54
俺が話を理解できてないっぽいな 機械学習畑の人間であまりLPとか使った事ないんだ 申し訳ない SVMとLPを同じ問題に使ってるってのがよく理解できないから できたら何で実験してるのか教えて欲しい 定式化したもののパラメータ求めるならLP,QP他のほうが絶対いいし、 できないならLP他は使えないと思うんだけど
20 :
名無しさん@5周年 :2006/07/18(火) 18:05:42
いや、なんかおかしいな SVM使ったら、その枠組み上で問題が凸二次計画問題になるはずだな 頭のいい人なら直接QPで書けるのか なんか完全に見当違いのこと言ってたね 忘れてくれ
一応、LPで判別、パラメータ学習を行う典型例としては、 正例の特徴ベクトル\vec{p}_1,\vec{p}_2,...,\vec{p}_N 負例の特徴ベクトル\vec{n}_1,\vec{n}_2,...,\vec{n}_M はSVM、LPで共通として、 LPの場合は、 min 農{i,j} q_i + r_j s.t. \vec{v} ・ \vec{p}_i + qi > T \vec{v} ・ \vec{n}_j - rj < T q_i≧0, r_j≧0 という形式が多いかな (\vec{v}, q_i, r_j, Tなどが変数)
22 :
名無しさん@5周年 :2006/07/19(水) 03:22:24
>>21 行列の形でまとめて書くと、
P=(\vec{p}_1^T,...,\vec{p}_N^T)
N=(\vec{n}_1^T,...,\vec{n}_M^T)
\vec{q} = ( q_1,...,q_N )
\vec{r} = ( r_1,...,r_M )
\vec{c} = ( c, c,...,c )
(^T:転置)
として、制約条件:
P\vec{v} + (\vec{q} - \vec{c}) > \vec{0}
N\vec{v} - (\vec{r} + \vec{c}) < \vec{0}
\vec{q}≧\vec{0}, \vec{r}≧\vec{0}
のもとで、損失関数L=農{i,j} q_i + r_jを最小化するよう
\vec{v}, \vec{q}, \vec{r}, \vec{c}を全部求めるって感じですか。
(\vec{v}に関してはノルムとかに制約なし?)
イメージ的には、
正例の特徴ベクトルに対しては> 0、負例に対しては< 0の値を対応させるような
写像f:V(入力空間)→R、具体的にはf(\vec{x}) = \vec{v}・\vec{x} + b (vへの射影)
の形で考えて、あとはfの符号を取れば判別器F:V→{-1,1}が作れそうですね。
q_iやr_jはスラック変数だろうから、ソフトマージンによるlinear-SVMと似た効果かな?
ただ、LPのさわりしか知らないおれには制約条件が難しくて具体的な解法はわかんない。
(
>>21 のレスから勝手に想像して書いたので的外れなこと言ってたらすみません)
>>23 LPでは定数項がない場合に
正例は閾値+1以上、
負例は閾値-1以下、
というように定数を混ぜて、
スケーリングの自由度を
消す場合があります。
ノルムは考えないです。
解法って単体法や内点法のこと?
>>24 > 解法って単体法や内点法のこと?
内点法や単体法にどう持ち込むのかなと思って。
制約条件の部分で、
\vec{v} ・ \vec{p}_i + qi > T
\vec{v} ・ \vec{n}_j - rj < T
とありますが、単にこれを等号にするスラック変数を入れるだけ?
ちなみに
>>23 で言ったスラック変数は罰則対象になる変数という意味で、
LPで言う等号化のためのスラック変数とは別の意味で使いました。
自分で言っておいて混同しちゃったかも。
>>25 適当に書いてしまったけど、おっしゃる通り、
定数項を入れたりして等号付きで書くのが
適切です。
27 :
名無しさん@5周年 :2006/07/21(金) 23:36:28
分かっていないので阿呆なことを聞いているかもしれませんが、 ベジェとかスプライン曲線/曲面など補間でよく使われるような 多項式でカーネルを作ることってできるんですか? もし作れたとしたら、サポートベクトルたちが構成する 超平面も滑らかな曲線/曲面になったりする?
28 :
名無しさん@5周年 :2006/07/22(土) 05:34:10
カーネルって基本的に2つの事例間の類似度を表すものよ カーネルは特徴空間へのマッピングを担当してるだけで、 カーネル関数で近似してるわけではない 別に多項式で作ったっていいけどそれが直接の原因で滑らかになったりはしないはず ってか、特徴空間で線形分離されるだけで、 元の空間に戻れば普通にガウシアンカーネルとかでも曲面だぞ?
29 :
名無しさん@5周年 :2006/07/22(土) 05:36:56
そういえば普通に多項式カーネルってあったね
>>28 ありがとうございます。
> ってか、特徴空間で線形分離されるだけで、
> 元の空間に戻れば普通にガウシアンカーネルとかでも曲面だぞ?
入力の空間の非線形性を関数の空間の線形性で
解決しようというアイデアはなんとなく分かるのですが
また元の空間で超平面を解釈したときの形は
何に依存するんだろうと疑問に思いまして…。
もしかすると、関数の具体的な形というよりも
計量の定め方次第ということなのでしょうか。
滑らかってのは一次微分が連続ってことかな。 どうなんだろ。滑らかな気がするけど。
32 :
名無しさん@5周年 :2006/07/23(日) 18:59:32
>>30 元の空間での分離平面の形に影響してくるのは特徴空間から元の空間に戻す逆写像だろうけど、
カーネルトリックのおかげで写像がどんなものなのかは分からないのね
カーネルって特徴空間の内積を定義してるだけなのよ
関数の形の解釈は難しいんじゃないかな
(線形分離するために高次元の特徴空間に飛ばすわけだから、直接写像の計算はしたくない
だから内積だけ考えるのがカーネルトリック)
評価するならVC次元だけど、滑らかという概念を考えられるのだろうか・・・
カーネルの種類と関係なく、ソフトマージンはかなり効いてくる
あたりまえだけどソフトにすれば滑らかになるけど分類は甘くなる
33 :
名無しさん@5周年 :2006/07/24(月) 07:05:20
>>32 > カーネルトリックのおかげで写像がどんなものなのかは分からないのね
例えばある有限次元ベクトル空間R^nの元\vec{x}と、標準内積で定まるノルム||\vec{x}||
との対応が全単射でない(ある非負実数とR^n上の半径||\vec{x}||の球面全体)ことからすでに
特徴空間上のノルムだけから写像や逆写像の形を具体的に知ることが無理っぽいのは
想像がつくのですが、それならば、具体的な写像と逆写像の形を先に与えておいてから
カーネルを作ることはできないのでしょうか?
安易かもしれませんが、有限次元なら
写像Φ:R^2 → R^3の形を具体的にΦ(\vec{x}) = (x_1, x_2, x_1*x_2)でつくっておいて
カーネル k(\vec{x},\vec{y}) = <Φ(\vec{x}), Φ(\vec{y})>(標準内積)にするとか、
無限次元なら、なんらかの具体的な自乗可積分関数に対応させたりで
作ったりできそうな気もするのですが。
34 :
名無しさん@5周年 :2006/07/24(月) 07:25:51
>>33 作ってもいいけど、計算が大変よ・・・
ってか、計算できるならカーネル使う必要ない
データ数以上の次元に飛ばせば必ず線形分離できるよね、
って話から始まってて、一般に特徴空間は高次元
それを避けるためのカーネルトリックでしかない
35 :
名無しさん@5周年 :2006/07/24(月) 07:39:11
>>34 計算が目的ではなくて、特徴空間で線形的に処理したことが
元の空間にどういう影響をもたらしたかを見てみたいと思いまして。
36 :
名無しさん@5周年 :2006/07/24(月) 07:42:13
写像次第じゃないの? よく使うカーネルトリック使ったのは写像が分からないから関数の形では評価できないと思うよ あーなんかループしてる・・・
37 :
名無しさん@5周年 :2006/07/24(月) 07:59:11
あーそうか もしかして特徴空間へのマッピングがカーネルトリックと思ってるのかな 特徴空間でやろうってのはただの非線形SVMの話で、 ラグランジュの未定乗数法で定式化されるわけだけど、 その目的関数に φ(x1)^Tφ(x2) が含まれるのね φは高次元で計算嫌だからこいつを K(x1,x2) で置き換えてしまうのがカーネルトリック (二次計画問題になるからもともと計算量がヤバイ) カーネルと関係ない話だったのかな
38 :
名無しさん@5周年 :2006/07/24(月) 08:39:28
>>37 凸2次計画問題で定式化した際に出てくる内積の計算を可能に、または
しばしば楽にするためカーネル関数を使うという動機付けは分かります。
しかし、
>>28 や
>>32 を見てやはり大きく勘違いしている気がしてきましたが、
写像した先で線形分離するために、サンプル数より大きな次元を取っている
だけの話で、具体的な写像の形は、元の空間における非線形な境界面の構成に
形として見て取れるほど影響してないということなんですね。
そうなると、カーネル関数を選んだり、パラメータを調節したりする意義が
分からなくなるのですが、無数に存在する分離可能な平面(問題の解)の中から
入力された特徴量に対してよりよい汎化能力を持つ解を選ぶような感じでしょうか。
津田さんのやってたのはどういうことなの? 教えてエロイ人
40 :
名無しさん@5周年 :2006/07/25(火) 01:15:27
>>38 >具体的な写像の形は、元の空間における非線形な境界面の構成に
>形として見て取れるほど影響してない
そんなことはない
高次に飛ばせば特徴空間で必ず線形分離できるけど、
その分離が元の空間にとって良い物であるかは分からないし、
それは写像しだいで変わってくる
適当なカーネルで(そのカーネルの中の)パラメータを極端にしてやってみればすぐ分かるよ
正例のごく周辺だけを正と見てその他の大部分の空間は負とか、
全然意味の無い分類をしだす(訓練例に対する分類は正しくても汎化能力を失っている)
どのカーネルを使ったら上手くいくかってのは多分よく分かってなくて、
(VC次元で頑張って評価している人に怒られそうだが)
カーネルは使いやすいのを選んでそのカーネルに関するパラメータをいじるのが普通かな
あとソフトマージン使うとまたちょっと手間が増える
解は無数にある事になるけど、パラメータを決めた上では大局解に落ち着くから
他の多くの局所解に陥る手法よりはだいぶやり易いと思うよ
41 :
名無しさん@5周年 :2006/07/25(火) 01:48:46
>>41 横槍でトンクス
最近Rの神ページが増えてきて嬉しい
43 :
名無しさん@5周年 :2006/07/25(火) 18:00:23
>>40 ありがとうございます。
特徴空間の上ではマージンを最大化する大域的最適解に落ちてても
それが具体的にどうのように元の空間に影響してるか知るのは難しそうですね。
>>41 早速遊んでみます。
『少年老い易く学成り難し』を書いてる人ですよね。
この人の日記も機械学習の話題が多いのでおもしろく読ませてもらってます。
ttp://noplans.org/~1gac/ 私事ですが、自分もRで色々パラメータやカーネルをいじってみようと
思ってたんですが、e1071を使うとなぜかエラー終了してしまうので
諦めていたのですが、どうやらBlasの差し替えが原因でした…。
44 :
名無しさん@5周年 :2006/07/25(火) 22:06:03
νSVMでνを一定に決めた場合、ρ/|w|の値は異なるカーネル使ったモデル間の評価に使えるもの何ですか?
45 :
名無しさん@5周年 :2006/07/25(火) 22:35:32
ρ/|w|って||α||な気がするけど何の意味が? ||α||はカーネル依存だし、どうやって異なるカーネルの評価を??
46 :
名無しさん@5周年 :2006/07/25(火) 22:41:41
マージンが大きければ大きいほど汎化能力が高いんじゃないんですか? νでマージンエラーを固定すればそのままマージンが評価基準になるのかなぁ〜と思ったんですが。 勉強不足のようなんで出なおしてきます。
47 :
名無しさん@5周年 :2006/07/25(火) 22:43:37
特徴空間で汎化能力高くても元の空間で高いとは限らないよ?
48 :
名無しさん@5周年 :2006/07/25(火) 23:04:07
そっか、よく考えれば<w,φ(x)>/|w|なんだからφ(x)の形が変われば全く意味を成さないか。
49 :
名無しさん@5周年 :2006/07/25(火) 23:18:55
モデルによらずに評価できるVC次元ってのがあるから勉強してみるといいかも なんか結局色んな近似が入って大変な事になってるみたいだけどね 俺はよく知らない
50 :
43 :2006/07/25(火) 23:22:16
# ---- 引数 ---- # x: 二次元の訓練データ(列が変数の行列) # label: 訓練データのラベルのベクトル(-1 or 1) # resol: image表示の際の解像度 # ... : svm()に渡す引数(kernel="sigmoid"など) # ---- 返り値 ---- # svm()の返すものと同じです conplot.svm2d <-function(x, label, resol=c(100,100), ...) { require(e1071) rx <- range(x[,1]) ry <- range(x[,2]) tx <- seq(rx[1], rx[2], len=resol[1]) ty <- seq(ry[1], ry[2], len=resol[2]) grd <- expand.grid(tx, ty) model <- svm(x, label, ...) pred <- predict(model, grd) hmap <- matrix(pred, resol[1]) image(tx, ty, hmap, xlab="", ylab="") contour(tx, tx, hmap, level=0, drawlabels=F, lty=2, add=T) points(x[label == 1,], pch=21, bg="black") points(x[label == -1,], pch=21, bg="white") title("SVM classification", family="serif") invisible(model) } ## Example # library(MASS) # x <- rbind(mvrnorm(100,c(0,0),diag(2)), mvrnorm(100,c(2,2),diag(2)*2)) # label <- rep(c(-1,1), each=100) # conplot.svm2d(x, label, kernel="radial")
51 :
43 :2006/07/25(火) 23:30:38
>>41 を参考にして、svmの学習用Rプログラム
>>50 を組んでみたので
R使いの人はどうぞ持っていってください。
我ながらなかなか使いやすいのではないかと思います。
ってかsvm()のラベルに-1,1を与えるとpredict()で判別器の生の値が
返ってくるって知らなかったよ…。少年老〜ブログの中の人に感謝。
52 :
43 :2006/07/25(火) 23:37:27
>>50 の訂正
> contour(tx, tx, hmap, level=0, drawlabels=F, lty=2, add=T)
contour(tx, ty, hmap, level=0, drawlabels=F, lty=2, add=T)
tx, txじゃなくてtx, tyです。すんません。
>>50 のままだとクラス間の境界のプロットがズレました。
53 :
43 :2006/07/26(水) 00:17:05
>>51 > svmの学習用Rプログラム
ML系のスレで学習用と名付けるのは不適切だった。
単に、お勉強用のスクリプトって意味です。どうでもいいか。
54 :
名無しさん@5周年 :2006/07/26(水) 00:58:16
>>51 ラベルに1,-1を入れてtypeを指定しなかったらSV回帰になっちゃんじゃないか?
55 :
43 :2006/07/26(水) 01:59:05
>>54 マイナーチェンジしました。
これで引数...の中でtypeオプションを指定すれば回帰も判別もOKです。
回帰モードになってたてことは判別器の返す値ではなかったんですね。
(ラベルが数値のときは回帰してますてヘルプに書いてありました…。)
引数のベクトルlabelがnumericのときはRegression
factorのときはClassification(2色の塗り分け)になります。
なんかマズいとこあったら言ってください。
conplot.svm2d <-function(x, label, resol=c(100,100), ...)
{
rx <- range(x[,1])*1.2
ry <- range(x[,2])*1.2
tx <- seq(rx[1], rx[2], len=resol[1])
ty <- seq(ry[1], ry[2], len=resol[2])
grd <- expand.grid(tx, ty)
model <- svm(x, label, ...)
pred <- predict(model, grd)
hmap <- matrix(as.numeric(pred), resol[1])
image(tx, ty, hmap, xlab="", ylab="")
contour(tx, ty, hmap, level=mean(as.numeric(label)), drawlabels=F, lty=2, add=T)
points(x[ label == unique(label)[1],], pch=21, bg="black")
points(x[ label == unique(label)[2],], pch=21, bg="white")
title("SVM - 2D plot (e1071)", family="serif")
invisible(model)
}
56 :
43 :2006/07/26(水) 04:09:34
57 :
名無しさん@5周年 :2006/07/26(水) 10:00:32
predict(model, grd, decision.values = TRUE) attr(pred, "decision.values") ってやれば超平面からの距離が計算できるハズ. あとパッケージkernlabのksvmつかって、 model <- ksvm(y~x) alp <- alpha(model) kernelMult(kernel, x=grd, y = x, z=alp, blocksize = 256) でもいいかと。
58 :
57 :2006/07/26(水) 10:01:39
ミスった pred <- predict(model, grd, decision.values = TRUE) ね。
>>57-58 激サンクス!うまいこと超平面からの距離得られたよ。
ついでにSVにマークも付けておいた。
これでだいぶ分かりやすいプロット画面になったかと。
conplot.svm2d <-function(x, label, resol=c(100,100), ...)
{
rx <- range(x[,1])*1.2
ry <- range(x[,2])*1.2
tx <- seq(rx[1], rx[2], len=resol[1])
ty <- seq(ry[1], ry[2], len=resol[2])
grd <- expand.grid(tx, ty)
model <- svm(x, label, ...)
pred <- predict(model, grd, decision.values=T)
hmap <- matrix(attr(pred, "decision.values"), resol[1], resol[2])
image(tx, ty, hmap, xlab="", ylab="", col=heat.colors(40))
contour(tx, ty, hmap, level=-1:1, drawlabels=F, lty=c(3,1,3), add=T)
points(x[label == unique(label)[1],], pch=21, bg="black")
points(x[label == unique(label)[2],], pch=21, bg="white")
points(x[model$index,], cex=1.6)
title("SVM - 2D plot (e1071)", family="serif")
box()
invisible(model)
}
## Example2: Circle in a Square Problem
# library(mlbench)
# train <- mlbench.circle(100)
# conplot.svm2d(train$x, train$cl, kernel="rad", type="C", gamma=4)
60 :
名無しさん@5周年 :2006/07/30(日) 20:18:07
>>59 中身勝手にアレンジして使わせてもらってます!
>>60 使えるなら勝手に使ってやってください。
すでにお気づきかもしれませんが、表示範囲の設定が
rx <- range(x[,1])*1.2
だと範囲が原点をまたぐときしかうまくいかないので
rx <- range(x[,1])
rx <- rx + scale(rx, scale=F)*(expand-1)
みたいに変えて、expandを拡大倍率の引数に
するなりの修正を加えておいてください。
62 :
名無しさん@5周年 :2006/08/07(月) 20:30:51
普通のSVMとLPSVMの違いって、 正則化項が (α^T)Kα か sum(|α|) かの違いですよね? んでsum(|α|) <= 1なら、(α^T)Kα もなんか適当な定数Mで抑えられますよね? だったら 『max ρ, s.t sum(|α|) <= 1,...』ってやるのも、 『max ρ, s.t (α^T)Kα <= 1,...』 ってやるのも一緒なんじゃねえの? っておもったんだけど、何がだめなの?
63 :
名無しさん@5周年 :2006/08/07(月) 20:40:28
>>62 確認前に書き込んでしまった。
×何がだめなの?
〇何がどう違うんでしょうか?
64 :
名無しさん@5周年 :2006/08/27(日) 21:20:43
age
NIPS2006の査読結果って、いつ頃くるんだろうか。
hosh
67 :
名無しさん@5周年 :2006/10/30(月) 17:38:50
ガウシアンカーネル使ったSVMで判別したいんですが、 データ数や入力次元から計算できるようなカーネルパラメータの目安ってないんですか?
68 :
名無しさん@5周年 :2006/11/19(日) 21:04:55
すいません、svm-lightのmulticlass使いたいんですけど とりあえず原理などはおいておいて、 動かす際のデータの入力ってどうすればいいのでしょう? svm-lightは、未知(これから振り分ける)のデータに対して 0というクラスを与えましたが、 multiclassではどうなるのか。。。 分かる方いらっしゃいましたら ご解答よろしくお願いいたします。
>>68 svm-multiclassでググると使い方書いてるページがあったような
70 :
名無しさん@5周年 :2006/11/26(日) 01:29:09
>>69 さん
それが、未知データに関する記述が見つからないんですよ…。
教師データに関しては書きかたがのっていたのですが。
ぅーむ。
でも、回答ありがとうございました!
71 :
名無しさん@5周年 :2007/01/10(水) 04:22:12
>>68 です。
すいません、svm-lightの分類モードで結果として
得られる数値ってなんなんでしょうか?
sign(g(x))関数に変換(+1、−1)すると、
それぞれのクラスに分類されるんだろうとは思いますが。。。
調べてみると、
決定関数値(decision function)などと書かれているものを見つけました。
が、それがなんなのかよくわからず…。
分離超平面からの距離なのかな〜とも思ったのですが、
周りにsvmを知ってる人間がおらず、
四苦八苦しています。
申し訳ありませんが、ご回答お願いいたします。
>>70 example4のtest.dat見りゃわかるだろ
73 :
>>68 :2007/01/11(木) 03:43:56
>>72 サン
返答ありがとうございます。
test.dat
はもちろん見てみました。
lightの場合は未知クラスは0でしたが、
multiclassではそうではないみたいで、
これをどう振っているのかが分かりませんでした。
>>73 確かtest.datのtargetだけ変えても結果は変わらんだろ?やってみた?
lightにしろmultiにしろtrain.datとtest.datは同フォーマットだからclassificationの際は無視された筈。
lightでtarget=0ってのは未知数って事で、そう定義しても良いだけでtest.datのtargetを全部0にする必要もない筈。
さげると思うな
76 :
名無しさん@5周年 :2007/04/12(木) 10:49:29
SVM大好き
77 :
名無しさん@5周年 :2007/05/01(火) 08:42:01
Rのe1071パッケージを使って遊んでます。 LIBSVM FAQを含めていろいろ調べたのですが、 分からなかったので質問です。 入力に対する重みwを確かめたいのですが、 可能でしょうか?? 2変数だと図化すれば直観的にわかりますが、 変数が多いとどれが効いているのかサッパリ分かりません。
79 :
名無しさん@5周年 :2007/05/04(金) 22:53:02
SVMはだいたい分かったが、肝心の実装であるSMOがぜんぜん分からん。。。 だれかSMOのアルゴリズムと、なぜSMOで最適化できるのかを、分かりやすく説明できる人いない?
80 :
79 :2007/05/25(金) 23:43:11
スレッドストッパーか俺はw 引き続きSequential Minimal Optimizationの解説募集中です。
>>80 SMOとかよく知らないでレスするのもあれだけど
ググるとトップに出てくる
http://research.microsoft.com/users/jplatt/smo.html にある文献じゃ満足できないんでしょうか?
オレも過去に別スレであるアルゴリズムの収束性の検討とか
それが導出できる根拠について聞いたことあるんだけど
そういう質問ってなかなかレスつかないんだよね…。(過疎のせいもあるが)
中にはシュミレーションの結果しかなくて理論が不整備なものもあったりするし。
自分で分かるところまで解説してみて分からない部分を聞いてみた方が
皆も勉強になっていいと思うんだがどうだろうか。
シュミレーションとか言っちゃった
83 :
名無しさん@5周年 :2007/06/15(金) 23:16:20
イインダヨ
84 :
学生 :2007/08/26(日) 20:11:26
統計ソフトRで、パッケージe1071のsvm(),kernlabのksvm()の中身を参考にしながら、 SVM()を最初から作成しようと考えています。 なお、既存のパッケージを使用しないのは、 svmのα(ラグランジュ変数)やマージンの大きさ(正確にはweight vector)などをいじる必要が出てきたからです。 そこで質問なのですが、同じように中身をいじる必要が出てきた場合、みなさんはどのように実現されているんでしょうか? 1)やはり1から自分で作成する必要があるんでしょうか? 2)それとも、上記に挙げたパッケージの関数よりもっと細かい設定・修正ができるパッケージ等(?)があるんでしょうか? 3)もしくは、Rでは困難で、他のソフト(MatLab等?)を使用すべきなんでしょうか? 当方のプログラミングの知識が浅いため、出来ればサンプルや出来合いのものがあれば・・と思ってgoogleなどで聞いてみたんですが見つからず・・ という状況で、同じような研究をされている方おられましたら、ぜひ教えて頂きたいです。
>>84 ソース弄ればええやん
スキル不足ならスキル身に付けろ
86 :
学生 :2007/08/26(日) 22:16:08
>>85 >ソース弄ればええやん
>スキル不足ならスキル身に付けろ
回答ありがとうございます!やっぱり上記
>>84 で示したように、
>統計ソフトRで、パッケージe1071のsvm(),kernlabのksvm()の中身を参考にしながら、
>SVM()を最初から作成しようと考えています。
・・という方法が一番ということですよね?
もしご存知でしたら、これ以外で(私は之を参考に作った等の)サイト・書籍等があれば伺いたいんですが。。
それとも、やはり自作する場合はksvm(),svm()を参考に作るのがBestでしょうか?
>>86 Rスクリプトの部分はデータの整形とかの下準備だけで
本質的な計算はたいていCで書いてるのが多い。
そういう場合、一番手っ取り早いのは、オリジナルのソースをコピーして
それを元に都合良く改変して自分用のライブラリorパッケージを作ること。
オレもそうやってclassパッケージに入ってる線形判別関数の
Cのソースいじってカーネル化したり最適化手法をすげ替えたりしてたわよ。
自分用ライブラリの作成方法はRjpwikiの「Rから他言語利用」に少々書いてある。
情報に不足があれば付属のPDFマニュアル"Writing R Extention"を読む。
88 :
学生 :2007/09/01(土) 20:06:51
>>87 ありがとうございました!
Cは結構弄れる方なので、あとはRとの
インタフェースが分かれば・・と思っていたところです。
コレ↓非常に助かりました!
>自分用ライブラリの作成方法はRjpwikiの「Rから他言語利用」に少々書いてある。
89 :
名無しさん@5周年 :2007/09/03(月) 03:37:12
超がつく程の初心者です 最近,SVMについてかじり始めたのですが polynomial kernel等の各パラメータ値が どのように影響するのか,どのような意味を持っているのかがよくわかりません... svm-lightで,polynomialのオプションとして指定できる d,s,rの中で,dは次元を意味するのはわかるのですが s,rがどこから来たのかどうしても理解できません・・・
俺はSMしかわからんなぁ。 ムチで おちんちんスプラッシュ!!
91 :
名無しさん@5周年 :2007/09/03(月) 11:45:08
ドンマイ
92 :
名無しさん@5周年 :2007/09/08(土) 03:15:55
>>89 どうしても理解できないことなんてそうない。
つまりそれは君の怠惰だ。
そのことを証明するためにSVM_lightを一度も使ったことのない
このオレサマが貴重な時間を割いて今ソースを見てきてやったぞ。
---- svm_learn_main.c 167行
case 'd': i++; kernel_parm->poly_degree=atol(argv[i]); break;
case 'g': i++; kernel_parm->rbf_gamma=atof(argv[i]); break;
case 's': i++; kernel_parm->coef_lin=atof(argv[i]); break;
case 'r': i++; kernel_parm->coef_const=atof(argv[i]); break;
---- svm_common.c 86行
case 1: /* polynomial */
return((CFLOAT)pow(kernel_parm->coef_lin*sprod_ss(a,b)
+kernel_parm->coef_const,(double)kernel_parm->poly_degree));
つまり、この多項式カーネルは K(x,y) = (s*<x,y> + r)^d
<x,y>は標準内積
93 :
89 :2007/09/08(土) 04:45:47
>>92 ありがとうございますっ!
すごく納得できました
怠けることなく,頑張りたいと思います...
ありがとうございましたっ
94 :
名無しさん@5周年 :2007/09/19(水) 23:54:59
よく使われるカーネルの polynomial,sigmoid,gaussian等の 各カーネルの特徴って何なんでしょうか…? 問題によってどのカーネルを選ぶのが適切なのかわからなくって… 一応自分なりに探してはみたんですがいまいちピンと来ませんでした もしよかったら教えてください…
カン
96 :
名無しさん@5周年 :2007/09/20(木) 12:05:03
97 :
名無しさん@5周年 :2007/10/13(土) 17:40:33
線形SVMの実装なら既存のソースをいじるって作るより一から作る方がいいですかね? 当然ですけど既存のは非線形で分離しちゃうじゃないですか。 線形で分離したいんです。
>>97 既存のソース使うなら、線形Kernelが実装されてないやつを
わざわざ選ぶ必要がないんじゃないか?
多項式Kernel使えるならそれの一次でやれば線形なんだし。
手間おしまないなら自分で作るのが勉強になるしいいと思うけど。
99 :
名無しさん@5周年 :2007/10/13(土) 21:08:58
○。・。○。・。○。・。○。・。○。・。○。・。○。・。○。・。○ このレスをみたあなたは・・・31日から17日に ラッキーなことが起きるでしょう。片思いの人と両思いになったり 成績や順位が上ったりetc...でもこのレスをコピペして別々のスレに 59個貼り付けてください。貼り付けなかったら今あなたが10番起きて ほしくないことが起きてしまうでしょう。 コピペするかしないかはあなた次第... ○。・。○。・。○。・。○。・。○。・。○。・。○。・。○。・。○
100 :
名無しさん@5周年 :2007/10/14(日) 15:34:45
>>98 回答ありがとうございます。
時間が惜しいので出来たら既存のソースを弄くりたいと思ってましたが
やはり自分で作ろうかと。
探してもマトラボやRのソースは出てきてもCやC++はあまりないっぽいので。
(C、C++くらいしかいじれないので…)
>>100 例えば
>>5 のSVM lightはCで書かれてるし
コマンドラインですぐ扱えると思うんだけど。
SVMの入力を1,0のバイナリーしかとれないとして(3次元なら立方体) マージン最大をハミング距離最大で考えようとしてるんですけど この考え方って成り立つと思いますか? とりあえずカーネルとかソフトマージンは考えないで線形ハードマージンが 成り立てばと思ってるんですけど ハミング距離が小数になったりして意味わかんないことになるんですよね当然。 ダメかなこの考え
103 :
名無しさん@5周年 :2007/10/17(水) 21:01:42
>>103 windows用の中身はコンパイル済み実行ファイルが入ってる。
解凍した場所でコマンドプロンプト開いて実行するだけ。
使い方はHow to useの通り。
libsvmについて質問なのですが,ソフトマージンではなくハードマージンを設定したいのですがどうしたらよいのでしょうか?
プログラムの知識に乏しいので教えてください Rでe1071のsvm()の損失関数を自分で変化させたくソースを弄る事にしました。 おそらく、デフォルトだと線形の損失関数になってると思うのですが、 それを2次にしたりと自分で書き換えたいのです。 svm()の中の肝心な計算部分svmtrainがCで書かれていることまではわかったんですが、 svmtrainの中のどこを触ったら損失関数が弄れるかがわかりません。 ご存知の方がいましたらご教授願います
脳みそに汗をかけ,若者よ
>>105 しつこくてすいません
だれか分かる方いませんか?
別にlibsvmでなくてもいいんですがソフトマージンありなしを比較したいんです
公開されてるライブラリは使ったこと無いわ 自作のでならやった事あるんだが
>>109 パラメータC→∞にすればハードマージンと同じになるのではないでしょうか
間違っていたらごめんなさい。
112 :
名無しさん@5周年 :2007/11/15(木) 23:18:35
すいません,ものすごく初歩的な質問なのですが LIBSVMで学習,識別を行った後 テストデータの各値毎のカーネル値を見たいのですが どこで見ればいいのでしょうか? プログラムを見てもわかりませんでした・・・ ご教授願います・・・・
107です ここからどうしてもわからないので、わかる方居らっしゃいましたらお力添えお願いします。 LIBSVM(C言語)の損失関数をL2-損失関数に変更して、 「他言語からの利用」を参考にLIBSVM.cppとLIBSVM.hからLIBSVM.dllを作るところまではできました。 この後、e1071のパッケージは読み込まずに、 e1071のsvm関数のソース(PACKAGE=""としてある)だけをコンソールで読ませて、 実行すると、svm.defaultのC言語参照部分「"svmtrain"が見つかりません」となって実行できません。 おそらくLIBSVM.cppに"svmtrain"というルーチンがないからだと思いますが、 svmtrainにあたる、LIBSVM.cppのどのルーチンを呼び出したらいいのかわかりません。 すいません、どなたかご教授お願いします。
113です 失礼しました、svmのソースでPACKAGE=""ではdllファイルが読めませんよね 変更してPACKAGE="LIBSVM"としても、「"svmtrain"がload table上にありません」 となってしまいます。よろしくお願いします。
>>115 さん
解決しました!
LIBSVM.dllをビルドする時に
LIBSVM.cppとLIBSVM.hと「Rsvm.c(e1071のソースにある)」を
一緒にビルドすればいいだけの話でした
ありがとうございました。
Rの質問はリンク先でするようにします、ご指摘ありがとうございます。
117 :
名無しさん@5周年 :2007/11/27(火) 00:24:19
>>117 とりあえずぱっと思いつくのは
\lambda_n = (- \sum_[i=1}^{n-1} \lambda_i y_i) / y_n
カナ?そういうことなのかな?
120 :
名無しさん@5周年 :2007/12/10(月) 15:40:38
>>118 プログラムじゃなくて実際の計算はどうやっているのか?
ってことじゃないですかね?
グッドリサーチに見えた
124 :
名無しさん@5周年 :2007/12/18(火) 17:35:47
>>122 ありがとう。ついでにもうひとつ確認だけど、
グリッドサーチで出てくるError rateって
単純に交差検定で平均とった推定間違い率(1-推定精度)のことだよね?
>>123 言われてみたいなぁ・・・
125 :
名無しさん@5周年 :2008/01/21(月) 20:31:55
SVM_Multiclassって-tオプション使えないんですか?
126 :
名無しさん@5周年 :2008/01/21(月) 22:40:40
>>125 普通に使えるっぽいけど。
それよりも、multiclassの-cの値がよく分からんです。
127 :
名無しさん@5周年 :2008/01/22(火) 18:12:42
>>126 -cはマージンの間隔じゃないでしょうか??
ーcを大きくしたらトレーニングデータに対して過学習になるのに対して、小さくしたらトレーニングデータに対しての認識率は低くなりますが、テストデータに対しては良くなる可能性もあるはずです。
私の方はSVM_MulticlassでRBFカーネルを使用したいんですが、-t 2 のオプションが使用できないんですよ…。
オーム社から出た小野寺本オススメ
129 :
名無しさん@5周年 :2008/01/23(水) 00:44:19
>>127 C > 0 is a constant that controls the trade off between training error minimization and margin maximization. (下のリファレンスの論文より)
ソフトマージンの式のペナルティ項の係数みたいですね。一応理解しました。
-t 2オプションは、もしかしたら位置が間違ってるのではないですか?
./svm_multiclass_learn -t 2 -c ~~~~~
でいけました。末端の位置に-tオプションを置いても、-tの値に関わらず全て線形分類になるみたいです。
>>128 Amazonで「オーム社 小野寺」で検索しても、
スレに無関係な本が1冊ひっかかるだけです。
オーム社から出た小野寺本はこれ以外に存在するんですか?
そしてこのスレに関係ある本なのですか?
誤爆や釣りでないなら本のタイトルをお願いします。
「見方・考え方 合金状態図」
三浦 憲司 (著), 小野寺 秀博 (著), 福富 洋志 (著)
オーム社 (2003/11)
http://www.amazon.co.jp/dp/4274087441
LibSVMでone-class SVM使おうと思うんだけど、grid.pyでパラメータがうまくでないんです…。 grid用のデータは1クラス分の教師データではダメなんでしょうか?
one-class SVMは教師なし学習だから、grid searchは無意味だよ
>>134 やっぱりそうですよね。ありがとうございます。
ということは、νやRBFカーネルのγはヒューリスティックに探すしかないんですかね…。
LibSVMでカーネルがRBFのときより線形や多項式の方が精度がいいっていうのはどういう場合に起こるんでしょうか??
データの生成法がそういうものだった時
138 :
名無しさん@5周年 :2008/03/13(木) 12:07:59
只今勉強中で以下について教えていただければ幸いです。 RBFカーネルk(x,y)=exp(-beta*||x-y||^2)を使うと 特徴空間上の距離は ||phi(x)-phi(y)||=sqrt(2*(1-exp(-beta*||x-y||^2)) となって、 元空間の距離について単調増加、元空間の距離->∞でsqrt(2)に収束する。 これは元空間で遠いものが特徴空間ではほぼ等距離に扱われる。 (...だから何なの?...) これが 「元空間では線形分離不能だったものが特徴空間で線形分離可能になる」...(*) 仕組みなのでしょうか? 遠いものを一緒くたに扱ったからといってうまくいくとは思えないのですが、 それとも別の解釈で結論(*)が導かれるのでしょうか? 良きアドバイスを頂ければ幸いです。
one-class SVMでデータ全体の20%だけ抽出するには パラメータをどうするといいのでしょうか?
140 :
名無しさん@5周年 :2008/05/17(土) 07:49:38
NNが重みを記録しておいて後から読み出せば使えるように、SVMでもこれを記録しとけば再び最初から学習させなくても使えるようになるものってないんでしょうか
そんな使えない分類器が流行っていると思ってたのかw サポートベクタ記録しとけ
142 :
名無しさん@5周年 :2008/07/10(木) 00:14:41
>>138 phi(x)の次元がトレーニングデータの件数より多くなれば線形分離可能になるってだけじゃないの?
距離がどうこうだからってのは聞いたことないな。
143 :
名無しさん@5周年 :2008/08/10(日) 21:55:45
Rのkernlabパッケージの二次計画ソルバーipopを使ってSVMを実装しました。 これは、helpにもあるように簡単に実装できました。 問題は回帰(SVR)の場合です。αとα´について最適化しなければならないので、 やはりipopでは実装できないのでしょうか? SVRの制約条件に簡単に修正を入れたモデルを考えているのですが… 実装の方法をアドバイスいただければと思います。 よろしくおねがいしいます。
他人に訊く前にまず自分で良〜く考えろ 脳味噌が汗かく位な
145 :
名無しさん@5周年 :2008/08/12(火) 18:17:58
自分なりによく考えてみたのですが…それでも分からず質問させていただきました。 速度などはあまり気にせず、Rを使ってSVRの定式化に修正を加えて実装できる方法があれば、 ぜひアドバイスいただきたいです。
まず自分で考えたことを書いて それに対する批判なりアドバイスなりを頼むのが筋 ってーかエスパーじゃないんだからそんな質問に答えられる人間はいないだろjk
147 :
名無しさん@5周年 :2008/08/24(日) 12:09:56
SVMの損失関数はどのようなものが定式化されているのでしょうか? 今私が扱っている問題ではヒンジロスははずれ値の影響が強すぎる と感じているので、0-1ロスのようなものが望ましいのですが、 ラグランジュをとくところでそんなに簡単に定式化できなさそうなので 既存にどんなものがあるのか教えていただきたいです。
148 :
名無しさん@5周年 :2008/09/02(火) 15:13:59
NNの情報を探していてSVMにたどりついたのですが、例えば日毎の 気温データから翌日の気温を予測したりするのに使えるでしょうか? NNなら直前10日間の気温を入力、次の日の気温を教師にして学習とか するのかと思うのですがこれをSVMでやるにはどうやればよいんでしょうか?
>>148 直前10日間の気温を入力、次の日の気温を教師にして学習
>>149 さっきlibsvmてのを拾ってきたのですが、学習ファイルには1行に
x日の気温 1:x-1日の気温 2:x-2日の気温 ... 10:x-10日の気温
というのをN日分用意してsvm-trainするだけでいいんでしょうか。
この手のサンプルはどれにあたるんでしょ、まだmakeしてheartで試しただけなので
svmの最初の論文でたのいつだっけ? 今じゃいろんなとこに広まってるんだな
1990年くらい?
>>151 線形svm自体は古いんじゃないか。
90年代にカーネルトリックで非線形対応になって
初めて流行したと記憶してる。
wikipediaで調べてみたが、
The original optimal hyperplane algorithm proposed by
Vladimir Vapnik in 1963 was a linear classifier.
However, in 1992, Bernhard Boser, Isabelle Guyon and Vapnik
suggesteda way to create non-linear classifiers by applying
the kernel trick (originally proposed by Aizerman et al..)
to maximum-margin hyperplanes.
http://en.wikipedia.org/wiki/Support_vector_machine 63年初出、92年にカーネルトリック導入し大ブームってとこか。
思ったより古いね。
154 :
名無しさん@5周年 :2008/09/24(水) 23:31:58
SVM_lightで識別を行うための学習データセット、テストデータセットの作り方 が良くわかりません。exmapleは見てみたのですが…。 例えば、UCIのIrisデータをSVMに学習、クラス分類させるにはどのように書き 直したらいいのでしょうか?
再生核ヒルベルト空間がわからん VC理論も全然わからん
まず基本的な数学と 基本的なプログラミングを学べよ
やっぱ、関数解析とかの勉強から始めなきゃだめか
158 :
名無しさん@5周年 :2008/10/24(金) 02:15:00
SVRの中身いじって実装したいんだけど、お薦めの方法ある?
159 :
名無しさん@5周年 :2008/11/13(木) 17:41:20
tinysvmを使って分類を行いたいのですが、<target>に1か-1しか指定していないデータを学習させようとしても "This data have real-value class label." というエラーが出てしまいます。 原因が分かる方がいたら教えて頂きたいです。 ちなみに、同じデータでも回帰モードでは学習することが出来ます。
赤穂さんのカーネル多変量解析の本ってどう?
161 :
名無しさん@5周年 :2009/02/03(火) 12:51:41
NNと同様SVMでもノイズをのせることで凡化能力があがった、という報告ってありますか?
ぼ、、、汎化能力、、、
オレの頭も凡化してきた
フフフ・・・ 我が凡化能力によって凡人と化すがよいわ フフハハハハ
初学者でまだまだ何もわかってません。 ネットを巡回してると、SVMはNNからの派生、のように書かれて いる事があるんですが、どのような関係になっているのでしょうか。 イメージとしては(ベン図みたく)、機械学習の中にNN、SVMがあって その二つに共通部分があるという認識でよろしいでしょうか? それとも、元はNNの中にsvmがあった感じなんでしょうか?
166 :
名無しさん@5周年 :2009/07/12(日) 21:38:20
>>165 SVMはパーセプトロンと同じ線形識別器で、識別平面の決め方が違う。
パーセプトロンは識別誤差が0になったら学習を止めるけど、SVMはマージンを最大化する。
パーセプトロンは線形識別器なので非線形識別が必要な問題には使えない。
そこで、基底関数で変換してからパーセプトロンしよう、ってのがNN。
同様に、カーネル関数と呼ばれるクラスの基底関数で変換してからSVMしようってのがカーネルSVM。
多くの場合これは単にSVMって呼ばれるけど、本来SVMは単なる線形識別器。
カーネル関数を使うと、カーネル関数で定義される空間(たとえばガウスカーネルだと無限次元の空間)上でSVMしていると解釈することができる。
無限次元空間上での線形識別なんてとても計算できなさそうだけど、カーネル関数の値が実はこの空間上での内積値になってるよ、というのがカーネルトリック。
ということでSVMはNNの一手法とかってことはないんだけど、まぁかなり似てるよね。
>>165 NNはnearest neighborのほうだと思うのだけど、NNもSVMも、すべての点との距離を比較して判別する点は同じ。
NNでは単純に一番近い点を探すけど、SVMではハズレ点を無視したり境界がなるべく公平になるような数値操作を行う。そこの処理が非常に重い
脈絡なしにNNと書くのはnearerst neighborかneural networkかわからないので、避けたほうがいいと思われ
>>167 パーセプトロンは線形識別器だけど、次元増やす操作すれば非線形に対応できるよ。
>>167 >>168 >>169 どうもです。
大分理解が深まった気がします。
ちなみに、neural network のつもりでした、気をつけます。
171 :
名無しさん@5周年 :2009/07/19(日) 22:47:24
SVM初心者です。よろしくお願いします。 説明変数(入力の特徴量 1600次元)と目的変数(20くらいの変数を持つベクトル)の 関係データが大量にあって、説明変数から目的変数を得るための回帰をしたいと 思うのですが、SVMの回帰で可能でしょうか? SVM light で回帰をやろうとすると目的変数が1つしかなくてベクトルで 設定できないようで。 可能なソフトがないでしょうか? そもそもSVMの回帰で目的変数をベクトルにすることはできないのでしょうか? よろしくお願いします。
>>171 回帰の場合はSupport Vector Regression(SVR)。
回帰問題では入力の条件付き出力を推定するので、出力のある次元はほかの次元とは無関係に推定されます。
なので出力の次元ごとに1次元出力のSVRをすればおk。
173 :
名無しさん@5周年 :2009/07/20(月) 21:43:41
>>171 ありがとうございます。
自分も最初は1次元を全て独立にやるのか?と思ったんですが、
統計の本の回帰分析だと、各説明変数の係数は出力の各次元に対して同一
に書いてあって(y=Xb y、bはベクトルでXが行列みたいな)
独立にやるものではないように思っていました。
SVRだと一般の回帰とは違うからくりがあるということでしょうか?
理解不足ですみません。
>>173 通常の回帰分析の解も、出力の各次元で独立に解いた場合と同じになります。
入力の次数をL、出力の次数をMとしてMxLの回帰行列Wによる線形回帰モデルを
f(x)=W^T x
とすると、多次元出力の場合の最小二乗解は
W=(X^T X)^-1 X^T Y
になります。
XとYはn行目にn番目の入力xと出力yを行ベクトルとして持つ行列です。
m番目の出力の回帰モデルを
f_m(x)=(w_m)^T x
とすると最小二乗解は
w_m=(X^T X)^-1 X^T y_m
になります。
y_mはn行目にn番目の入力xに対応するm番目の出力を持つベクトルです。
これって、さっきの全部の出力を考慮した場合の解のm列目を取ってきたものになってます。
こういう風に独立に推定できるのは、異なる出力を独立にモデル化しているところから来ているので、SVRだからというわけではありません。
異なる出力の相関を考慮するモデルなども提案されていると思うのですが、そういうのはまだ一般的なライブラリになっていないと思います。
175 :
174 :2009/07/20(月) 23:36:52
訂正「MxL行列」→「LxM行列」でした。
176 :
名無しさん@5周年 :2009/08/12(水) 11:46:46
SVM lightのオプション-cって デフォルトが[avg. x*x]^-1 って書いてあるんだけど どういう意味なんでしょうか?
177 :
名無しさん@5周年 :2009/09/17(木) 08:00:06
PAC学習が全然わからん
178 :
名無しさん@5周年 :2010/02/03(水) 15:46:10
最近、識別モデルのSVMより確率モデルのCRFの方が優秀な場合が多いらしいけど。
Libsvmで、svm predict value 使ってdecision valueを求めたいのだけど、なんでか値が-1#IND00000とかなる。なんでなんですやろ。
180 :
名無しさん@5周年 :
2010/07/02(金) 22:48:05 SVMで作成した判別関数の係数の値とか、項がいくつあるかというような 情報を得ることはできないんだっけ?