テキスト分類問題
scikit-learnを使用してテキスト分類問題を解決します。
ここでは、映画レビューのテキストを肯定的なレビューと否定的なレビューに分類する問題を解決します。
1 | import numpy as np |
このコードでは、映画レビューのテキストをTF-IDFベクトル化して、サポートベクトルマシン(SVM)を使用して肯定的なレビューと否定的なレビューに分類しています。
精度を計算してモデルの性能を評価します。
[実行結果]
1 | [nltk_data] Downloading package movie_reviews to /root/nltk_data... |
Accuracyが0.8183であることから、このモデルは比較的高い精度を持っていると言えます。
ソースコード解説
このソースコードは、映画レビューのテキストデータを分類するために、サポートベクトルマシン(SVM)を使用する機械学習モデルを構築します。
以下では、各部分を詳細に説明します。
ライブラリのインポート:
numpy
: 数値計算用のPythonライブラリ。matplotlib.pyplot
: データの可視化のためのライブラリ。TfidfVectorizer
: テキストデータを数値データに変換するためのTF-IDFベクトル化を提供するscikit-learnのクラス。train_test_split
: データセットをトレーニングセットとテストセットに分割するための関数。LinearSVC
: 線形サポートベクトルマシン(SVM)分類器を提供するscikit-learnのクラス。accuracy_score
: 分類の精度を計算するための関数。confusion_matrix
: 混同行列(分類の評価指標の一部)を計算するための関数。nltk
: Natural Language Toolkit(自然言語処理のライブラリ)。movie_reviews
: NLTKに含まれる映画レビューのコーパス。
映画レビューデータセットの読み込み:
nltk.download('movie_reviews')
: NLTKから映画レビューデータセットをダウンロードするためのコマンド。reviews
: 映画レビューのテキストを格納するリストを作成します。
レビューの肯定的/否定的なラベルの作成:
labels
: レビューテキストのファイルIDから肯定的(’pos’)または否定的(’neg’)なラベルを作成するためのリスト。
このデータセットでは、フォルダ構造を利用してラベルを決定しています。
TF-IDFベクトル化:
TfidfVectorizer
: テキストデータをTF-IDF(Term Frequency-Inverse Document Frequency)ベクトル化するためのオブジェクトを作成します。
TF-IDFは、テキスト内の単語の重要性を示すための方法で、各単語をベクトルで表現します。max_features=5000
: ベクトルの次元数を制限し、最も頻出の単語トークンのみを選択します。
データのトレーニングセットとテストセットへの分割:
train_test_split
: データセットをトレーニングセットとテストセットに分割します。
test_size=0.3
は、テストセットの割合を設定しています。
サポートベクトルマシン(SVM)モデルのトレーニング:
LinearSVC()
: 線形SVM分類器のインスタンスを作成します。fit()
: トレーニングデータを使用してモデルをトレーニングします。
テストデータでの予測:
predict()
: テストデータを使用してクラスの予測を行います。
精度の計算:
accuracy_score()
: テストデータに対する予測の精度を計算します。
精度の表示:
print("Accuracy:", accuracy)
: 精度をコンソールに表示します。
このコードは、テキストデータの前処理、機械学習モデルのトレーニング、評価をすべて含んでおり、映画レビューの肯定的/否定的な分類タスクを解決するための完全なワークフローを提供しています。