機械学習

ぼくの実装した最弱のディープラーニング

8月の頭からディープラーニングを実装していたのを、先日、プレゼンしてきました。 プログラマのための数学勉強会@福岡 - connpass ぼくの実装した最弱のディープラーニング from なおき きしだ GPU対応したり、ドロップアウトとかミニバッチとかいろいろ実…

畳み込みニューラルネット、失敗

最近流行りのディープラーニングなるものを実装しようと思ってます。 いまやろうとしてるのは、画像認識のための畳み込みニューラルネット(CNN)です。 一応、コードを書いてみるには書いてみたんですけど、失敗。 下のノイズっぽいのが一段目のフィルタ群な…

パーセプトロンからSVMでの画像認識まで、機械学習エントリのまとめ

なんかJJUGナイトセミナーで機械学習をやるっぽくて、定員100人が40人キャンセル待ちとかになってますね。 【東京】JJUG ナイト・セミナー「機械学習・自然言語処理特集!」12/17(水)開催 - 日本Javaユーザーグループ | Doorkeeper ということで、予習用だ…

ビール画像判定プログラムできたよ!

画像同士の距離が取れるなら、ビール画像の判定プログラムもできるよね。 ってことで、手持ちの画像をSVMに食わせてみて、ビール画像を判定させてみました。 誤判別?なにそれ ソースはこんな感じ。 ビールの画像はbeerがついたフォルダかファイル名にしてく…

画像同士の距離がとれたら近い画像マップができるよね

CCVで画像同士の距離が取れたってことは、画像同士どれが近いかというマップができるよね。 ソースはこんな感じで

Color Coherence Vectorで画像検索を作ってみた

ということで、昨日のColor Coherence Vector使って、似た画像を検索するプログラム作ってみた。 ちょっと簡単に似た画像を求めたいときには、なかなかよさげ。 左側がキーになる画像 ソースはこんな感じで。最初のパスには、画像のフォルダを入れてください…

Color Coherence VectorをJavaで実装してみた

こちらで紹介されてたアルゴリズムをJavaで実装してみました。 Color Coherence Vectorを実装してみた 詳しい説明はあちらを見てもらうとして、前処理をした画像はこんな感じ 結果はこんな感じ。ここでは、横を200ドットに制限して、20ドットを閾値にαとβを…

ナイーブベイズ分類器であいさつbot作ってみた

スパムフィルタでよく使われてる、ベイジアンフィルタのことです。これを使って「おはよう」判定してみました。 1000speakersのときに「ベイズやらないんですか?」って言われたり、tockriの人が以前「やっぱベイズよくできとるわ」とか書いてたり、テキスト…

改めて2次多項式カーネルであいさつbotをやってみる

こうですね。わかります。 double kernel(Map<String, Double> x1, Map<String, Double> x2){ double n = 0; for(Map.Entry<String, Double> ent : x1.entrySet()){ if(!x2.containsKey(ent.getKey())) continue; n += ent.getValue() * x2.get(ent.getKey()); } return (n + 1) * (n + 1); } ということで、2</string,></string,></string,>…

あいさつbotで2次の多項式カーネルを試してみる。

