SupportVectorMachine(SVM)とその周辺

このエントリーをはてなブックマークに追加
1Vapnik
SVMを中心に、そこから派生する話題も取り扱います。

・ 汎化性能の評価(VC次元など)
・ 最適化(凸解析や最適化アルゴリズム)
・ カーネルトリック及びカーネルの設計
2名無しさん@5周年 :2006/07/15(土) 22:55:24
2get!!
塩漬けの予感。
3名無しさん@5周年:2006/07/16(日) 18:40:02

テンプレに何入れる?
4名無しさん@5周年:2006/07/16(日) 20:04:01
とりあえずドメインまでとって気合いいれているところたちage
すみずみまで見たわけではないのでいいサイトかどうかはわからん
http://www.support-vector-machines.org/
http://www.support-vector.net/
http://www.svms.org/
5名無しさん@5周年:2006/07/16(日) 20:06:23
有名どころライブラリ
LIBSVM -- A Library for Support Vector Machines
http://www.csie.ntu.edu.tw/~cjlin/libsvm/
SVM-Light Support Vector Machine
http://www.cs.cornell.edu/People/tj/svm_light/
6名無しさん@5周年:2006/07/16(日) 20:08:57
7名無しさん@5周年:2006/07/16(日) 20:48:12
Wikipedia(en)
http://en.wikipedia.org/wiki/Support_vector_machine
リンク集にもなってるのでとりあえず。

以下、入門資料編

日本語資料
http://www.neurosci.aist.go.jp/~akaho/kernel.html
http://staff.aist.go.jp/takio-kurita/index-j.html

Scholkopfの本
http://www.learning-with-kernels.org/
前半部の中身を丸ごと公開してる。
チュートリアルは分かりやすいのでオススメ。
8名無しさん@5周年:2006/07/17(月) 20:27:45
主観的な感触だけど、総じてSVMよりLPの方が学習速いし、
判別性能の方もあんましかわらなくない?
9名無しさん@5周年:2006/07/17(月) 23:05:02
そりゃ問題によりますがな
一応SVMは本質的には(凸の)QPだから適用範囲は広いはず
LPで済む問題なら当然速いし汎化性能も変わらないでしょ

本当はVC次元とかで議論すべきなんだろうけどよく分からん・・・
10名無しさん@5周年:2006/07/18(火) 02:26:10
LP, SVM, NNでならどう使い分ける?
複雑化する理由見つけられずに、
線形世界で済んでるって人多いよね。

ところで、なんでシミュ板?
11名無しさん@5周年:2006/07/18(火) 05:05:56
>>10
NNスレの派生なんだけど、どこか別の板が適切だった?
数値実験って意味ではここで合ってると思うけど。
もちろん理論系の人も大歓迎です。

使い分けの話はオレもよくわかんないから聞きたいな。
研究目的かそうでないかで根拠は違ってくるだろうけど。
12名無しさん@5周年:2006/07/18(火) 07:00:54
正直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も研究目的以外ではほとんど活躍しないだろうね
14名無しさん@5周年:2006/07/18(火) 15:59:53
LPでほとんど無理ってなぜ?
ある種のセンスはいるけど
LPほど適用範囲の広いツールは
他にないと思うが。
15名無しさん@5周年:2006/07/18(火) 16:40:07
LPは目的関数も制約条件も線形と言う制限がついてるわけで、
>LPほど適用範囲の広いツールは他にない
これはひどい

例えばQPはまるまるLPの適用範囲を含みますが
16名無しさん@5周年:2006/07/18(火) 17:14:47
制約条件を線形の範囲で問題をうまく変換するのが
ある種のセンスといってるわけで、
LPなら100万元の問題でも解けるけど、
QPなんてNP困難なんだからまともに解けやしないよ。
17名無しさん@5周年:2006/07/18(火) 17:28:51
LPのほうが速いのは当たり前
LPへの近似はより複雑なモデルで計算不可能になって初めて仕方なくやるもの
近似しないで計算できればそっちがいいから試みる

QPくらいなら解く時代になってきてるよ
より高次のものをQPに近似しながら解くSQPが流行りで、
近似先すらLPでなくてQPになりつつある


