赞
踩
前言:
Hello大家好,我是Dream。 今天来学习一下如何使用Python和Scikit-Learn构建一个简单的分类器
今天我们将学习使用Python和Scikit-Learn创建一个简单的文本分类器来识别垃圾邮件。我们将先介绍数据集,并通过可视化和数据预处理方式更好地理解数据集。接着,我们将选择一个算法并使用训练集拟合它。最后,我们将评估该分类器并使用新数据进行预测。
我们选择的数据集是Enron-Spam,由Enron公司员工分享。该数据集包含邮箱中的1598封正常邮件和3977封垃圾邮件。我们将使用这些邮件的主题作为分类器的特征,并使用0表示正常邮件,1表示垃圾邮件。
机器学习领域使用Enron-Spam数据集来研究文档分类、词性标注、垃圾邮件识别等。
下载地址:https://github.com/yajiewen/Spam_detection
首先,我们需要导入相关的Python库,并读取并处理数据集:
import pandas as pd from sklearn.feature_extraction.text import CountVectorizer from sklearn.feature_extraction.text import TfidfTransformer from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import Pipeline from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report # 读取数据集 df = pd.read_csv('enron_spam_2.csv', encoding='latin-1') df = df[['v1', 'v2']] df = df.rename(columns={'v1': 'label', 'v2': 'text'}) # 数据集预处理 df['text'] = df['text'].str.lower() df['text'] = df['text'].str.replace('[^a-zA-Z0-9\s]', '')
接着,我们将数据集分为训练集和测试集:
X_train, X_test, y_train, y_test = train_test_split(df['text'], df['label'], test_size=0.2, random_state=42)
然后,我们将创建一个管道(pipeline),将文本分词并将其转换为tf-idf向量。接着,我们将使用朴素贝叶斯分类器将向量拟合到我们的训练集上。
text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')),
('tfidf', TfidfTransformer()),
('clf', MultinomialNB())])
text_clf.fit(X_train, y_train)
现在我们拟合了训练数据,我们需要评估分类器的性能并使用测试数据进行预测:
y_pred = text_clf.predict(X_test)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))
confusion_matrix函数将实际类别和预测类别组成的矩阵作为输出,classification_report函数返回精确度、召回率和F1得分等指标。通过运行上述代码,我们可以得到以下结果:
[[311 42]
[ 2 944]]
precision recall f1-score support
ham 0.99 0.88 0.93 353
spam 0.96 1.00 0.98 946
accuracy 0.96 1299
macro avg 0.97 0.94 0.95 1299
weighted avg 0.96 0.96 0.96 1299
这表明分类器在测试数据集上的表现非常好,精确度和召回率均为0.96
。
现在,我们已经评估了我们的分类器,我们可以对新数据进行预测:
new_emails = [
'Hello, please call me as soon as possible.',
'You have won a free trip to Disneyland! Call now to claim your prize!',
'Hello, can we schedule a meeting for next week?'
]
predicted = text_clf.predict(new_emails)
for email, label in zip(new_emails, predicted):
print('{} => {}'.format(email, label))
这将输出以下结果:
Hello, please call me as soon as possible. => ham
You have won a free trip to Disneyland! Call now to claim your prize! => spam
Hello, can we schedule a meeting for next week? => ham
分类器正确地将垃圾邮件识别为垃圾邮件,将普通邮件识别为常规邮件。
我们构建一个简单的文本分类器的过程,包括数据集预处理、将文本转换为向量、 模型的训练和评估,以及对新数据的预测。如果我们已经学会使用Scikit-Learn在Python中构建分类器,就可以使用类似的方法解决其他分类问题。
这里给大家推荐本书:你好,C语言
本书是一本经过精心设计和编写的C语言教程,内容涵盖C语言的基础语法和高级概念。作者致力于为读者提供一本入门型、简单易懂、条理清晰且轻快的C语言教程,另外作者利用独特的写作风格将基础的编程概念与C语言的细节很好地融合在一起,并通过大量贴近实际生活的示例同时演示一两个概念,循序渐进地带领读者探索学习C语言的乐趣,助力读者更好地掌握C语言的核心和程序设计原则。
创作背景
C语言作为一门功能强大的编程语言,具有广泛的应用领域和丰富的历史背景。在计算机科学的发展历程中,C语言被广泛用于系统级编程、嵌入式系统开发、操作系统设计以及高性能计算等领域。C语言简洁的语法结构和直接的硬件访问能力使它成为开发人员的首选。
C语言的诞生可以追溯到20世纪70年代,由丹尼斯 middot;里奇(Dennis Ritchie)在贝尔实验室开发。随着时间的推移,C语言的影响力不断扩大。C语言不仅成为许多编程语言的基础,如C 和Objective-C,而且对于理解计算机底层原理和算法也具有重要意义。许多重要的软件项目,包括操作系统(如UNIX和Linux)、数据库管理系统和网络协议,都是使用C语言编写的。
在当前的技术环境下,C语言仍然是一门重要的编程语言。尽管有许多新兴的编程语言涌现出来,但C语言的底层控制和高性能计算能力使其在系统级开发和嵌入式系统中依然不可替代。对于那些想要深入了解计算机原理、进行底层编程和开发高性能应用程序的开发人员来说,掌握C语言是必不可少的基本技能。
当当购买链接: https://product.dangdang.com/29629152.html
京东购买链接: https://item.jd.com/14165794.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。