文章目录

  • 前言
  • 一、相关数据代码
  • 二、实操步骤
    • 1.分词,去除无用词
    • 2.变成特征向量
    • 3. 贝叶斯分类

前言

本系列非结构数据分析与建模是我的专业课,仅仅是作为笔记方便以后好查阅,也希望能和大家分享,总结经验,非常愿意讨论交流。本次是垃圾短信识别,是一个典型的二分类问题,针对此问题,本文使用哈希向量法以及贝叶斯来做分类预测。


一、相关数据代码

对于一些基础知识,大家可以借鉴以下博客,博主讲述的One-hot以及TF-IDF很是生动。
机器学习之基于文本内容的垃圾短信识别
相关数据和代码请参照网盘:
垃圾短息数据集和代码

二、实操步骤

语言程序:python3+spark

1.分词,去除无用词

import pandas as pd
import jieba
import re
mescon_all = pd.read_csv('whole.csv',header=None,encoding='utf8')
outfile = open('result.csv','wb')
ns = 0
ps = 0
for i in range(len(mescon_all)):mescon_single = mescon_all[2][i]me_cate = mescon_all[1][i]#什么类型outstr = ''temp = re.sub(u'[^\u4e00-\u9fa5A-Za-z]','',mescon_single)# 匹配中文字符的正则表达式ms_cut = list(jieba.cut(temp,cut_all=False))for word in ms_cut:if word != ' ':outstr += word+' '#空格if me_cate == 1:#1代表垃圾信息ns = ns+1if ns <80000:outfile.write((str(me_cate)+','+outstr).encode('utf-8')+b'\n')if me_cate == 0:ps = ps+1if ps <80000:outfile.write((str(me_cate)+','+outstr).encode('utf-8')+b'\n')outfile.close()#take some time

whole.csv显示如下:

result.csv显示如下:

2.变成特征向量

代码如下(示例):

import pandas as pd
from sklearn.feature_extraction.text import HashingVectorizer
mescon_all = pd.read_csv('result.csv',header=None,encoding='utf8')
listtodel = []
for i,line in enumerate(mescon_all[1]):if type(line)!=str:listtodel.append(i)
mescon_all = mescon_all.drop(listtodel)   outfile = open('features.txt','wb')
#特征哈希法的目标是把原始的高维特征向量压缩成较低维特征向量,且尽量不损失原始特征的表达能力。
vector = HashingVectorizer(n_features=100)
temp = vector.transform(mescon_all[1]).todense()x = [[i,j] for i,j in enumerate(mescon_all[0])]
temp = temp.tolist()
for i,line in enumerate(temp):outstr = ''for word in line:outstr += str(word+1)outstr += ' ' outfile.write((str(mescon_all[0][x[i][1]])+','+outstr).encode('utf-8')+b'\n')outfile.close()

使用hash变成的特征向量:

3. 贝叶斯分类

提示:这部分提供的是scala文件,需要spark软件处理。

import org.apache.spark.mllib.classification.NaiveBayes
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.{SparkContext,SparkConf}
object test {case class RawDataRecord(category: String, text: String)def main(args : Array[String]) {val conf = new SparkConf().setMaster("local").setAppName("Bayes")val sc = new SparkContext(conf)val data = sc.textFile("F:/data/features.txt")//读入处理好的数据,且以逗号为分隔,取出每个Label与特征向量val parsedData = data.map { line =>val parts = line.split(',')LabeledPoint(parts(0).toDouble,Vectors.dense(parts(1).split(' ').map(_.toDouble)))}//将整个80万条测试集按训练集与测试集4:1比例随机分配val splits = parsedData.randomSplit(Array(0.8,0.2))val training = splits(0)val test = splits(1)  //以贝叶斯方法训练数据,创建模型,lambda为平滑参数,可手动设置val model = NaiveBayes.train(training,lambda = 1.0)//将测试集用训练出的模型进行预测val predictionAndLabel = test.map(p => (model.predict(p.features),p.label))  //统计预测出的数据val TP = predictionAndLabel.filter(x => x._1 == 0 && x._2 == 0).count()val FP = predictionAndLabel.filter(x => x._1 == 0 && x._2 == 1).count()val FN = predictionAndLabel.filter(x => x._1 == 1 && x._2 == 0).count()val TN = predictionAndLabel.filter(x => x._1 == 1 && x._2 == 1).count()    //计算准确率 召回率 F1来评估模型val pre = 1.0*TP/(TP+FP)val recall = 1.0*TP/(TP+FN)val F1 = 2.0*pre*recall/(pre+recall)  println("TP为:"+TP)println("FP为:"+FP)println("FN为:"+FN)println("TN为:"+TN)println("准确率为:"+pre)println("召回率为:"+recall)println("F1为:"+F1)}
}

选用欠抽样,从数据集中去除一些非垃圾短信。预测准确率大约为75%,召回率大约为86%。

非结构数据分析与建模——垃圾短信数据集相关推荐

  1. 【人工智能】机器学习及与智能数据处理Python使用朴素贝叶斯算法对垃圾短信数据集进行分类