ちなみにSVMやNNはそもそも目的関数の形の数式で記述できない問題も扱う
(入力と出力の訓練例に対して、SVMなら汎化を、NNなら模倣を試みる)
思想がだいぶ違う
18名無しさん@5周年:2006/07/18(火) 17:52:52
なんか話が逸れてきそうなんで、終わりにするけど、
要するに応用だと問題が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で書けるのか
なんか完全に見当違いのこと言ってたね
忘れてくれ
21名無しさん@5周年:2006/07/18(火) 18:37:12
一応、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
なんだか楽しそうなwiki発見。こんなのあったんですね。
http://www.neurosci.aist.go.jp/ibisforest/index.php?FrontPage

管理人は神嶌氏&赤穂氏だそうで
23名無しさん@5周年:2006/07/19(水) 04:35:49
>>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のレスから勝手に想像して書いたので的外れなこと言ってたらすみません)
24名無しさん@5周年:2006/07/19(水) 07:15:13
>>23
LPでは定数項がない場合に
正例は閾値+1以上、
負例は閾値-1以下、
というように定数を混ぜて、
スケーリングの自由度を
消す場合があります。
ノルムは考えないです。
解法って単体法や内点法のこと?
25名無しさん@5周年:2006/07/19(水) 08:18:06
>>24
> 解法って単体法や内点法のこと?
内点法や単体法にどう持ち込むのかなと思って。
制約条件の部分で、

\vec{v} ・ \vec{p}_i + qi > T
\vec{v} ・ \vec{n}_j - rj < T

とありますが、単にこれを等号にするスラック変数を入れるだけ?

ちなみに>>23で言ったスラック変数は罰則対象になる変数という意味で、
LPで言う等号化のためのスラック変数とは別の意味で使いました。
自分で言っておいて混同しちゃったかも。
26名無しさん@5周年:2006/07/19(水) 21:00:18
>>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
そういえば普通に多項式カーネルってあったね
30名無しさん@5周年:2006/07/22(土) 08:38:54
>>28
ありがとうございます。

> ってか、特徴空間で線形分離されるだけで、
> 元の空間に戻れば普通にガウシアンカーネルとかでも曲面だぞ?

入力の空間の非線形性を関数の空間の線形性で
解決しようというアイデアはなんとなく分かるのですが
また元の空間で超平面を解釈したときの形は
何に依存するんだろうと疑問に思いまして…。

もしかすると、関数の具体的な形というよりも
計量の定め方次第ということなのでしょうか。
31名無しさん@5周年:2006/07/22(土) 14:07:21
滑らかってのは一次微分が連続ってことかな。
どうなんだろ。滑らかな気がするけど。
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を見てやはり大きく勘違いしている気がしてきましたが、
写像した先で線形分離するために、サンプル数より大きな次元を取っている
だけの話で、具体的な写像の形は、元の空間における非線形な境界面の構成に
形として見て取れるほど影響してないということなんですね。

そうなると、カーネル関数を選んだり、パラメータを調節したりする意義が
分からなくなるのですが、無数に存在する分離可能な平面(問題の解)の中から
入力された特徴量に対してよりよい汎化能力を持つ解を選ぶような感じでしょうか。
39名無しさん@5周年:2006/07/25(火) 00:52:46
津田さんのやってたのはどういうことなの?
教えてエロイ人
40名無しさん@5周年:2006/07/25(火) 01:15:27
>>38
>具体的な写像の形は、元の空間における非線形な境界面の構成に
>形として見て取れるほど影響してない
そんなことはない
高次に飛ばせば特徴空間で必ず線形分離できるけど、
その分離が元の空間にとって良い物であるかは分からないし、
それは写像しだいで変わってくる

適当なカーネルで(そのカーネルの中の)パラメータを極端にしてやってみればすぐ分かるよ
正例のごく周辺だけを正と見てその他の大部分の空間は負とか、
全然意味の無い分類をしだす(訓練例に対する分類は正しくても汎化能力を失っている)

どのカーネルを使ったら上手くいくかってのは多分よく分かってなくて、
(VC次元で頑張って評価している人に怒られそうだが)
カーネルは使いやすいのを選んでそのカーネルに関するパラメータをいじるのが普通かな
あとソフトマージン使うとまたちょっと手間が増える

解は無数にある事になるけど、パラメータを決めた上では大局解に落ち着くから
他の多くの局所解に陥る手法よりはだいぶやり易いと思うよ
41名無しさん@5周年:2006/07/25(火) 01:48:46
>>38
ttp://noplans.org/~1gac/html/R/index.htmlの『07 パタン識別(2)』
あたりを参考にして、カーネルやパラメータをいじって遊んでみるといいかも。
42名無しさん@5周年:2006/07/25(火) 08:30:31
>>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次元ってのがあるから勉強してみるといいかも
なんか結局色んな近似が入って大変な事になってるみたいだけどね

