SMS垃圾短信识别项目

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

项目背景

随着数字通信的快速发展,垃圾短信成为了一个普遍而烦人的问题。这些不请自来的消息不仅打扰了我们的日常生活,还可能包含诈骗和欺诈的风险。因此,有效地识别并过滤垃圾短信变得至关重要。

项目目标

本项目的主要目标是开发一个机器学习模型,能够自动、准确地区分垃圾短信和正常短信。通过训练模型识别典型的垃圾短信特征,我们可以大大减少垃圾短信对用户的干扰,并提高通信的安全性和效率。

项目应用

  1. 邮件服务提供商: 自动过滤垃圾短信,保护用户免受不必要的打扰和潜在的欺诈风险。
  2. 企业通信: 在内部通信系统中部署,确保员工不会因垃圾短信而分散注意力,提高工作效率。
  3. 个人用户: 为个人用户提供一个工具或应用程序,帮助他们在日常生活中自动识别和过滤垃圾短信。

数据集详情

“垃圾邮件”的概念多种多样:产品/网站广告、快速赚钱计划、连锁信、色情内容……

垃圾短信集合是一组为垃圾短信研究而收集的带有 SMS 标记的消息。 它包含一组 5,574 条英文 SMS 消息,根据垃圾邮件(合法)或垃圾邮件进行标记。

图片[1]-SMS垃圾短信识别项目-VenusAI

模型选择

为了实现垃圾短信的有效识别,我们考虑了以下几种机器学习算法:

  1. 逻辑回归(Logistic Regression): 提供快速、有效的分类,适合基准模型。
  2. 朴素贝叶斯(Naive Bayes): 在文本分类任务中表现出色,尤其是在短信长度有限的情况下。
  3. 支持向量机(SVC): 适用于复杂的文本数据,能够处理高维空间。
  4. 随机森林(Random Forest): 一个强大的集成学习方法,可以提供准确的分类结果。

依赖库

在开发过程中,我们使用了以下Python库:

  • pandas: 数据处理和分析。
  • numpy: 数值计算。
  • nltk: 自然语言处理。
  • re: 正则表达式,用于文本数据清洗。
  • sklearn: 提供机器学习算法和数据预处理工具。

代码实现

import pandas as pd 
import re
from nltk.corpus import stopwords

加载数据

df = pd.read_csv('spam.csv')
df.head()
v1v2Unnamed: 2Unnamed: 3Unnamed: 4
0hamGo until jurong point, crazy.. Available only ...NaNNaNNaN
1hamOk lar... Joking wif u oni...NaNNaNNaN
2spamFree entry in 2 a wkly comp to win FA Cup fina...NaNNaNNaN
3hamU dun say so early hor... U c already then say...NaNNaNNaN
4hamNah I don't think he goes to usf, he lives aro...NaNNaNNaN
# 获取有用的数据(前两列)
df = df[['v2', 'v1']]
# df.rename(columns={'v2': 'messages', 'v1': 'label'}, inplace=True)
df = df.rename(columns={'v2': 'messages', 'v1': 'label'})
df.head()
messageslabel
0Go until jurong point, crazy.. Available only ...ham
1Ok lar... Joking wif u oni...ham
2Free entry in 2 a wkly comp to win FA Cup fina...spam
3U dun say so early hor... U c already then say...ham
4Nah I don't think he goes to usf, he lives aro...ham

数据预处理


# 检查的空值
df.isnull().sum()
messages    0
label       0
dtype: int64
STOPWORDS = set(stopwords.words('english'))def clean_text(text):# 转化成小写text = text.lower()# 移除特殊字符text = re.sub(r'[^0-9a-zA-Z]', ' ', text)# 移除多余空格text = re.sub(r'\s+', ' ', text)# 移除停用词text = " ".join(word for word in text.split() if word not in STOPWORDS)return text
# 清洗数据
df['clean_text'] = df['messages'].apply(clean_text)
df.head()
messageslabelclean_text
0Go until jurong point, crazy.. Available only ...hamgo jurong point crazy available bugis n great ...
1Ok lar... Joking wif u oni...hamok lar joking wif u oni
2Free entry in 2 a wkly comp to win FA Cup fina...spamfree entry 2 wkly comp win fa cup final tkts 2...
3U dun say so early hor... U c already then say...hamu dun say early hor u c already say
4Nah I don't think he goes to usf, he lives aro...hamnah think goes usf lives around though

数据与标签划分

X = df['clean_text']
y = df['label']
y = df['label']

模型训练

