<jupyter_start><jupyter_text>Trabalho 4 da disciplina de Mineração de Dados [CK0223] Nome: <NAME> Matrícula: 434054 Professor: Dr. <NAME><jupyter_code>import csv
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.metrics import classification_report, plot_confusion_matrix<jupyter_output><empty_output><jupyter_text>1. Importar e separar o conjunto de dados fornecido em treinamento e teste;<jupyter_code>df = pd.read_csv('noticias.csv', delimiter=",")
df.columns
df = df.rename(columns={'Unnamed: 0': 'id'})
df.head(5)
df.shape
df['titleAndText'] = df['title'] + ' ' + df['text']
X, y = df['titleAndText'], df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)<jupyter_output><empty_output><jupyter_text>2. Criar uma matriz vetorizada que represente os textos utilizando o Count Vectorizer;<jupyter_code># conjunto de treino e teste vetorizados pelo CountVectorizer
cvectorizer = CountVectorizer()
X_train_c = cvectorizer.fit_transform(X_train)
X_test_c = cvectorizer.transform(X_test)
X_train_c_array = X_train_c.toarray()

tvectorizer = TfidfVectorizer()
X_train_t = tvectorizer.fit_transform(X_train)
X_test_t = tvectorizer.transform(X_test)
X_train_t_array = X_train_t.toarray()
X_train_c_array<jupyter_output><empty_output><jupyter_text>3. Criar uma matriz vetorizada que represente os textos utilizando o TF-IDF Vectorizer;<jupyter_code>X_train_c_array<jupyter_output><empty_output><jupyter_text>4. Criar dois modelos para classificar os textos utilizando o algoritmo Naive Bayes (multinomial) utilizando o CountVectorizer e o TfidfVectorizer;  Naive Bayes utilizando dataset com Count Vectorizer<jupyter_code>mnb = MultinomialNB()
mnb.fit(X_train_c, y_train)
mnb_prediction = mnb.predict(X_test_c)
mnb_results = np.array(list(zip(y, mnb_prediction)))
mnb_results = pd.DataFrame(mnb_results, columns=['label', 'prediction'])
mnb_results.sample(10)<jupyter_output><empty_output><jupyter_text>Naive Bayes utilizando dataset com TF-IDF Vectorizer<jupyter_code>mnb2 = MultinomialNB()
mnb2.fit(X_train_t, y_train)
mnb_prediction2 = mnb.predict(X_test_t)
mnb_results2 = np.array(list(zip(y, mnb_prediction2)))
mnb_results2 = pd.DataFrame(mnb_results2, columns=['label', 'prediction'])
mnb_results2.sample(10)<jupyter_output><empty_output><jupyter_text>5. Comparar os resultados utilizando a precisão e a Matriz de Confusão;  Count Vectorizer<jupyter_code>print(classification_report(y_test, mnb_prediction))
plot_confusion_matrix(mnb, X_test_c, y_test)
plt.show()<jupyter_output><empty_output><jupyter_text>TF-IDF Vectorizer<jupyter_code>print(classification_report(y_test, mnb_prediction2))
plot_confusion_matrix(mnb2, X_test_t, y_test)
plt.show()<jupyter_output><empty_output><jupyter_text>Para *Count Vectorizer* os valores de precisão foram 93% para FAKE e 87% para REAL. Para *TF-IDF Vectorizer*, os valores de precisão foram 89% para FAKE, e 91% para REAL.Na matriz de confusão é possível ver que *Count Vectorizer* erra menos ao dizer se a notícia é FAKE do que ao dizer se é REAL. Esse mesmo padrão é encontrado em *TF-IDF Vectorizer*.  6. [BÔNUS] Propor passos adicionais para melhorar os resultados encontrados. Para melhorar os resultados, sugiro rodar o método de GridSearch (https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html) em todos os dados, aumentando assim a amostra de hiper-parâmetros para treinamento do modelo.<jupyter_code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.0941240478781284, 'fraction_numerical': 0.012241566920565832, 'mean_word_length': 8.169576059850375, 'pattern_counts': {'":': 0, '<': 39, '<?xml version=': 0, '>': 39, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '9', 'dir': 'jupyter-structured-clean-dedup', 'id': '261064', 'license': 'MIT', 'n_tokens_mistral': 1396, 'n_tokens_neox': 1366, 'n_words': 311, 'path': 'Trabalho_4_Mineracao_de_Dados_Matheus_Guimarães.ipynb', 'repo_name': 'matheustguimaraes/mineracao-trabalho4', 'size': '3722'}