俺はよく知らない
5043: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")
5143:2006/07/25(火) 23:30:38
>>41を参考にして、svmの学習用Rプログラム>>50を組んでみたので
R使いの人はどうぞ持っていってください。
我ながらなかなか使いやすいのではないかと思います。

ってかsvm()のラベルに-1,1を与えるとpredict()で判別器の生の値が
返ってくるって知らなかったよ…。少年老〜ブログの中の人に感謝。
5243: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のままだとクラス間の境界のプロットがズレました。
5343:2006/07/26(水) 00:17:05
>>51
> svmの学習用Rプログラム

ML系のスレで学習用と名付けるのは不適切だった。
単に、お勉強用のスクリプトって意味です。どうでもいいか。
54名無しさん@5周年:2006/07/26(水) 00:58:16
>>51
ラベルに1,-1を入れてtypeを指定しなかったらSV回帰になっちゃんじゃないか?
5543: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)
}
5643:2006/07/26(水) 04:09:34
Classificationの場合、predict()は二値しか返せないのだろうか…。
ttp://noplans.org/~1gac/d/blosxom.py/works/machine_learning/m9.html
同氏のこんな感じのプロットが理想形だったんだけど。

"Learning Kernel Classifiers"のSoftware Resourceのページも紹介してあったけど
http://www.learning-kernel-classifiers.org/software_resources.htm
ここはR使いの人には参考になりそうです。

なんか完全にRの話題に逸れてしまって申し訳ない。
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)
でもいいかと。
5857 :2006/07/26(水) 10:01:39
ミスった
pred <- predict(model, grd, decision.values = TRUE)
ね。
59名無しさん@5周年:2006/07/26(水) 17:11:39
>>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
中身勝手にアレンジして使わせてもらってます!
61名無しさん@5周年:2006/07/30(日) 21:03:43
>>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
65名無しさん@5周年:2006/08/30(水) 17:36:51
NIPS2006の査読結果って、いつ頃くるんだろうか。
66名無しさん@5周年:2006/10/12(木) 06:50:26
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ではどうなるのか。。。
分かる方いらっしゃいましたら
ご解答よろしくお願いいたします。
69名無しさん@5周年:2006/11/20(月) 22:15:30
>>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を知ってる人間がおらず、
四苦八苦しています。

申し訳ありませんが、ご回答お願いいたします。
72名無しさん@5周年:2007/01/10(水) 06:32:21
>>70
example4のtest.dat見りゃわかるだろ
73>>68:2007/01/11(木) 03:43:56
>>72サン
返答ありがとうございます。
test.dat
はもちろん見てみました。
lightの場合は未知クラスは0でしたが、
multiclassではそうではないみたいで、
これをどう振っているのかが分かりませんでした。
74名無しさん@5周年:2007/01/11(木) 06:56:11
>>73
確かtest.datのtargetだけ変えても結果は変わらんだろ?やってみた?
lightにしろmultiにしろtrain.datとtest.datは同フォーマットだからclassificationの際は無視された筈。
lightでtarget=0ってのは未知数って事で、そう定義しても良いだけでtest.datのtargetを全部0にする必要もない筈。
75名無しさん@5周年:2007/01/12(金) 15:39:49
さげると思うな
76名無しさん@5周年:2007/04/12(木) 10:49:29
SVM大好き
77名無しさん@5周年:2007/05/01(火) 08:42:01
Rのe1071パッケージを使って遊んでます。
LIBSVM FAQを含めていろいろ調べたのですが、
分からなかったので質問です。
入力に対する重みwを確かめたいのですが、
可能でしょうか??
2変数だと図化すれば直観的にわかりますが、
変数が多いとどれが効いているのかサッパリ分かりません。
78名無しさん@5周年:2007/05/04(金) 15:03:50
日本語資料に下記ページも入れてください。
Support Vector Machine って,なに?
http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/index.htm

日本語の本はこれだけでしょうか?
サポートベクターマシン入門 (訳書)
http://www.amazon.co.jp/dp/4320121341
An Introduction to Support Vector Machines (原書)
http://www.amazon.co.jp/dp/0521780195
79名無しさん@5周年:2007/05/04(金) 22:53:02
SVMはだいたい分かったが、肝心の実装であるSMOがぜんぜん分からん。。。

