Python 之朴素贝叶斯对展会数据分类

栏目: Python · 发布时间: 5年前

内容简介:读大学时期写的博文在公司实习,分别从国内国外两个网站爬取了一些展会数据,在数据处理上目前需要将其按照各个类别分类好,并提供对应展会地址的经纬度,国内数据如下:国内数据比较少,占四百多条,在类别上来看有所属行业这一列,所以比较好处理,国外数据就有些尴尬:

读大学时期写的博文

目的

在公司实习,分别从国内国外两个网站爬取了一些展会数据,在数据处理上目前需要将其按照各个类别分类好,并提供对应展会地址的经纬度,国内数据如下:

国内数据比较少,占四百多条,在类别上来看有所属行业这一列,所以比较好处理,国外数据就有些尴尬:

Python 之朴素贝叶斯对展会数据分类

国外网站展会数据将近五万多条,跟分类有关的只有 categories 这一列数据,都是一些标签词,还偏少。

现在需要将五万多条展会数据进行分类,如何解决这个问题,我觉得可以写个 朴素贝叶斯分类器

数据

朴素贝叶斯分类器是利用样本数据来进行训练的,每个样本必须含有一组特征词以及对应的分类。

数据的准备

获取的国内数据就很适合作为训练数据,可以将其处理成如下格式作为样本输入:

Python 之朴素贝叶斯对展会数据分类

训练数据主要是这两列, 所属行业 以及 展会范围 ,每一行的类别都有其对应的展会范围,将这些作为训练数据实在再好不过,我们将其称之为 训练集

那么相对应,国外待分类的展会数据便是 测试集

我们将利用训练好的分类器,将测试集一一输入,看看能否得到期望的输出结果。

可是现在有个问题,作为 训练集 的国内数据只有四百多条,实在太少,于是我只能再去那个国内展会网站将以前的展会数据尽量爬取下来,最终 训练集 达到了  39555 条,虽说数量还是不够,但是不试试最终分类器的分类结果,说不定准确率还可以呢?

分词&&提取

不积小流,无以成江海,以小见大,咱们看这样一条数据:

思考一下,这一条数据的 所属行业展会范围 有什么关系,我们将从这里得到编写分类器的出发点。

在这条数据中,展会范围的内容是具有一定的代表性的,其代表这条数据的描述很偏向建材五金这个行业。

那我么是不是可以提炼出这个描述的关键词,从而让这个关键词代表建材五金这个行业。

那么刚刚那条数据可以这样看:

以此类推,如果一条未分类数据的关键词也是这样,那是不是可以将该数据归为建材五金这个类别,是的,你可以这么干。

但有个问题,若该未分类数据的关键词只含有以上关键词的某个,比如:

这样子若分为建材五金不大对吧,我倒觉得应该分为房产家居,这个问题可以解决,就让我们的概率出场吧。

大三的时候学过概率统计,也记得一个公式名为 贝叶斯定理

Python 之朴素贝叶斯对展会数据分类

这表示计算条件概率的公式:

总结就是,我们先求出样本空间中每个分类的概率 P(category) —— 先验概率

再求出一组待分类数据的关键词在各个类别中的概率 P(keywords\category) —— 调整因子

最后 先验概率 * 调整因子 得出 后验概率 ,再经过比较,后验概率最大的,便是待分类数据最可能的类别。

我们的准备很充足了,但在写分类器之前,还是先将下面要用到的数据提前提取出来。

2.2.1.确定训练数据有多少类别

2.2.2.训练数据的关键词集合,为了方便后续计算,将其转为 id:word 的格式存为 id_word.txt

Python 之朴素贝叶斯对展会数据分类

2.2.3.计算出每个关键词在每个不同类别出现的概率,将其转为 category=id:pro(id) 的格式存为 tf_id_word.txt

Python 之朴素贝叶斯对展会数据分类

2.2.4.求出样本空间中每个分类的概率 P(category) —— 先验概率 ,将其转为 category:pro(category) 的格式存为 type_pro.txt

Python 之朴素贝叶斯对展会数据分类

编码

经过前面的步骤,现在编写代码实在简单,不过有两点要注意。

其一是关键词并不是在每个类别都会出现,这样会导致P(keyword\category) = 0,进而导致整个后验概率为0,为了解决这个问题,可以引入拉普拉斯平滑,这样便确保不会出现为0的情况,具体代码中有介绍。

其二是若每个调整因子的数值都很小,大家都知道很小的值相乘,会导致结果变得更小,这样子表现出各个分类结果的后验概率便会出现问题,这个问题便是下溢出问题,解决办法便是将其转化为对数,对数相乘便是对数相加,这样便很巧妙的解决了这个问题。

好了,直接上代码,让我们看看分类的结果吧。

初步写好分类器,其实这才是任务的开始,分类器的最重要的是第二部分的数据提取,接下来需要通过不断地训练,让数据变得更加优雅美丽,从而让分类器的结果趋于完美,本人苦逼地调了一个星期,现在也就勉强能用。

让我们看看分类器的分类效果:

Python 之朴素贝叶斯对展会数据分类

可以看到分类器给出的参考分类很有代表性,这一段就此结束,若有错误,敬请指出,谢谢。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

文明之光

文明之光

吴军 / 人民邮电出版社 / 2014-12 / 177元

吴军博士从对人类文明产生了重大影响却在过去被忽略的历史故事里,选择了有意思的几十个片段特写,以人文和科技、经济结合的视角,有机地展现了一幅人类文明发展的宏大画卷。 《文明之光》系列大致按照从地球诞生到近现代的顺序讲述了人类文明进程的各个阶段,每个章节相对独立,全景式地展现了人类文明发展历程中的多样性。《文明之光》系列首册讲述从人类文明开始到近代大航海这一历史阶段,共八个专题。第二册讲述了从近......一起来看看 《文明之光》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试