from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split 
from sklearn.metrics import classification_report
from sklearn.feature_extraction.text import CountVectorizer , TfidfTransformerdef classify(model, X, y):# train test splitx_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42, shuffle=True, stratify=y)# model trainingpipeline_model = Pipeline([('vect', CountVectorizer()),('tfidf', TfidfTransformer()),('clf', model)])pipeline_model.fit(x_train, y_train)print('Accuracy:', pipeline_model.score(x_test, y_test)*100)#     cv_score = cross_val_score(model, X, y, cv=5)
#     print("CV Score:", np.mean(cv_score)*100)y_pred = pipeline_model.predict(x_test)print(classification_report(y_test, y_pred))
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
classify(model, X, y)
Accuracy: 96.8413496051687precision    recall  f1-score   supportham       0.97      1.00      0.98      1206spam       0.99      0.77      0.87       187accuracy                           0.97      1393macro avg       0.98      0.88      0.92      1393
weighted avg       0.97      0.97      0.97      1393
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()
classify(model, X, y)
Accuracy: 96.69777458722182precision    recall  f1-score   supportham       0.96      1.00      0.98      1206spam       1.00      0.75      0.86       187accuracy                           0.97      1393macro avg       0.98      0.88      0.92      1393
weighted avg       0.97      0.97      0.96      1393
from sklearn.svm import SVC
model = SVC(C=3)
classify(model, X, y)
Accuracy: 98.27709978463747precision    recall  f1-score   supportham       0.98      1.00      0.99      1206spam       1.00      0.87      0.93       187accuracy                           0.98      1393macro avg       0.99      0.94      0.96      1393
weighted avg       0.98      0.98      0.98      1393
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier()
classify(model, X, y)
Accuracy: 97.4156496769562precision    recall  f1-score   supportham       0.97      1.00      0.99      1206spam       1.00      0.81      0.89       187accuracy                           0.97      1393macro avg       0.99      0.90      0.94      1393
weighted avg       0.97      0.97      0.97      1393

代码与数据集下载

详情请见SMS垃圾短信识别项目-VenusAI (aideeplearning.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/618479.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文了解LangChain的记忆模块(理论实战+细节)

大多数LLM应用程序都有一个会话接口。会话的一个重要组成部分是能够参考会话早期的信息(上文信息)。这种存储过去互动信息的能力就称为“记忆(Memory)”。LangChain提供了许多用于向系统添加Memory的封装。 目前 LangChain 中大多…

阿里云优惠口令最新 2024

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

并发编程之ThreadLocal使用及原理

ThreadLocal主要是为了解决线程安全性问题的 非线程安全举例 public class ThreadLocalDemo {// 非线程安全的private static final SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static Date parse(String strDate) throws ParseExc…

JavaScript(七)-高级技巧篇

文章目录 深浅拷贝浅拷贝深拷贝 异常处理thorw抛异常try/catch捕获异常debugger 处理thisthis指向改变this 性能优化防抖lodash实现防抖手写防抖函数 节流 - throttle 深浅拷贝 浅拷贝 深拷贝 深拷贝有三种方式 通过递归实现深拷贝 一定先写数组再写对象 lodash/cloneDeep …

SpringBoot+FreeMaker

目录 1.FreeMarker说明2.SpringBootFreeMarker快速搭建Pom文件application.properties文件Controller文件目录结构 3.FreeMarker数据类型3.1.布尔类型3.2.数值类型3.3.字符串类型3.4.日期类型3.5.空值类型3.6.sequence类型3.7.hash类型 4.FreeMarker指令assign自定义变量指令if…

解放双手,批量绕过403

将dirsearch扫描出来的结果复制到url.txt,如下所示 url.txt [21:18:16] 502 - 0B - /var/log/exception.log [21:18:21] 502 - 0B - /WEB-INF/jetty-env.xml [21:18:22] 502 - 0B - /WEB-INF/weblogic.xml [21:18:27] 502 - 0B - /wp-json/wp/v2/u…

【信号与系统 - 8】取样定理

1 定义 取样处理就是对连续信号的离散化处理 p ( t ) p(t) p(t) 是开关函数 f s ( t ) f ( t ) ⋅ p ( t ) f_s(t)f(t)\cdot p(t) fs​(t)f(t)⋅p(t) 当 p ( t ) p(t) p(t) 为周期矩形函数时 该取样为均匀抽样,周期为 T s T_s Ts​,则取样角频率为&…

一种驱动器的功能安全架构介绍

下图提供了驱动器实现安全功能的架构 具有如下特点: 1.通用基于总线或者非总线的架构。可以实现ethercat的FSOE,profinet的profisafe,或者伺服本体安全DIO现实安全功能。 2.基于1oo2D架构,安全等级可以达到sil3。 3.高可用性。单…

keil无法查看外设寄存器(生成SFR文件)

1.前言 自从更新了keil,用的是越来越不顺手了,一会是cannot evaluate,一会是与强制与cubemx强制联系了,这次也是的(地铁,老人,手机)折腾了一下总是搞好了(网上的解法只能…

Google最新论文: 复杂的 Prompt 如何更好的调试?

本文介绍了Sequence Salience,这是一个专为调试复杂的大模型提示而设计的系统。该系统利用广泛使用的显著性方法,支持文本分类和单标记预测,并将其扩展到可处理长文本的调试系统。现有的工具往往不足以处理长文本或复杂提示的调试需求。尽管存…

InternlM2

第一次作业 基础作业 进阶作业 1. hugging face下载 2. 部署 首先,从github上git clone仓库 https://github.com/InternLM/InternLM-XComposer.git然后里面的指引安装环境

微信小程序开发遇到的奇奇怪怪的问题

新建项目发现顶部栏标题不生效问题 开发者工具新建项目默认开启全局Skyline渲染引擎,因为Skyline不支持原生导航栏,所以就没显示原生导航栏了。 如果想用回原生导航栏,可以把app.json里面的 "renderer": "skyline", 去掉…