だれかSMOのアルゴリズムと、なぜSMOで最適化できるのかを、分かりやすく説明できる人いない?
8079:2007/05/25(金) 23:43:11
スレッドストッパーか俺はw
引き続きSequential Minimal Optimizationの解説募集中です。
81名無しさん@5周年:2007/05/28(月) 18:54:23
>>80
SMOとかよく知らないでレスするのもあれだけど
ググるとトップに出てくる
http://research.microsoft.com/users/jplatt/smo.html
にある文献じゃ満足できないんでしょうか?

オレも過去に別スレであるアルゴリズムの収束性の検討とか
それが導出できる根拠について聞いたことあるんだけど
そういう質問ってなかなかレスつかないんだよね…。(過疎のせいもあるが)
中にはシュミレーションの結果しかなくて理論が不整備なものもあったりするし。

自分で分かるところまで解説してみて分からない部分を聞いてみた方が
皆も勉強になっていいと思うんだがどうだろうか。
82名無しさん@5周年:2007/05/28(月) 19:17:35
シュミレーションとか言っちゃった
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などで聞いてみたんですが見つからず・・
という状況で、同じような研究をされている方おられましたら、ぜひ教えて頂きたいです。
85名無しさん@5周年:2007/08/26(日) 21:08:36
>>84
ソース弄ればええやん
スキル不足ならスキル身に付けろ
86学生:2007/08/26(日) 22:16:08
>>85
>ソース弄ればええやん
>スキル不足ならスキル身に付けろ

回答ありがとうございます!やっぱり上記 >>84 で示したように、
>統計ソフトRで、パッケージe1071のsvm(),kernlabのksvm()の中身を参考にしながら、
>SVM()を最初から作成しようと考えています。

・・という方法が一番ということですよね?
もしご存知でしたら、これ以外で(私は之を参考に作った等の)サイト・書籍等があれば伺いたいんですが。。
それとも、やはり自作する場合はksvm(),svm()を参考に作るのがBestでしょうか?
87名無しさん@5周年:2007/09/01(土) 05:18:27
>>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がどこから来たのかどうしても理解できません・・・
90名無しさん@5周年:2007/09/03(月) 05:38:30
俺は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>は標準内積
9389:2007/09/08(土) 04:45:47
>>92

ありがとうございますっ!
すごく納得できました
怠けることなく,頑張りたいと思います...
ありがとうございましたっ
94名無しさん@5周年:2007/09/19(水) 23:54:59
よく使われるカーネルの
polynomial,sigmoid,gaussian等の
各カーネルの特徴って何なんでしょうか…?
問題によってどのカーネルを選ぶのが適切なのかわからなくって…
一応自分なりに探してはみたんですがいまいちピンと来ませんでした
もしよかったら教えてください…
95名無しさん@5周年:2007/09/20(木) 00:13:08
カン
96名無しさん@5周年:2007/09/20(木) 12:05:03
このレスを見たあなたは確実に交通事故に会います



逃れる方法はただ一つ
↓このスレに行き
http://game12.2ch.net/test/read.cgi/gamerpg/1190004222/



デア・リヒター最強



と書き込んでください。書き込まなければ確実に明日交通事故にあいますよ
97名無しさん@5周年:2007/10/13(土) 17:40:33
線形SVMの実装なら既存のソースをいじるって作るより一から作る方がいいですかね?
当然ですけど既存のは非線形で分離しちゃうじゃないですか。
線形で分離したいんです。
98名無しさん@5周年:2007/10/13(土) 18:43:24
>>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++くらいしかいじれないので…)
101名無しさん@5周年:2007/10/15(月) 05:36:38
>>100
例えば>>5のSVM lightはCで書かれてるし
コマンドラインですぐ扱えると思うんだけど。
102名無しさん@5周年:2007/10/17(水) 15:19:18
SVMの入力を1,0のバイナリーしかとれないとして(3次元なら立方体)
マージン最大をハミング距離最大で考えようとしてるんですけど
この考え方って成り立つと思いますか?

