1. やる夫は SVM を実装したようです & やる夫で学ぶ非線形な SVM Hatena id:repose Twitter id :y_benjo
![やる夫はSVMを実装したようです やる夫で学ぶ非線形なSVM](https://cdn-ak-scissors.b.st-hatena.com/image/square/17e7c5e7cbd963507853ba540aeb4e563ca1a162/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fyaruo-1222006821748729-8-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
17. SVM とは Support Vector Machine の略称です。 データ群を 2 クラスに分類する超平 面を引くことによってデータを分類 してしまおう という手法です。 具体例を挙げてみましょう。
By Ilya Grigorik on January 07, 2008 Your Family Guy fan-site is riding a wave of viral referrals, the community has grown tenfold in last month alone! First, you've deployed an SVD recommendation system, then you've optimized the site content and layout with the help of decision trees, but of course, that wasn't enough, and you've also added a Bayes classifier to help you filter and rank the cont
SVMは2次最適化問題になるので、それを勉強してみてはということだったのですが、SVMに特化したSMO(Sequential Minimal Optimisation)アルゴリズムがあるということなので、そちらをやってみました。 SVMの制約条件に というのがあって、yiは正例なら1、負例なら-1となる値なのですが、そうすると、ようするにこの条件は、正例のαの合計と負例のαの合計が等しくなるということを示してるわけです。 この条件をつかうと、ひとつαを操作したときには、ほかのαを操作して、正例と負例のバランスを取る必要があることがわかります。 で、このことを利用して、同時に2つのαを操作することにすると、解析的に一つ目のαが求められて、2つ目のαはそこから足し算引き算で求められてお徳かも、というのがSMOの考え方です。 問題は、いかに効率よく更新する2つのαを決めるかということになります。
最近、機械学習とか、そのアルゴリズムのひとつであるサポートベクターマシンとかやってるわけですが、そもそも機械学習ってなんなんでしょか? 機械学習ってのは、なんとなく与えられた点の分類から、新たに与えられた点の分類を推測するのですが、ようするに、点が与えられたときにそこから分類の領域を推測しておいて、新たな点がきたときにはどの領域に入るかを判別するのです。 ニューラルネットワークは、名前にニューロンとかついてて、とてもステキな響きがするのですが、あれは関数のあてはめを行っているのです。そうやって関数をあてはめることで、領域の境界面を求めます。 NN法は、学習とかせず、一番近いデータが同じ分類になるはずという戦略でやってます。 サポートベクターマシンも考え方としてはNN法と同じで、新しい点がやってくると、学習したそれぞれの点までの近さを計算して、一番ちかい分類を求めます。そのため、学習データが
libsvm には、"-b 1" オプションという、確率推定機能があります。これを試してみました。学習には libsvm 付属のコマンド svm-train を使い、分類は自作の libsvm.rb を通じて JRuby 上で行えるようにしました。 英単語とドイツ語単語を分類するという例題に取り組んでみた結果、良好な分類性能と、意味ありげな推定確率が得られました。 libsvm の確率推定機能 libsvm のコマンド svm-train 及び svm-predict には、以下のような確率推定オプションがあります。 -b probability_estimates: whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)この確率推定が何を意味しているいるのかを体感するために、適当な
SVMを使うにはカーネルと呼ばれるものを選択しなければならない.kemba-svm.exe がサポートしているカーネルは 線形カーネル RBFカーネル 多項式カーネル partial distance カーネル[1] の4つである.そのほかに予め計算済みのカーネル行列からSVMを動かすこともできるがここでは説明しない. SVMを使うにはカーネルと呼ばれるものを選択しなければならない.現在 libsvm がサポートしているカーネルは 線形カーネル RBFカーネル 多項式カーネル シグモイドカーネル の4つである.ただし,シグモイドカーネルは半正定値カーネルではないので,シグモイドカーネルを使った場合はSVM学習の理論保証は一般に得られない(パラメータの選び方によっては半正定値カーネルになる場合もある).そのほかに予め計算済みのカーネル行列からSVMを動かすこともできるがここでは説明しない.
ChatGPTとDeepLの使い分けをどうしているのだろうかと気になっていたので、発売日と同時に生命科学研究のためのデジタルツール入門を買ったのだけど、忙しくてレビューを書いていなかったので。 対象読者は、ラボに配属されたばかりの学生だと思いますが、その前の学部2回生くらいから読んでおいてもいいと思います(というわけで今週帰省してくる娘に読ませようと思っている)。 自分としては冒頭書いたように8章のAIツールの活用に興味があったので、勉強になるところが多かったです。 LLMは「単語の並べ方のデータベース」として、よい表現(よい単語の並べ方)を得るのに使うことが多いです。そのあたりはニュアンスの説明が難しいのですがなんというか将棋ウォーズの棋神みたいな使い方になっている気がします。 LLM使ってどういう面白いことをするのかは次回のMishima.sykで少し触れる予定です。
2004年ごろに Google の猫で深層学習が一躍脚光を浴びたとき、画像認識は特徴抽出が難しいので深層学習で良い結果が出るが、自然言語処理は特徴量*1がリッチなので、深層学習を適用するのは難しいだろうと思っていた。 特徴量がリッチとは、例えば「ホームラン」のたった1語でその文はスポーツ、特に野球の話題である可能性が高くなる、みたいな話である。一方、ピクセルの1つが緑であることから何の画像か当てるのは不可能だ。 その後、自然言語処理でも深層学習が当たり前になったのは誰もがご存知のとおりであり、自身の不明を恥じるばかりだ。ただ言い訳をさせてもらえるなら、自然言語処理のえらい先生方も同じように言っていたのだ。 2014年ごろ、LSTM などの深層学習モデルが発展し、自然言語処理でも目覚ましい結果が出始めた。機械翻訳など多くのタスクで、人間の平均といい勝負になったのもこの頃だったと思う。すると、
MeCab&形態素解析ネタの続きで、Pythonで簡易ベイジアンフィルタ作ってみました。 ベイジアンフィルタって何ぞや?という方に簡単に説明すると、テキスト分類プログラムのことです。よくある利用方法として、あるメールが、スパムメールかそうでないのかの判別に使われたりします。 ソースはコレです。ここのサイトの説明を参考にしました。アルゴリズムはPaul Graham方式を使っています。以前のコレはctypesを使ってMeCabを呼び出していたけど、今回はPython Bindingを使って書きました。 さて、、、ベイジアンフィルタを試すには、フィルタに学習させる為のデータが必要です。しかし、ふつーにスパムメールたくさん、ノンスパムメールたくさん用意して実験してもいまいち面白くない。 そこで、次のような実験方法を考えました。 Aさん、Bさんの書いた文章をフィルタ学習用データとして用意する。そし
ベイジアンフィルターで日本語を取り扱う時に問題になってくるのが、文章を品詞レベルに分解する処理。英語の場合は、文章はスペースで区切られた品詞の集合で構成されるため、余分なことをせずに簡単に処理できる。例えば、'How do I set up an AirPort wireless network?'という文章の場合、ベイジアンフィルターは、スペースで区切られた単語を、分類するための判断材料として自動的に取り込んでくれる。 ところが、日本語の場合は、「エアポートの無線ネットワークはどうやって設定しますか?」という文章を、「エアポート の 無線 ネットワーク は どう やっ て 設定 し ます か ? 」のように、品詞をスペースで区切った文章に変換して、ベイジアンフィルターに渡してあげる必要があるらしい。これはすごく高度な作業だ。自分のレベルではどうやっても出来ない。 そこで、この高度な作業を
Photo by vsz, night glow 以前このブログでMeCabによる形態素解析を紹介しました。正直その後すっかり取り上げたことを忘れてのほほんと過ごしていたわけです(*1)が、ふとしたことでベイジアンフィルタに関するアルゴリズムの記事を見つけ、日本語でこのような記事があるなんて珍しいなということで、ちょっくら実装してみようと思い立ったわけです。 形態素解析部分はMeCabくんがやってくれるので、こっちがするのは名詞を抜き出してデータベース辞書を作り、Graham方式を用いて実装したくらいです。正直ただ単純に実装しただけなのでそこまで参考にならないと思いますが、一応coderepos上に公開してみます。 svn checkout http://svn.coderepos.org/share/lang/python/spam Somewhere でチェックアウトしてください。 テ
Mac OS X Leopard の Spotlight に MeCab が使われているらしいという情報を聞いたので、実際に深追いしてみました。 いとも簡単に /usr/lib/libmecab* , /usr/include/mecab.h と /usr/lib/mecab/dic/apple/{ja,tc,sc} というディレクトリを発見しました。ts, sc は traditional/simplified Chinese (繁体字/簡体字) の略で、中国語の辞書だと推察されます。辞書のディレクトリはさらに dic/apple/ja/{LE,BE} という風に、エンディアンごとに分かれています。MeCabの辞書はエンディアン依存なので、こうするしかないのかもしれません。 さて、この辞書を使って、UTF8の文字列を流し込んでみたのですが、うまいこと解析してくれません。MeCabのバイナ
Zinnia: 機械学習ベースのポータブルなオンライン手書き文字認識エンジン [日本語][英語] Zinniaは機械学習アルゴリズム SVM を用いたポータブルで汎用的な オンライン手書き文字認識エンジンです。Zinniaは組み込みの容易さと汎用性を高めるために、 文字のレンダリング機能は持っていません。Zinniaは文字のストローク情報を座標の連続として受け取り、 確からしい順にスコア付きでN文字の認識結果を返すだけに機能を限定しています。 また、認識エンジンは完全に機械学習ベースであるために、文字のみならずユーザの任意のマウス・ペンストロークに対して任意の文字列をマッピングするような認識エンジンを小コスト作成することができます。 主な特徴 機械学習アルゴリズムSVMによる高い認識精度 ポータブルでコンパクトな設計 -- POSIX/Windows (C++ STLのみに依存) リエント
MeCabは形態素解析のためのソフトウェアです。日本語を分かち書きするために使われるものとしては最も人気の高いものだと思われますが、チャットや掲示板に書き込まれるような崩した日本語や、正しく書かれた日本語でも新語を期待した通りに分かち書きしてくれないことがあります。これはMeCabの内部で使われている辞書が一般的な言葉を情報源としているわけではないことに関係があります。MeCabというか、より一般的な話ですが以下のような認識が一般的かと思われます。 というのも、一番広く使われているであろう自然言語処理技術は形態素解析(単語分かち書き、と言ったほうがいいのかもしれない)であろうが、これは現在99%くらいの精度になっていて、すでに人間がやるより遙かに高精度で行えるのだが、これだけ高い精度が出せるのは新聞記事を相手にしたときだけであって、それは新聞記事をコーパスとして用いる機械学習により形態素解
MeCab (和布蕪)というオープンソース形態素解析エンジンがあるのですが、これはとっても楽しいおすすめソフトです。 オープンソース形態素解析エンジンにはChaSen, Juman, KAKASI等あるのですが、私はMeCabを利用しています。 MeCab: Yet Another Part-of-Speech and Morphological Analyzer http://mecab.sourceforge.jp/ 形態素解析エンジンでなにが出来るかというと、まぁ色々できるのですが、日本語をわかち書きしてみたり、文書を単語単位にわけて品詞を取得してみたりとあるのですが、私は漢字によみがなを振る為に利用しています。 形態素解析について 出典: フリー百科事典『ウィキペディア(Wikipedia)』http://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%
「Lucene.Net」は.NET Framework上で利用できる「全文検索エンジン」です。例えば、ASP.NETを使ってWebサイトを作成する際に、サイト内のコンテンツを検索する検索ページを作成したいという場合や、Windowsアプリケーションで全文検索機能を利用したい場合にLucene.Netが利用できます。 Lucene.NetはApache Software Foundationが開発しているプロジェクトの1つで、オープンソースで開発されています。Java言語で記述された「Lucene」がそのオリジナルであり、これは、Wikipediaをはじめ多くのWebサイトで現在利用されています(Lucene-java WikiのPowerdBy) Luceneの.NET版であるLucene.NETは、Java版と同様Apache Software Foundationの「Lucene.Ne
This webpage was generated by the domain owner using Sedo Domain Parking. Disclaimer: Sedo maintains no relationship with third party advertisers. Reference to any specific service or trade mark is not controlled by Sedo nor does it constitute or imply its association, endorsement or recommendation.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く