    朴素贝叶斯算法 输入:样本集合D={(x_1,y_1),(x_2,y_2) (x_m,y_m); 待预测样本x; 样本标记的所有可能取值{c_1,c_2,c_3 c_k}; 样本输入变量X的每个属性变 ...

  2. 如何利用数据挖掘平台,通过数据建模,解决垃圾短信带来的困扰

    如今,手机已经成为人们日常生活必不可少的工具之一.虽然各种社交APP层次不穷,但手机短信以其操作简单.方便快捷等诸多优点一直都是用户间沟通的基础方式.手机短信在为人们带来极大便利的同时,随之而来的诸多 ...

  3. 【数据科学项目02】:NLP应用之垃圾短信/邮件检测(端到端的项目)

    垃圾短信检测(端到端的项目) 我们都听说过一个流行词--"数据科学".我们大多数人都对"它是什么?我可以成为数据分析师或数据科学家吗?我需要什么技能?并不是很了解.例如: ...

  4. 机器学习—— SVM分类垃圾短信

    机器学习-- SVM分类算法 垃圾短信分类问题 Python语言凭借其强大的特性,其众多的外部库支持下,在机器学习和数据挖掘等领域发挥着强大的作用.本文基于python的机器学习库scikit-lea ...

  5. 垃圾短信识别python步骤详细_python数据挖掘第三篇-垃圾短信文本分类

    文本分类总体上包括8个步骤.数据探索分析->数据抽取->文本预处理->分词->去除停用词->文本向量化表示->分类器->模型评估.重要python库包括num ...

  6. 实战:垃圾短信分类检测

    上次我们讲到朴素贝叶斯分类,忘记的同学参考一文搞懂朴素贝叶斯分类,今天就通过朴素贝叶斯分来来实现一个简单的垃圾短信分类器. 数据预处理 实现这个分类器我们使用的数据集来自伦敦大学学院的机器学习数据集( ...

  7. 朴素贝叶斯预测是否为垃圾短信

    朴素贝叶斯预测是否为垃圾短信 目的 数据集 源代码 结果 目的 1.利用朴素贝叶斯分类器判断短信(数据集已给)是否为垃圾短信: 2.可参考给定的文本分类代码:不可以直接调用sklearn的方法: 数据 ...

  8. 朴素贝叶斯算法--过滤垃圾短信

    文章目录 1. 基于黑名单过滤 2. 基于规则过滤 3. 基于概率统计过滤 4. 总结 上一节我们讲到,如何用位图.布隆过滤器,来 过滤重复数据.今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信? ...

  9. python垃圾短信识别_Scikit-Learn机器学习实践:垃圾短信识别

    机器学习与垃圾短信识别 前不久,我们使用NLTK的贝叶斯分类模型垃圾对短信数据进行机器学习的垃圾短信识别. 其实除了使用NLTK,我们还可以使用Scikit-Learn这个集成了诸多机器学习算法的模块 ...

最新文章

  1. 埃森哲:2018年科技愿景
  2. SVN 图标和工具、wc.db学习
  3. (WPF) DataGrid之绑定
  4. 工科学生考研能选择计算机专业么,这8个“工科专业”考研后发展会更好,毕业生紧缺度高,前途很好!...
  5. 数据预处理-数据变换-属性构造
  6. oracle本地没装 配置,数据库--oracle安装配置(本地安装的步骤及各种问题解决方案)...
  7. JAVA基础:从一道面试题看逻辑运算符与、|与||的区别
  8. 服务器系统怎么找便签,win7系统便签在哪里?win7系统便签功能使用教程
  9. 数据特征分析方法总结
  10. 超级计算机更深的蓝,国际象棋发生革命性变化 老棋手深感力不从心
  11. 期刊检索级别简单介绍
  12. ectouch手机版去除微信登录
  13. android 小米8底部黑色高度太高,小米8评测:众多黑科技加持,能否跃身高端行列?...
  14. C#上位机与台达PLC通信,modbus TCP协议
  15. 快速申请开通公众号门店小程序-微信小程序开发-视频教程7
  16. 腾讯 IVWEB 团队:前端识别验证码思路分析
  17. 互联网医疗的千姿百态:火热、亏损、巨头亲赖
  18. Win2008安装11g报错:orandce11.dll.dbl and orancds11.dll.dbl 文件找不到
  19. java中的compareToIgnoreCase和compareTo的区别
  20. 如何分析网络舆情指数?三款舆情指数软件推荐

热门文章

  1. CES 2019上芯片巨头们的争夺焦点:光线追踪、“永远”在线PC、汽车...
  2. 哪几款车型?适合狮子座的车友?
  3. 滴滴当年重创的安全事件,也会重创货拉拉吗?
  4. 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)
  5. 关于AI输电线路在线监测多目4G摄像头低功耗解决方案
  6. 实现国标GB/T28181流媒体服务解决方案安防4G摄像头互联网直播方案EasyGBS之水库管理无线视频监控解决方案
  7. NVIDIA、CUDA、CUDNN、PyTorch安装吐血整理!!!
  8. 全球与中国汽车真皮内饰市场发展模式及前景趋势预测报告2022-2028年版
  9. 服务器可不可以选择ssd硬盘
  10. 【组织架构】中国铁路郑州局集团有限公司