projekt-UMA/UMA12_ANTONIO_ProjektFakeNews.ipynb

38 KiB
Raw Permalink Blame History

12. Projekt

1. Cel projektu

Celem projektu jest przewidzenie ze zbioru danych jakie widomości są Fake Newsami, użyte algorytmy:

  • TfidfVectorizer
  • PassiveAggressiveClassifier

Opis algorytmów.

TF (Term Frequency): Liczba wystąpień danego słowa w dokumencie to jego częstotliwość występowania. Wyższa wartość oznacza, że dany termin pojawia się częściej niż inne, a zatem dokument jest dobrze dopasowany, jeśli termin ten jest częścią wyszukiwanych słów.

Wektorator TfidfVectorizer przekształca zbiór dokumentów w macierz cech TF-IDF.

Algorytmy pasywno-agresywne to algorytmy uczące się online. Taki algorytm pozostaje pasywny w przypadku poprawnego wyniku klasyfikacji, a staje się agresywny w przypadku błędnego obliczenia, aktualizując i dostosowując się. W przeciwieństwie do większości innych algorytmów nie jest on zbieżny. Jego zadaniem jest dokonywanie aktualizacji korygujących stratę, powodujących bardzo niewielkie zmiany w normie wektora wag.

Dane news.csv wykorzstane do uczenia pochodzą ze strony https://paperswithcode.com/datasets?task=fake-news-detection

2. Importowanie potrzebnych bibliotek

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

3. Wczytanie danych

df=pd.read_csv('news.csv')
df.shape
df.head(20)
Unnamed: 0 title text label
0 8476 You Can Smell Hillarys Fear Daniel Greenfield, a Shillman Journalism Fello... FAKE
1 10294 Watch The Exact Moment Paul Ryan Committed Pol... Google Pinterest Digg Linkedin Reddit Stumbleu... FAKE
2 3608 Kerry to go to Paris in gesture of sympathy U.S. Secretary of State John F. Kerry said Mon... REAL
3 10142 Bernie supporters on Twitter erupt in anger ag... — Kaydee King (@KaydeeKing) November 9, 2016 T... FAKE
4 875 The Battle of New York: Why This Primary Matters It's primary day in New York and front-runners... REAL
5 6903 Tehran, USA \nIm not an immigrant, but my grandparents ... FAKE
6 7341 Girl Horrified At What She Watches Boyfriend D... Share This Baylee Luciani (left), Screenshot o... FAKE
7 95 Britains Schindler Dies at 106 A Czech stockbroker who saved more than 650 Je... REAL
8 4869 Fact check: Trump and Clinton at the 'commande... Hillary Clinton and Donald Trump made some ina... REAL
9 2909 Iran reportedly makes new push for uranium con... Iranian negotiators reportedly have made a las... REAL
10 1357 With all three Clintons in Iowa, a glimpse at ... CEDAR RAPIDS, Iowa — “I had one of the most wo... REAL
11 988 Donald Trumps Shockingly Weak Delegate Game S... Donald Trumps organizational problems have go... REAL
12 7041 Strong Solar Storm, Tech Risks Today | S0 News... Click Here To Learn More About Alexandra's Per... FAKE
13 7623 10 Ways America Is Preparing for World War 3 October 31, 2016 at 4:52 am \nPretty factual e... FAKE
14 1571 Trump takes on Cruz, but lightly Killing Obama administration rules, dismantlin... REAL
15 4739 How women lead differently As more women move into high offices, they oft... REAL
16 7737 Shocking! Michele Obama & Hillary Caught Glamo... Shocking! Michele Obama & Hillary Caught Glamo... FAKE
17 8716 Hillary Clinton in HUGE Trouble After America ... 0 \nHillary Clinton has barely just lost the p... FAKE
18 3304 What's in that Iran bill that Obama doesn't like? Washington (CNN) For months, the White House a... REAL
19 3078 The 1 chart that explains everything you need ... While paging through Pew's best data visualiza... REAL
labels=df.label
labels.head()
0    FAKE
1    FAKE
2    REAL
3    FAKE
4    REAL
Name: label, dtype: object

4. Wizualizacja cech na histogramach

df.hist(figsize=(20,20), xrot=-45)
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x7f51d81ab470>]],
      dtype=object)

5. Podział na zbiór testowy i treningowy

x_train,x_test,y_train,y_test=train_test_split(df['text'], labels, test_size=0.2, random_state=7)

6. Trenowanie

6.1. Użycie TFIDF

Inicjalizuje wektor TfidfVectorizer ze słowami stop z języka angielskiego i maksymalną częstotliwością występowania w dokumentach wynoszącą 0,7 (terminy o wyższej częstotliwości występowania w dokumentach zostaną odrzucone). Stop words to najczęściej występujące słowa w danym języku, które należy odfiltrować przed przetworzeniem danych języka naturalnego. Wektoryzator TfidfVectorizer przekształca zbiór nieprzetworzonych dokumentów w macierz cech TF-IDF.

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)

6.2. PassiveAggressiveClassifier

pac=PassiveAggressiveClassifier(max_iter=50)
pac.fit(tfidf_train,y_train)

#Przewidzenie na zbiorze testowym i kalkulacja dokładnośći
y_pred=pac.predict(tfidf_test)
score=accuracy_score(y_test,y_pred)
print(f'Dokładność: {round(score*100,2)}%')
Dokładność: 92.82%
/usr/lib/python3/dist-packages/sklearn/linear_model/base.py:283: DeprecationWarning: `np.int` is a deprecated alias for the builtin `int`. To silence this warning, use `int` by itself. Doing this will not modify any behavior and is safe. When replacing `np.int`, you may wish to use e.g. `np.int64` or `np.int32` to specify the precision. If you wish to review your current use, check the release note link for additional information.
Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations
  indices = (scores > 0).astype(np.int)

7. Podsumowanie wyników

W tym modelu uzyskaliśmy dokładność 92,82%. Na koniec wydrukujmy macierz konfuzji, aby uzyskać wgląd w liczbę fałszywych i prawdziwych wyników negatywnych i pozytywnych.

confusion_matrix(y_test,y_pred, labels=['FAKE','REAL'])
array([[590,  48],
       [ 43, 586]])

W przypadku tego modelu mamy 590 prawdziwych wyników dodatnich, 586 prawdziwych wyników ujemnych, 43 fałszywe wyniki dodatnie i 48 fałszywych wyników ujemnych.