とりあえずカーネルとかソフトマージンは考えないで線形ハードマージンが
成り立てばと思ってるんですけど
ハミング距離が小数になったりして意味わかんないことになるんですよね当然。
ダメかなこの考え
103名無しさん@5周年:2007/10/17(水) 21:01:42
>>101
ほんとですね、どこを探してたんだろ自分。
でもこれここ
ttp://download.joachims.org/svm_light/current/svm_light_windows.zip
からダウンロードしたのだけでコマンドラインで動かすこと出来ますか?
その下のインストールと使い方ってとこ読んでも良くわからなかったりします。。
何か、素人くさい質問で申し訳ないんですが助けてもらえませんか
104名無しさん@5周年:2007/10/17(水) 23:54:40
>>103
windows用の中身はコンパイル済み実行ファイルが入ってる。
解凍した場所でコマンドプロンプト開いて実行するだけ。
使い方はHow to useの通り。
105名無しさん@5周年:2007/10/18(木) 06:47:41
libsvmについて質問なのですが,ソフトマージンではなくハードマージンを設定したいのですがどうしたらよいのでしょうか?
106名無しさん@5周年:2007/10/18(木) 13:30:38
>>104
ありがとうございます。
その後にsvm_learnを実行すると
Not enough input parameters!


(more)
って出てきて、それから具体的にどうするのかが不明です。
形式的なコマンドの構文やパラメーターの設定はどのようにすればいいのでしょうか?

How to useが翻訳されてる
ttp://www.bi.a.u-tokyo.ac.jp/~tak/svm-light.html
を読んでも情けないかな、いまいち理解できませんでした。
ご教授願います。。
107名無しさん@5周年:2007/10/20(土) 00:50:03
プログラムの知識に乏しいので教えてください
Rでe1071のsvm()の損失関数を自分で変化させたくソースを弄る事にしました。

おそらく、デフォルトだと線形の損失関数になってると思うのですが、
それを2次にしたりと自分で書き換えたいのです。

svm()の中の肝心な計算部分svmtrainがCで書かれていることまではわかったんですが、
svmtrainの中のどこを触ったら損失関数が弄れるかがわかりません。

ご存知の方がいましたらご教授願います






108名無しさん@5周年:2007/10/21(日) 02:06:50
脳みそに汗をかけ,若者よ
109名無しさん@5周年:2007/10/22(月) 18:03:08
>>105
しつこくてすいません
だれか分かる方いませんか?

別にlibsvmでなくてもいいんですがソフトマージンありなしを比較したいんです
110名無しさん@5周年:2007/10/23(火) 10:04:10
公開されてるライブラリは使ったこと無いわ
自作のでならやった事あるんだが
111名無しさん@5周年:2007/11/07(水) 23:26:40
>>109
パラメータC→∞にすればハードマージンと同じになるのではないでしょうか
間違っていたらごめんなさい。
112名無しさん@5周年:2007/11/15(木) 23:18:35
すいません,ものすごく初歩的な質問なのですが
LIBSVMで学習,識別を行った後
テストデータの各値毎のカーネル値を見たいのですが
どこで見ればいいのでしょうか?

プログラムを見てもわかりませんでした・・・
ご教授願います・・・・
113名無しさん@5周年:2007/11/17(土) 15:43:45
107です
ここからどうしてもわからないので、わかる方居らっしゃいましたらお力添えお願いします。
LIBSVM(C言語)の損失関数をL2-損失関数に変更して、
「他言語からの利用」を参考にLIBSVM.cppとLIBSVM.hからLIBSVM.dllを作るところまではできました。
この後、e1071のパッケージは読み込まずに、
e1071のsvm関数のソース(PACKAGE=""としてある)だけをコンソールで読ませて、
実行すると、svm.defaultのC言語参照部分「"svmtrain"が見つかりません」となって実行できません。
おそらくLIBSVM.cppに"svmtrain"というルーチンがないからだと思いますが、
svmtrainにあたる、LIBSVM.cppのどのルーチンを呼び出したらいいのかわかりません。
すいません、どなたかご教授お願いします。
114名無しさん@5周年:2007/11/17(土) 16:32:33
113です
失礼しました、svmのソースでPACKAGE=""ではdllファイルが読めませんよね
変更してPACKAGE="LIBSVM"としても、「"svmtrain"がload table上にありません」
となってしまいます。よろしくお願いします。
115名無しさん@5周年:2007/11/20(火) 06:34:04
>>113
状況がよく分かりませんがWriting R Extensionは読みましたか?

e1071の改変をするのなら、参考にするのは
他言語利用よりもパッケージのビルドじゃないでしょうか。
http://www.okada.jp.org/RWiki/?Windows%A4%C7%A5%D1%A5%C3%A5%B1%A1%BC%A5%B8%A4%F2%BC%AB%BA%EE

