20 Newsgroupsデータセット scikit-learn

20 Newsgroupsデータセット

scikit-learn20 Newsgroupsデータセットは、ニュースグループから抽出されたテキストデータのコレクションで、テキスト分類タスクに使用できます。

以下は、scikit-learnを使用してこのデータセットを読み込み、単純なテキスト分類のサンプルソースコードの一部です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score

# 20 Newsgroupsデータセットを読み込む
newsgroups = fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'))

# テキストデータを単語ベクトルに変換する
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(newsgroups.data)

# ターゲットラベルを取得
y = newsgroups.target

# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ナイーブベイズ分類器を訓練
clf = MultinomialNB()
clf.fit(X_train, y_train)

# テストデータで予測
y_pred = clf.predict(X_test)

# 分類精度を評価
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

このコードは、20 Newsgroupsデータセットを読み込み、テキストデータを単語ベクトルに変換してから、ナイーブベイズ分類器を訓練しています。

最終的に、テストデータでの分類精度を評価しています。

[実行結果]

1
Accuracy: 0.6037135278514589

このサンプルコードは、テキストデータの分類タスクの基本的な手順を示しています。

データセットや分類アルゴリズムを変更して、具体的なタスクに合わせてカスタマイズできます。

ソースコード解説

以下では各ステップを詳細に説明します。

1. データセットの読み込み:

1
from sklearn.datasets import fetch_20newsgroups

まず、fetch_20newsgroups関数を使用して20 Newsgroupsデータセットを読み込みます。
このデータセットは、20の異なるニュースグループから抽出されたテキストデータを含んでいます。
このデータセットを使用して、テキスト文書の分類(ニュースグループごとの分類)を行います。

2. テキストデータの前処理:

1
2
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(newsgroups.data)

テキストデータを数値データに変換するために、CountVectorizerを使用します。
fit_transformメソッドを使用して、テキストデータを単語ベクトル(単語の出現頻度に基づくベクトル)に変換し、Xに格納します。

3. ターゲットラベルの設定:

1
y = newsgroups.target

ニュースグループごとのカテゴリ(ターゲットラベル)をyに格納します。
これらは、各テキスト文書がどのニュースグループに属するかを示すラベルです。

4. 訓練データとテストデータへの分割:

1
2
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

train_test_split関数を使用して、データを訓練データとテストデータに分割します。
訓練データはモデルの訓練に使用され、テストデータはモデルの評価に使用されます。
通常、データセットの一部(ここでは20%)がテストデータとして分割されます。

5. 分類モデルの訓練:

1
2
3
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB()
clf.fit(X_train, y_train)

ナイーブベイズ分類器(Multinomial Naive Bayes)を使用して、訓練データをもとにモデルを訓練します。
このモデルは、テキストデータからカテゴリを予測するために使用されます。

6. テストデータでの予測と評価:

1
2
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

テストデータを使用してモデルの予測を行い、予測結果と実際のラベルを比較して分類精度を計算します。
accuracy_score関数を使用して、正確性(Accuracy)を計算し、その結果を表示します。

このコードは、テキストデータの分類タスクを実行する基本的なスケルトンを提供しており、テキストデータを数値データに変換し、分類モデルを訓練して評価する一連のステップが含まれています。
特に自然言語処理(NLP)のタスクにおいて非常に一般的なプロセスです。

結果解説

実行結果の「Accuracy: 0.6037135278514589」は、分類モデルの性能を示す重要な指標で、分類タスクの正確性を表しています。

以下にその詳細を説明します:

Accuracy (正確性):

分類モデルがテストデータセットに対して正しく予測した割合を示す指標です。
Accuracyは0から1の間の値を取り、1に近いほどモデルの性能が高いことを示します。

具体的な説明:

  • Accuracy: 0.6037135278514589 は、このモデルがテストデータセットに対して約60.37%の正確性を持っていることを示しています。

  • 正確性が約60.37%ということは、テストデータセット内の文書の約60.37%が正しくそのカテゴリに分類されたことを意味します。

  • 逆に、残りの約39.63%の文書は誤って分類された可能性があります。

正確性は、分類モデルの性能を評価するための重要な指標の一つですが、タスクによっては他の指標(適合率、再現率、F1スコアなど)も重要です。

特にクラスの不均衡がある場合には、Accuracyだけでなく、他の指標も考慮することが重要です。