Главная страница
Навигация по странице:

  • Шаги, которые необходимо выполнить

  • Импорт библиотек и наборов данных

  • Предварительная обработка данных

  • Предварительная обработка и анализ новостной колонки

  • Преобразование текста в векторы

  • Обучение, оценка и прогнозирование моделей

  • Обнаружение поддельных новостей. Обнаружение поддельных новостей с помощью машинного обучения. Обнаружение поддельных новостей с помощью машинного обучения


    Скачать 468.01 Kb.
    НазваниеОбнаружение поддельных новостей с помощью машинного обучения
    АнкорОбнаружение поддельных новостей
    Дата13.04.2023
    Размер468.01 Kb.
    Формат файлаdocx
    Имя файлаОбнаружение поддельных новостей с помощью машинного обучения.docx
    ТипДокументы
    #1058357

    Обнаружение поддельных новостей с помощью машинного обучения

    • https://www.geeksforgeeks.org/fake-news-detection-using-machine-learning/?ref=rp



    • Последнее обновление : 26 октября 2022 г.

     Читать

     Обсудить

     Курсы

     Практика

     Видео

    Поддельные новости на разных платформах широко распространяются и вызывают серьезную озабоченность, поскольку вызывают социальные войны и постоянный разрыв связей, установленных между людьми. Уже проводится много исследований, посвященных классификации поддельных новостей.

    Здесь мы попытаемся решить эту проблему с помощью машинного обучения на Python.

    Перед запуском кода загрузите набор данных, нажав на ссылку.

    Шаги, которые необходимо выполнить

    1. Импорт библиотек и наборов данных

    2. Предварительная обработка данных

    3. Предварительная обработка и анализ новостной колонки

    4. Преобразование текста в векторы

    5. Обучение, оценка и прогнозирование моделей

    Импорт библиотек и наборов данных

    Используемые библиотеки :

    • Pandas: Для импорта набора данных.

    • Seaborn / Matplotlib: для визуализации данных.

    • Python3

    import pandas as pd

    import seaborn as sns

    import matplotlib.pyplot as plt

    Давайте импортируем загруженный набор данных.

    • Python3

    data = pd.read_csv('News.csv',index_col=0)

    data.head()

    Вывод :



     

    Предварительная обработка данных

    Форму набора данных можно найти по приведенному ниже коду.

    • Python3

    data.shape

    Вывод:

    (44919, 5)

    Поскольку заголовок, тема и столбец даты не будут полезны для идентификации новостей. Итак, мы можем отбросить эти столбцы.

    • Python3

    data = data.drop(["title", "subject","date"], axis = 1)

    Теперь нам нужно проверить, есть ли какое-либо нулевое значение (мы удалим эти строки)

    • Python3

    data.isnull().sum()

    Вывод:

    текст 0

    класс 0

    Таким образом, нулевого значения нет.

    Теперь нам нужно перетасовать набор данных, чтобы предотвратить смещение модели. После этого мы сбросим индекс, а затем удалим его. Потому что столбец индекса нам не полезен.

    • Python3

    # Shuffling

    data = data.sample(frac=1)

    data.reset_index(inplace=True)

    data.drop(["index"], axis=1, inplace=True)

    Теперь давайте рассмотрим уникальные значения в каждой категории, используя приведенный ниже код.

    • Python3

    sns.countplot(data=data,

                  x='class',

                  order=data['class'].value_counts().index)

    Вывод:



     

    Предварительная обработка и анализ новостной колонки

    Во-первых, мы удалим из текста все стоп-слова, знаки препинания и любые неуместные пробелы. Для этого требуется библиотека NLTK, и некоторые из ее модулей необходимо загрузить. Итак, для этого выполните приведенный ниже код.

    • Python3

    from tqdm import tqdm

    import re

    import nltk

    nltk.download('punkt')

    nltk.download('stopwords')

    from nltk.corpus import stopwords

    from nltk.tokenize import word_tokenize

    from nltk.stem.porter import PorterStemmer

    from wordcloud import WordCloud

    Как только у нас будут все необходимые модули, мы сможем создать текст предварительной обработки имени функции. Эта функция будет предварительно обрабатывать все данные, предоставленные в качестве входных данных.

    • Python3

    def preprocess_text(text_data):

        preprocessed_text = []

          

        for sentence in tqdm(text_data):

            sentence = re.sub(r'[^\w\s]', '', sentence)

            preprocessed_text.append(' '.join(token.lower()

                                      for token in str(sentence).split()

                                      if token not in stopwords.words('english')))

      

        return preprocessed_text

    Чтобы реализовать эту функцию во всех новостях в текстовом столбце, выполните приведенную ниже команду.

    • Python3

    preprocessed_review = preprocess_text(data['text'].values)

    data['text'] = preprocessed_review

    Эта команда займет некоторое время (поскольку взятый набор данных очень большой).

    Давайте представим WordCloud для поддельных и реальных новостей отдельно.

    • Python3

    # Real

    consolidated = ' '.join(

        word for word in data['text'][data['class'] == 1].astype(str))

    wordCloud = WordCloud(width=1600,

                          height=800,

                          random_state=21,

                          max_font_size=110,

                          collocations=False)

    plt.figure(figsize=(15, 10))

    plt.imshow(wordCloud.generate(consolidated), interpolation='bilinear')

    plt.axis('off')

    plt.show()

    Вывод :



     

    • Python3

    # Fake

    consolidated = ' '.join(

        word for word in data['text'][data['class'] == 0].astype(str))

    wordCloud = WordCloud(width=1600,

                          height=800,

                          random_state=21,

                          max_font_size=110,

                          collocations=False)

    plt.figure(figsize=(15, 10))

    plt.imshow(wordCloud.generate(consolidated), interpolation='bilinear')

    plt.axis('off')

    plt.show()

    Вывод :



     

    Теперь давайте построим гистограмму 20 самых часто встречающихся слов.

    • Python3

    from sklearn.feature_extraction.text import CountVectorizer

      

      

    def get_top_n_words(corpus, n=None):

        vec = CountVectorizer().fit(corpus)

        bag_of_words = vec.transform(corpus)

        sum_words = bag_of_words.sum(axis=0)

        words_freq = [(word, sum_words[0, idx])

                      for word, idx in vec.vocabulary_.items()]

        words_freq = sorted(words_freq, key=lambda x: x[1],

                            reverse=True)

        return words_freq[:n]

      

      

    common_words = get_top_n_words(data['text'], 20)

    df1 = pd.DataFrame(common_words, columns=['Review', 'count'])

      

    df1.groupby('Review').sum()['count'].sort_values(ascending=False).plot(

        kind='bar',

        figsize=(10, 6),

        xlabel="Top Words",

        ylabel="Count",

        title="Bar Chart of Top Words Frequency"

    )

    Вывод :



     

    Преобразование текста в векторы

    Перед преобразованием данных в векторы разделите их на обучающие и тестовые.

    • Python3

    from sklearn.model_selection import train_test_split

    from sklearn.metrics import accuracy_score

    from sklearn.linear_model import LogisticRegression

      

    x_train, x_test, y_train, y_test = train_test_split(data['text'], 

                                                        data['class'], 

                                                        test_size=0.25)

    Теперь мы можем преобразовать обучающие данные в векторы с помощью TfidfVectorizer.

    • Python3

    from sklearn.feature_extraction.text import TfidfVectorizer

      

    vectorization = TfidfVectorizer()

    x_train = vectorization.fit_transform(x_train)

    x_test = vectorization.transform(x_test)

    Обучение, оценка и прогнозирование моделей

    Теперь набор данных готов к обучению модели.

    Для обучения мы будем использовать логистическую регрессию и оценивать точность прогнозирования с помощью accuracy_score.

    • Python3

    from sklearn.linear_model import LogisticRegression

      

    model = LogisticRegression()

    model.fit(x_train, y_train)

      

    # testing the model

    print(accuracy_score(y_train, model.predict(x_train)))

    print(accuracy_score(y_test, model.predict(x_test)))

    Вывод :

    0.993766511324171

    0.9893143365983972

    Давайте потренируемся с классификатором дерева решений.

    • Python3

    from sklearn.tree import DecisionTreeClassifier

      

    model = DecisionTreeClassifier()

    model.fit(x_train, y_train)

      

    # testing the model

    print(accuracy_score(y_train, model.predict(x_train)))

    print(accuracy_score(y_test, model.predict(x_test)))

    Вывод :

    0.9999703167205913

    0.9951914514692787

    Матрица путаницы для классификатора дерева решений может быть реализована с помощью приведенного ниже кода.

    • Python3

    # Confusion matrix of Results from Decision Tree classification

    from sklearn import metrics

    cm = metrics.confusion_matrix(y_test, model.predict(x_test))

      

    cm_display = metrics.ConfusionMatrixDisplay(confusion_matrix=cm,

                                                display_labels=[False, True])

      

    cm_display.plot()

    plt.show()

    Вывод :



     

    Заключение

    Классификатор дерева решений и логистическая регрессия работают хорошо.


    написать администратору сайта