TinySVMを使ってみる

機械学習がプロダクトに応用されることが、非常に多くなりました。とはいえ、機械学習を学ぼうと思うと、数式の理解など非常に大変です。そこで、とりあえず機械学習というものを使ってみる、ということを目指して、少し書いてみたいと思います。

SVMって何?

SVMというのは、ざっくり言えば、二値分類をしてくれるプログラムで(数学的にもう少し正確に言うと、パターン識別モデルです)、機械学習の一種です。二値分類というのは、あるデータを入力した時、そのデータがあるジャンルに含まれそうか含まれそうではないか、というのを分類することです。例えば、メールの文章を入力した時、それがスパムであるかスパムでないかを分類することなどが考えられます。

図にすると、次のような感じです。

150113a

最初に、分類したいデータとそのデータがジャンルに含まれるかどうかという情報を用意します。これを訓練データとか、教師データとか言います。このデータを元に、プログラム内で良い感じに直線を引いてくれます(正確には入力データの次元をnとしたとき、n-1次元の超平面)。この「良い感じの直線」さえ作ってしまえば、未知のデータが入力された時に、その直線に基づいて分類してくれそうですね。なお、訓練データを用いて、分類をするための情報(モデル)を作成することを、学習といいます。

TinySVMをインストールを使ってみる

自然言語処理の世界ではしばしば使われるSVMに、TinySVMというものがあります。これをインストールして、実際にSVMを使ってみようと思います。

パッケージなども用意されていますが、ソースからインストールしたいと思います。configureの–prefixオプションで、ホームディレクトリ下のlocalにインストールしています。

このエントリーの筆者の環境ではCentOS7を用いましたが、OSインストール直後の状態ではCコンパイラが含まれておりません。コンパイラはなんでも良いと思うのですが、個人的にg++に慣れているので、それをインストールしました。

実際にTinySVMを動かしてみる

TinySVMを展開すると、展開先のtestsディレクトリにサンプルデータがあります。配布元のページの例に基づいて、動かしてみましょう。

学習させる

訓練データを用いて、モデルを作成しましょう。TinySVMでは、学習用のコマンドがsvm_learnとなっています。これにオプションをつけて実行します。

svm_learnのコマンドライン引数の最後から2番目が訓練データのパス、最後がモデルファイルの出力ファイル名となります。それよりも前のオプションが、学習のパラメータとなります。

正しく実行できれば、modelという名前のファイルが新たに作成されているはずです。

分類させる

モデルファイルを用いて、実際にデータを与えて分類させてみます。TinySVMでは分類用のコマンドとしてsvm_classifyが用意されています。

コマンドライン引数の第1位引数が入力データ、第2引数がモデルファイルとなっています。学習によってモデルファイルを作り、そのモデルファイルと未知のデータから、実際に分類を行う、という感じです。

とりあえず、まずは実行してみるというところで、次回は入力データについて少し見て行きたいと思います。