こうですか?わかりません>< double kernel(Map<String, Double> x1, Map<String, Double> x2){ double n = 0; List<String> strs = new ArrayList<String>(); for(Map.Entry<String, Double> ent : x1.entrySet()){ if(!x2.containsKey(ent.getKey())) continue; strs.add(ent.getKey()); } for(String s1 : strs){ for(Str</string,></string></string></string,></string,>…

サポートベクターマシンであいさつbotを作るためのカーネル関数

Twitterの発言に、「おはよう」かどうかのフラグをつけてSVMに食わせると、その発言が「おはよう」かどうか判定できるようになるので、「おはよう」判定したら「おはよ〜」と返すようにするとあいさつbotのできあがり。 というときに問題になるのが、カーネ…

ガウシアンカーネルのパラメータを自動的に求めてみる

サポートベクターマシンでよく使うガウシアンカーネルでは、パラメータが重要になるということを書きました。 で、ちょうどいいところに、id:audioswitch:20080730で、そのガウシアンカーネルのパラメータを自動的に求める方法が書かれていたので、試してみ…

ところでサポートベクターマシンって何なの?

最近、機械学習とか、そのアルゴリズムのひとつであるサポートベクターマシンとかやってるわけですが、そもそも機械学習ってなんなんでしょか? 機械学習ってのは、なんとなく与えられた点の分類から、新たに与えられた点の分類を推測するのですが、ようする…

SMOの収束速い!

KKT条件だけじゃなくて、変位の合計を見て収束しているかどうか判定するようにしたら、これめちゃくちゃ収束速いじゃないですか。 非線形分離の方で50回程度、線形分離の方だと2回とか3回で収束しちゃってます。 線形分離の場合で分離面が全然変なところに行…

SVMの学習用アルゴリズムSMOを実装してみる

SVMは2次最適化問題になるので、それを勉強してみてはということだったのですが、SVMに特化したSMO(Sequential Minimal Optimisation)アルゴリズムがあるということなので、そちらをやってみました。 SVMの制約条件に というのがあって、yiは正例なら1、負…

サポートベクターマシンの本

うちにある本で、サポートベクターマシン(SVM)について書いてある本をあげてみます。 まずは、これ。機械学習ってなんなの?という人におすすめ。パーセプトロンからSVM、ニューラルネットワークときて、そうやってできた学習機械の評価方法についても書いて…

ソフトマージンサポートベクターマシン

いままでやってたSVMは、動きがそうなってるかどうかは別として、学習データが誤判別されないように識別面を選ぶのですが、学習データの中にありうる外れデータを考慮できるようにするのがソフトマージンSVMです。 いままでやってたのはハードマージンSVMと…

非線形サポートベクターマシン

とりあえず最適化の問題は置いておいて、ここを参考に非線形分離できるようにしてみました。 http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/SVM_3_1.htm さぁ,これで君も非線形SVMのコーディングができちゃうのだ.素晴らしき哉. ほんとにできた。 …

線形サポートベクターマシン失敗

とりあえずの目標はサポートベクターマシンてことで、次のサイト参考に組んでみました。*1 http://www.neuro.sfc.keio.ac.jp/~masato/study/SVM/index.htm なんか、なぜかちゃんと角度的にはいい感じになってるけど、ぜんぜんマージン最大化していません。見…

バックプロパゲーションでニューラルネットの学習

ニューラルネットというのは、入力があって、複数の階層を経て出力を得るようなグラフ構造のことです。通常は、入力層・中間層・出力層のように層構造になっているようなものを差します。中でも、中間層が1層の、3層構造になっているものが多くとりあげられ…

パーセプトロンで非線形分離するには

パーセプトロンでは線形分離できない場合に対応できないということでしたが、これを可能にする方法を[id:nowokay:20080318]でしましまさんに教えてもらっていました。 実装してみるとこんな感じで、非線形分離できるようになりました。 x^2、xy、y^2を新たに…

パーセプトロンってなんだろう?

ということで、パーセプトロンがどんな感じで判定してるかを見てみました。 判定の境界が直線になっていることがわかります。パーセプトロンは、こういう具合に判定結果を分離する直線(平面)を求めるもので、これが線形分離ということです。そのため、線形分…

3-NN法

NN法だと識別の境界ががたがたすぎるので、3-NN法っていうのを使ってみます。 3-NN法は、近いほうから3つの学習パターンをとってきて、そのうちの多数決で識別する方法です。そういう意味では、NN法ってのは1-NN法になります。 そうすると、識別の境界がち…

NN法っていいよね

NN法で学習した結果が、どんな感じの判定になるのか表示してみます。 2パラメータの学習データで、どういう風に判定されるのかを表示しています。 NN法では、一番近い学習データによって判定しているので、学習データに関しては正しい判定結果になります。け…

基本のNearestNeighbors法(NN法)でパターン認識

とりあえず、パターン認識の一番の基本になるNearestNeighbors法(NN法)でやってみます。 NN法は、判定するデータが、学習に使ったデータのうちの一番近いものに分類する方法です。 自分の字で学習させて自分の字を判定させるなら、これでいいかも、とか思う…

バックプロパゲーション

単層パーセプトロンだと線形分離可能なものしか学習できないということで、3層パーセプトロンにしてバックプロパゲーションなるもので学習しようと思って、とりあえずコードを書いたのだけど、まだちゃんと学習できてない>< 機械学習の入門書は、これが読…

パーセプトロンとサポートベクターマシン

単層パーセプトロンの学習を直接じゃなくてラグランジェの未定乗数を求めるようにすると線形サポートベクターマシンになるの?

上のパーセプトロンは失敗じゃないかも

単層パーセプトロンだと、3文字くらいしか学習できないものなんじゃないかとか思ってみました。 実のところどうなんでしょう?

パーセプトロンで手書き数字認識(失敗)

適当にやってみたのですが、うまく学習できません・・・ ちゃんと調べてやるべきか。 画面にマウスなんかで数字を書いて、下の数字ボタンで学習します。上の判定ボタンを押すと、標準出力に判定結果を表示します。 3文字くらいまでなら認識できるようになる…