こんにちわ 今日は、一般的な機械学習アルゴリズムを使って、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%以上の精度を得ることができ、とても驚いています。
フェイクニュース検出器を気に入っていただけたでしょうか?もっと詳しく知りたい方はこちら