見出し画像

テキスト分析の大通り#12: ナイーブベイズテキスト分類、Scikit-learn、BOW利用編

今回はScikit-learnでのナイーブベイズテキスト分類を行っていきます。今回分でBOWを入力とした手順、次回でTF-IDFを入力とした手順を見ていきます。まずは処理スクリプトを以下に。

ライブラリとしてはナイーブベイズの前に、CountVectorizerを利用し、BOWの配列を作成し、それをナイーブベイズの入力にします。横持ち連結の文章に近いデータをCountVectorizerに突っ込み、出来上がった配列をナイーブベイズに、という手順です。

最初にorder byに気を付けて、前回作成したデータをダウンロードします。ただしこれは学習用なのでdocidは16までで、評価用の17以降はまた後で使う際にダウンロードします。

そして結果変数となるカテゴリーをyとして持ちます。01のカテゴリーデータに置換しておきます。

続いてCountVectorizerの宣言と処理ですが、1件以上(min_df)、1文字以上(token_pattern)を含めるようにパラメーターを与えています。大量の文書データで1件超や1文字超の単語に絞る場合には不要ですが、今回は文書も少なく、各文書も短く、結果単語も少ないため、含めるようにしています。

この結果をベクトルに変換したのがtrain_bowで、これを入力にします。train_bow_dfはデータをきれいに見たかったのでデータフレームにしているだけです。これはCSVファイルとしても吐き出しています(スクリプト内でtrain_bow.csvとしているのが以下です)。

そしてモデルの作成。train_bowとyを入力としてモデルを作成しています。

次にスコアリングです。まず学習用データに対するスコアリングです。単純にmodel.score(モデル,スコア対象データ)で正解率を出してくれます。最初は学習用に使ったデータをスコアバックして、1.0、つまり全部正解となっています。そしてorder byに気を付けて評価用のデータをダウンロード、test_bowとysとして同様にスコアリングを行い、1.0という結果が出ているのを確認しました。

最後の処理では、model.predict(モデル,スコア対象データ)で個別の判別結果を取得し、これを後々使いやすいように整形しています。今回は結果が確認できれば十分なのですが、実務で使う際には元のデータに対してスコア結果を横付けして利用していくことがあるので、一応データフレームにまではしています。これであとあとCSVにするなりデータベースに書き戻すなりはしやすくなるかと思います。

今回は以上。次回はTF-IDFで同じことをしてみます。

(TeradataやPython、およびPythonライブラリのインストールや環境構築、辞書登録、参考にしたページ等は以下にまとめています)

/// 

#analytics #bow #ナイーブベイズ #text #nlp #データ #分析 #teradata #sql #python

この記事が気に入ったらサポートをしてみませんか?