BoW+SVMで文書分類(2)


はじめに

Livedoor Newsコーパスを学習データとして、カテゴリ分類する分類器を作成する記事の続き。

前回、文書分類を行う為の前準備として、各文書を数値化(ベクトル化)するところまでを行った。
今回は、前回作成した文書ベクトルをインプットにSVMを使い文書分類器を作るところまでを行う。

Livedoor Newsコーパスをトレーニングデータとテストデータに分割

Livedoor Newsコーパスは、カテゴリ毎にディレクトリが切られており、その中に1文書1ファイルで作成されている。このディレクトリ名がカテゴリ(教師ラベル)で、各ファイルをベクトル化したものをインプットとして機械学習させる。
また、作成した文書分類器の精度を検証する為のテストデータもこのLivedoor Newsコーパスのデータを使うこととする。
各カテゴリ毎に、80%を学習用データ、20%をテスト用データとして分けておく。

SVMとは

サポートベクターマシン(SVM)とは、教師あり学習データから、各データ点との距離が最大となるマージン最大化超平面を求めることでパラメータを学習する方法である。
話を単純にする為に、下図のような2次元平面の赤点のデータと緑点のデータ(教師ありデータ)を考えてみる。

svm

上図のように赤点と緑点を分割する最適なラインを求めることで、未知のデータに対してもそのラインの左上にあるのなら赤グループ、右下にあるのなら緑グループと分類することができるようになる。
ただし、赤点と緑点を分けるラインは複数考えられれ、上図の例ではいくつかの例としてH1からH3を描いている。
サポートベクターマシンは、各点からラインへ垂直に伸ばした線の距離(マージン)を最大化するようなラインのパラメータを学習する。
今回の例ではマージンが最大となるH1のパラメータが求められる。

上図は単純な2次元の線形サポートベクターマシンの例であるが、今回は300次元のデータに対して、複数カテゴリへの分類を非線形SVMを用いて行ってみる。
尚、SVMには非線形のカーネル関数が複数存在するが、今回はRBFを用いて行う。

Scikit-learnのSVMを用いてパラメータ学習

Pythonの機械学習ライブラリであるScikit-learnを用いて実際に分類器を作成してみる。
SVMでは、分類の精度を高める為に、ハイパーパラメータを決める必要がある。
幸いScikit-learnではGrid Searchの機能があり、複数のパラメータをリスト形式で渡してあげることで、最適なパラメータを見つけてくれる。

  • コストパラメータ(C):誤分類をどれくらい許容するのか決定
  • RBFカーネルのパラメータ(Γ):Γ値が大きいほど複雑な決定境界となり、小さいほど単純な境界となる

またScikit-learnでは、学習データを自動でランダムに分割して交差検定(クロスバリデーション)を行ってくれる。
デフォルトでは3-Fold Cross Validationとなっており、データを3分割しての交差検定を行う。

テストデータで精度の確認

さて、分類器のモデルはできたので、最初に分割した20%のデータで分類器の精度を検証してみる。

結果としては、以下の通りなのだが、最終テストスコアが0.795と思ったほどの精度がでていない。
学習データの再調整やSVMハイパーパラメータの調整を行いつつ、再テストを実施し、精度を上げていく必要がありそうだ。

“BoW+SVMで文書分類(2)” への 1 件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です