人工知能に関する断創録スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。Learning、Kerasに関する記事が多いです。用いた特徴選択(2010/6/19)のつづきです。今回は、相互情報量ではなく、カイ二乗値を用いて特徴語を抽出してみます。カイ二乗検定は独立性の検定によく使いますけど、特徴語の抽出にも応用できるってのははじめて知りました。結局のところ相互情報量もカイ二乗値もカテゴリと単語がどれくらい依存しているかを表す尺度なのでアプローチは似ている感じがします。IIRの13.5を参考にして実装します。カイ二乗値カイ二乗値の定義は、です。NやEが出てきますが、下のようなクロス表を用いて計算します。単語「iPhone」とカテゴリ「IT」のカイ二乗値を求めたいとき、クロス表は下のようになります。カテゴリがITで単語iPhoneを含む文書はデータ中にN11個あるなどと解釈します。(E00)N0.計N.1N.0NN.1はN01+N11、N1.はN10+N11の略です。ここで、カテゴリITと単語iPhoneが独立であると仮定したときに期待される文書数がEです。2つの事象が独立であるとき上のようなクロス表上では各行(または各列)の出現頻度の比が等しくなります。iPhoneを含むケースでも含まないケースでもカテゴリがITである割合はN.1/Nで、カテゴリがITでない割合はN.0/Nとなります。これはプログラミングのための確率統計でもくどいくらい説明されてました。こんなところで役立つとは!。以上の結果から具体的な文書数E..は下の式で計算できます。さっきのカイ二乗値の式は実際の文書数Nijと単語とカテゴリが独立と仮定したときの期待される文書数Eijがどれだけ乖離しているかを表す指標になっています。この乖離が大きいほど単語とカテゴリの依存度合いが強いと解釈できるとのこと。相互情報量のときと同じくカイ二乗値が大きい単語ほどカテゴリに特徴的な単語と言ってよさそうです。上の定義をそのまま素直にPythonで実装してみます。Newsgroupsの各カテゴリからカイ二乗値が高い上位k個の単語を求めるのが目標です。クロス表を求めるところまでは相互情報量のときとまったく同じです。word行すると、comp.graphicsカテゴリの相互情報量が高い順に10件の単語が出力されます。jpegいかにもcomp.graphicsっぽい単語が並んでます。相互情報量と少し違った単語が上位に上がってます。royalroads特徴選択を考慮したナイーブベイズでは、本題のナイーブベイズで特徴選択を考慮した分類器を作成できるようにします。news20、news20.tのデータはそのままでナイーブベイズのプログラム側でカイ二乗値が大きい上位k個のボキャブラリのみ使うようにします。NaiveBayesクラスのコンストラクタにkの値を指定します。data)と書き換えるだけでOKです。横軸にボキャブラリサイズの対数スケール、縦軸に分類精度としてグラフを描いてみます。相互情報量のときとあまり変わらない・・・ただこれもIIRに載ってますが、Reuters-RCV1というデータセットだと相互情報量とカイ二乗値では差が出てきます。相互情報量の方が単語数が少なくても分類精度が高い。両方試してみるのがいいのかも。今回はなじみのない英語の文書だったので、次回からは日本語のブログ記事(このブログ)のデータを分類してみようと思います。»プロフィールid:aidiary人工知能とその関連分野に興味があります。Blog|ブログを報告する。