e1071revなどとパッケージ名を変えてビルドしてはいかがでしょう。

最近はRの質問が多いですね。
Rの比重が大きな話題ならこちらへどうぞ。

= 統計解析フリーソフト R 【第2章】 =
http://science6.2ch.net/test/read.cgi/math/1152449095/
116名無しさん@5周年:2007/11/20(火) 14:38:02
>>115さん
解決しました!
LIBSVM.dllをビルドする時に
LIBSVM.cppとLIBSVM.hと「Rsvm.c(e1071のソースにある)」を
一緒にビルドすればいいだけの話でした
ありがとうございました。

Rの質問はリンク先でするようにします、ご指摘ありがとうございます。
117名無しさん@5周年:2007/11/27(火) 00:24:19
ttp://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/SVM_2_1.htm
に載っている正規化のやり方が分かりません
考えろと言われても…思いつきません…
どなたかご教授よろしくお願いします
118名無しさん@5周年:2007/11/27(火) 06:36:42
>>117
とりあえずぱっと思いつくのは
\lambda_n = (- \sum_[i=1}^{n-1} \lambda_i y_i) / y_n
カナ?そういうことなのかな?
119名無しさん@5周年:2007/11/27(火) 07:07:57
追記
http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/svmdemo.m
の normalize 関数が相当するみたい
120名無しさん@5周年:2007/12/10(月) 15:40:38
http://www.bi.a.u-tokyo.ac.jp/~tak/libsvm.html に
「modelパラメータの探索を行うスクリプトがついており」ってあるが
これはグリッドサーチのことを言っているの?それとももっと便利な何かがあるのかな?
121名無しさん@5周年:2007/12/10(月) 18:13:08
>>118
プログラムじゃなくて実際の計算はどうやっているのか?
ってことじゃないですかね?
122名無しさん@5周年:2007/12/10(月) 22:47:13
>>120
グリッドサーチ
123名無しさん@5周年:2007/12/13(木) 01:36:22
グッドリサーチに見えた
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 のオプションが使用できないんですよ…。
128名無しさん@5周年:2008/01/23(水) 00:25:02
オーム社から出た小野寺本オススメ
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の値に関わらず全て線形分類になるみたいです。
130名無しさん@5周年:2008/01/23(水) 08:17:08
>>128
Amazonで「オーム社 小野寺」で検索しても、
スレに無関係な本が1冊ひっかかるだけです。
オーム社から出た小野寺本はこれ以外に存在するんですか?
そしてこのスレに関係ある本なのですか?
誤爆や釣りでないなら本のタイトルをお願いします。

「見方・考え方 合金状態図」
三浦 憲司 (著), 小野寺 秀博 (著), 福富 洋志 (著)
オーム社 (2003/11)
http://www.amazon.co.jp/dp/4274087441
131名無しさん@5周年:2008/01/23(水) 22:49:00
>>130
スマン。小野田だったw
132名無しさん@5周年:2008/01/25(金) 02:48:16
情報ありがとうございます。
まさにこのスレ向けの本なのでリンクします。

サポートベクターマシン (知の科学)
http://www.amazon.co.jp/dp/4274204413/
知の科学 サポートベクターマシン
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=978-4-274-20441-8
サポートベクターマシン - tabatee の日記
http://slashdot.jp/~tabatee/journal/414568
133名無しさん@5周年:2008/01/28(月) 00:04:25
LibSVMでone-class SVM使おうと思うんだけど、grid.pyでパラメータがうまくでないんです…。
grid用のデータは1クラス分の教師データではダメなんでしょうか?
134名無しさん@5周年:2008/01/28(月) 18:35:44
one-class SVMは教師なし学習だから、grid searchは無意味だよ
135名無しさん@5周年:2008/01/28(月) 21:49:46
>>134
やっぱりそうですよね。ありがとうございます。
ということは、νやRBFカーネルのγはヒューリスティックに探すしかないんですかね…。
136名無しさん@5周年:2008/02/06(水) 17:03:30
LibSVMでカーネルがRBFのときより線形や多項式の方が精度がいいっていうのはどういう場合に起こるんでしょうか??
137名無しさん@5周年:2008/02/08(金) 21:01:10
データの生成法がそういうものだった時
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)に収束する。
これは元空間で遠いものが特徴空間ではほぼ等距離に扱われる。
(...だから何なの?...)
これが
「元空間では線形分離不能だったものが特徴空間で線形分離可能になる」...(*)
仕組みなのでしょうか?
遠いものを一緒くたに扱ったからといってうまくいくとは思えないのですが、
それとも別の解釈で結論(*)が導かれるのでしょうか?
良きアドバイスを頂ければ幸いです。
139名無しさん@5周年:2008/04/24(木) 14:38:37
one-class SVMでデータ全体の20%だけ抽出するには
パラメータをどうするといいのでしょうか?
140名無しさん@5周年:2008/05/17(土) 07:49:38
NNが重みを記録しておいて後から読み出せば使えるように、SVMでもこれを記録しとけば再び最初から学習させなくても使えるようになるものってないんでしょうか
141名無しさん@5周年:2008/05/17(土) 07:58:26
そんな使えない分類器が流行っていると思ってたのか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の制約条件に簡単に修正を入れたモデルを考えているのですが…
実装の方法をアドバイスいただければと思います。
よろしくおねがいしいます。
144名無しさん@5周年:2008/08/12(火) 15:11:42
他人に訊く前にまず自分で良〜く考えろ
脳味噌が汗かく位な
145名無しさん@5周年:2008/08/12(火) 18:17:58
自分なりによく考えてみたのですが…それでも分からず質問させていただきました。

