在这篇文章中,将探讨如何利用决策树机器学习算法来构建一个模型,该模型能够使用新闻数据集来区分新闻的真实性。当前,假新闻的传播速度极快,已经成为了一个严重的问题。所使用的数据集是一个已经标记好的数据集,其中包含了REAL(真实)或FAKE(虚假)的标签。数据集中包含了标题和文本作为独立特征,而标签则是依赖特征。
决策树算法是一种监督式的机器学习算法,所有的决策都是基于某些条件进行的。决策树有一个根节点和从根节点延伸出的叶节点,这些节点的决策基于一些参数,比如基尼指数、熵、信息增益等。想要了解更多关于决策树算法的信息,请阅读文章。在这篇文章中,解释了决策树的概念,并且通过一个实际的问题陈述,展示了如何使用信息增益来构建决策树。
在开始创建和训练模型之前,首先需要对数据集进行预处理。首先,导入一些重要的基础库。
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter("ignore")
Seaborn和Matplotlib是两个用于可视化的著名库。接下来是数据集,点击下载数据集。将新闻文件的路径粘贴到read_csv中,并使用pandas来读取它。
df = pd.read_csv('path_to_news_file.csv')
创建数据框架后,只需输入数据框架的名称并运行,即可查看数据框架。它不会显示所有行,而是给出前五行和后五行。
print(df.head())
print(df.tail())
查看数据框架的信息。
df.info()
检查空值。使用isnull()方法进行检查。
print(df.isnull().sum())
可以看到所有的值都是0,这意味着数据集中没有空值。因此,可以继续进行,无需对数据集进行任何更改。
查看形状。这个方法给出了数据集中的行数和列数。
print("There are {} rows and {} columns.".format(df.shape[0], df.shape[1]))
查看数据框架的统计描述。统计描述显示了诸如计数(列中的非空值)、平均值、标准差、最小值、最大值以及列中值的百分位数等详细信息。在数据框架中,只有一个数值列,因此它只会给出一个列的描述。但不需要这个列来构建模型。
print(df.describe())
使用drop方法删除这个无名列。
df = df.drop(['Unnamed: 0'], axis=1)
现在查看最终更新后的数据框架。
print(df)
让看看数据集中有多少真实新闻和多少假新闻。value_counts方法实际上返回了给定特征中特定变量的计数。
print(df['label'].value_counts())
有3171条真实新闻和3164条假新闻。OMG!新闻是假新闻的概率几乎为0.5,所以,要警惕这些新闻。
使用seaborn库可视化计数图。
plt.figure(figsize=(5,10))
sns.countplot(df['label'])
plt.show()
在图表中,可以看到两者几乎相似。定义x和y。在创建模型之前,首先需要定义x和y,其中x包含数据集中的所有独立特征,y包含依赖特征,即标签。
x = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
导入CountVectorizer。由于正在处理文本数据,因此需要使用计数向量化器。它实际上用于将文本转换为基于每个单词的频率的向量,这意味着在整个文本中单词重复了多少次。它在sci-kit learn库中可用。
from sklearn.feature_extraction.text import CountVectorizer
vect = CountVectorizer(stop_words="english", max_features=1000)
x1 = vect.fit_transform(x[:, 0]).todense()
x2 = vect.fit_transform(x[:, 1]).todense()
x_mat = np.hstack((x1, x2))
让查看最终创建的矩阵。
print(x_mat)
将数据分割为训练和测试数据集。为此,需要导入train_test_split,它在sci-kit learn库中可用。
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x_mat, y, random_state=1000)
创建模型。导入DecisionTreeClassifier并将criterion设置为entropy,以便模型将使用熵作为构建决策树的标准,并将其分配给一个名为model的变量。从现在起,无论何时需要使用DecisionTreeClassifier(criterion="entropy"),只需要使用model。
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(criterion="entropy")
训练模型。使用fit方法训练模型,并将训练数据集作为参数传递给它。
model.fit(x_train, y_train)
是时候预测结果了。为此使用predict方法。
y_pred = model.predict(x_test)
查看预测结果。
print(y_pred)
from sklearn.metrics import accuracy_score, confusion_matrix
accuracy = accuracy_score(y_pred, y_test) * 100
print("模型的准确性是 {:.2f}%".format(accuracy))
print(confusion_matrix(y_pred, y_test))