原力计划

前言: 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中构建分类器,就可以使用类似的方法解决其他分类问题。

好书推荐:

这里给大家推荐本书:PyTorch教程:21个项目玩转PyTorch实战

通过经典项目入门 PyTorch,通过前沿项目提升 PyTorch,基于PyTorch玩转深度学习,本书适合人工智能、机器学习、深度学习方面的人员阅读,也适合其他 IT 方面从业者,另外,还可以作为相关专业的教材。

内容简介
PyTorch 是基于 Torch 库的开源机器学习库,它主要由 Meta(原 Facebook)的人工智能研究实验室开发,在自然语言处理和计算机视觉领域都具有广泛的应用。本书介绍了简单且经典的入门项目,方便快速上手,如 MNIST数字识别,读者在完成项目的过程中可以了解数据集、模型和训练等基础概念。本书还介绍了一些实用且经典的模型,如 R-CNN 模型,通过这个模型的学习,读者可以对目标检测任务有一个基本的认识,对于基本的网络结构原理有一定的了解。另外,本书对于当前比较热门的生成对抗网络和强化学习也有一定的介绍,方便读者拓宽视野,掌握前沿方向。

作者简介
王飞,2019年翻译了PyTorch官方文档,读研期间研究方向为自然语言处理,主要是中文分词、文本分类和数据挖掘。目前在教育行业工作,探索人工智能技术在教育中的应用。
何健伟,曾任香港大学助理研究员,研究方向为自然语言处理,目前从事大规模推荐算法架构研究工作。
林宏彬,硕士期间研究方向为自然语言处理,现任阿里巴巴算法工程师,目前从事广告推荐领域的算法研究工作。
史周安,软件工程硕士,人工智能技术爱好者、实践者与探索者。目前从事弱监督学习、迁移学习与医学图像相关工作。

北京大学出版社,4月“423世界读书日”促销活动安排来啦
当当活动日期:4.6-4.11,4.18-4.23
京东活动日期: 4.6 一天, 4.17-4.23
活动期间满100减50或者半价5折销售
希望大家关注参与423读书日北大社促销活动

京东自营购买链接:https://item.jd.com/13522327.html
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
❤️❤️❤️如果你喜欢的话,就不要吝惜你的一键三连了~

最后,有任何问题,欢迎关注下面的公众号,获取第一时间消息、作者联系方式及每周抽奖等多重好礼! ↓↓↓

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年4月8日
下一篇 2023年4月8日

相关推荐