速度などはあまり気にせず、Rを使ってSVRの定式化に修正を加えて実装できる方法があれば、
ぜひアドバイスいただきたいです。
146名無しさん@5周年:2008/08/15(金) 23:16:24
まず自分で考えたことを書いて
それに対する批判なりアドバイスなりを頼むのが筋

ってーかエスパーじゃないんだからそんな質問に答えられる人間はいないだろ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でやるにはどうやればよいんでしょうか?
149名無しさん@5周年:2008/09/02(火) 15:47:52
>>148
直前10日間の気温を入力、次の日の気温を教師にして学習
150名無しさん@5周年:2008/09/02(火) 16:11:18
>>149
さっきlibsvmてのを拾ってきたのですが、学習ファイルには1行に

 x日の気温 1:x-1日の気温 2:x-2日の気温 ... 10:x-10日の気温

というのをN日分用意してsvm-trainするだけでいいんでしょうか。
この手のサンプルはどれにあたるんでしょ、まだmakeしてheartで試しただけなので
151名無しさん@5周年:2008/09/04(木) 15:10:14
svmの最初の論文でたのいつだっけ?
今じゃいろんなとこに広まってるんだな
152名無しさん@5周年:2008/09/05(金) 08:34:25
1990年くらい?
153名無しさん@5周年:2008/09/11(木) 08:37:04
>>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に学習、クラス分類させるにはどのように書き
直したらいいのでしょうか?
155名無しさん@5周年:2008/09/27(土) 15:57:10
再生核ヒルベルト空間がわからん
VC理論も全然わからん
156名無しさん@5周年:2008/09/27(土) 19:33:22
まず基本的な数学と
基本的なプログラミングを学べよ
157名無しさん@5周年:2008/09/27(土) 20:58:44
やっぱ、関数解析とかの勉強から始めなきゃだめか
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."
というエラーが出てしまいます。
原因が分かる方がいたら教えて頂きたいです。
ちなみに、同じデータでも回帰モードでは学習することが出来ます。
160名無しさん@5周年:2008/12/04(木) 03:03:19
赤穂さんのカーネル多変量解析の本ってどう?
161名無しさん@5周年:2009/02/03(火) 12:51:41
NNと同様SVMでもノイズをのせることで凡化能力があがった、という報告ってありますか?
162名無しさん@5周年:2009/02/03(火) 21:49:52
ぼ、、、汎化能力、、、
163名無しさん@5周年:2009/02/04(水) 07:13:00
オレの頭も凡化してきた
164名無しさん@5周年:2009/04/28(火) 17:34:47
フフフ・・・
我が凡化能力によって凡人と化すがよいわ
フフハハハハ
165名無しさん@5周年:2009/07/08(水) 13:01:59
初学者でまだまだ何もわかってません。
ネットを巡回してると、SVMはNNからの派生、のように書かれて
いる事があるんですが、どのような関係になっているのでしょうか。

イメージとしては(ベン図みたく)、機械学習の中にNN、SVMがあって
その二つに共通部分があるという認識でよろしいでしょうか?
それとも、元はNNの中にsvmがあった感じなんでしょうか?
166名無しさん@5周年:2009/07/12(日) 21:38:20
みなさんこんにちは。
最近のコンピュータ将棋には最適制御理論が組み込まれています。
そのことを是非知ってもらいたくて書き込みしました。

