こんにちわ 今日は、一般的な機械学習アルゴリズムを使って、Pythonでフェイクニュース検出器を作成します。
この記事もチェック:知っておきたいPythonの機械学習アルゴリズムTOP5
1. モジュールのインポート
他のプロジェクトと同じように、このプロジェクトの最初のステップは、同様にモジュールをインポートすることです。
今回はNumpy、Pandas、itertoolsを使用します。
そのためのコードは以下の通りです。
1
2
3
4
5
6
7
|
import numpy as np
import pandas as pd
import itertools
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
|
2. データの読み込み
では、ここにあるフェイクニュース検出用のcsvファイルからデータを読み込んでみましょう。
最初の5行を表示するコードは以下のとおりです。
1
2
|
data = pd.read_csv( 'news.csv' )
data.head() |
CSVファイルはPythonのコードと同じフォルダにあることを確認してください。
次に、先ほど読み込んだデータからラベルを抽出し、最初の5つのラベルを印刷しましょう。
1
2
|
lb = df.label
lb.head() |
3. 学習データとテストデータの作成
最終的なモデル/分類器にデータを渡す前に、データをテストデータとトレーニングデータに分割する必要があります。
1
|
x_train,x_test,y_train,y_test = train_test_split(data[ 'text' ], lb, test_size = 0.2 , random_state = 7 )
|
データの分割には「80-20」ルールを使用し、80%のデータをトレーニングデータに、残りの20%をテストデータに使用します。
4. Tfidf-Vectorizer と PassiveAggressiveClassifier の実装
Tfidf-Vectorizerを使って、テキスト配列を TF-IDF
行列に変換します。
- TF (Term Frequency)。ある単語がテキスト中に出現する回数を表す。
- IDF (Inverse Document Frequency): 逆文書頻度。ある単語がデータ全体の中でどれだけ重要であるかを示す指標です。
その後、PassiveAggressiveClassifier
を適用し、学習データにデータを当てはめる。
この分類器は各反復の後に損失を更新し、同様に重みベクトルにも若干の変更を加える。
最後に、テストデータについて予測を行い、テストデータに対するモデルの精度を計算します。
その結果、テストデータに対して90%以上の精度を得ることができました。
以下はそのコードです。
1
2
3
4
5
6
7
8
9
10
11
|
tfidf_vectorizer = TfidfVectorizer(stop_words = 'english' , max_df = 0.7 )
tfidf_train = tfidf_vectorizer.fit_transform(x_train)
tfidf_test = tfidf_vectorizer.transform(x_test)
pac = PassiveAggressiveClassifier(max_iter = 50 )
pac.fit(tfidf_train,y_train) y_pred = pac.predict(tfidf_test)
score = accuracy_score(y_test,y_pred)
print ( "Accuracy: " , round (score * 100 , 2 ), "%" )
|
まとめ
本日は、Pythonを用いて、多くのニュースデータを含むデータセットからフェイクニュースを検出することを学びました。
検出はTfidfVectorizerとPassiveAggressiveClassifierを使用して行いました。
その結果、90%以上の精度を得ることができ、とても驚いています。
フェイクニュース検出器を気に入っていただけたでしょうか?もっと詳しく知りたい方はこちら