それの情報の書かれているドキュメント
http://www.geocities.jp/bonanza_shogi/gpw2006.pdf

それの話題が書かれているスレ

ボナ4のソースを読んで書き込むスレ
http://anchorage.2ch.net/test/read.cgi/bgame/1233229938/
167名無しさん@5周年:2009/07/16(木) 22:09:22
>>165

SVMはパーセプトロンと同じ線形識別器で、識別平面の決め方が違う。
パーセプトロンは識別誤差が0になったら学習を止めるけど、SVMはマージンを最大化する。

パーセプトロンは線形識別器なので非線形識別が必要な問題には使えない。
そこで、基底関数で変換してからパーセプトロンしよう、ってのがNN。

同様に、カーネル関数と呼ばれるクラスの基底関数で変換してからSVMしようってのがカーネルSVM。
多くの場合これは単にSVMって呼ばれるけど、本来SVMは単なる線形識別器。
カーネル関数を使うと、カーネル関数で定義される空間(たとえばガウスカーネルだと無限次元の空間)上でSVMしていると解釈することができる。

無限次元空間上での線形識別なんてとても計算できなさそうだけど、カーネル関数の値が実はこの空間上での内積値になってるよ、というのがカーネルトリック。

ということでSVMはNNの一手法とかってことはないんだけど、まぁかなり似てるよね。
168名無しさん@5周年:2009/07/17(金) 01:06:44
>>165
NNはnearest neighborのほうだと思うのだけど、NNもSVMも、すべての点との距離を比較して判別する点は同じ。
NNでは単純に一番近い点を探すけど、SVMではハズレ点を無視したり境界がなるべく公平になるような数値操作を行う。そこの処理が非常に重い

脈絡なしにNNと書くのはnearerst neighborかneural networkかわからないので、避けたほうがいいと思われ
169名無しさん@5周年:2009/07/17(金) 01:17:50
>>167
パーセプトロンは線形識別器だけど、次元増やす操作すれば非線形に対応できるよ。
170名無しさん@5周年:2009/07/19(日) 13:14:32
>>167 >>168 >>169
どうもです。
大分理解が深まった気がします。
ちなみに、neural network のつもりでした、気をつけます。
171名無しさん@5周年:2009/07/19(日) 22:47:24
SVM初心者です。よろしくお願いします。
説明変数(入力の特徴量 1600次元)と目的変数(20くらいの変数を持つベクトル)の
関係データが大量にあって、説明変数から目的変数を得るための回帰をしたいと
思うのですが、SVMの回帰で可能でしょうか?

SVM light で回帰をやろうとすると目的変数が1つしかなくてベクトルで
設定できないようで。
可能なソフトがないでしょうか?
そもそもSVMの回帰で目的変数をベクトルにすることはできないのでしょうか?
よろしくお願いします。
172名無しさん@5周年:2009/07/20(月) 00:35:35
>>171

回帰の場合はSupport Vector Regression(SVR)。
回帰問題では入力の条件付き出力を推定するので、出力のある次元はほかの次元とは無関係に推定されます。
なので出力の次元ごとに1次元出力のSVRをすればおk。
173名無しさん@5周年:2009/07/20(月) 21:43:41
>>171
ありがとうございます。
自分も最初は1次元を全て独立にやるのか?と思ったんですが、
統計の本の回帰分析だと、各説明変数の係数は出力の各次元に対して同一
に書いてあって(y=Xb y、bはベクトルでXが行列みたいな)
独立にやるものではないように思っていました。
SVRだと一般の回帰とは違うからくりがあるということでしょうか?
理解不足ですみません。



174名無しさん@5周年:2009/07/20(月) 23:32:17
>>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だからというわけではありません。
異なる出力の相関を考慮するモデルなども提案されていると思うのですが、そういうのはまだ一般的なライブラリになっていないと思います。
175174: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の方が優秀な場合が多いらしいけど。
179名無しさん@5周年:2010/03/03(水) 20:00:03
Libsvmで、svm predict value 使ってdecision valueを求めたいのだけど、なんでか値が-1#IND00000とかなる。なんでなんですやろ。
180名無しさん@5周年
SVMで作成した判別関数の係数の値とか、項がいくつあるかというような
情報を得ることはできないんだっけ?