幻象客 - 博客分类页面

    [准确率:98%] 改进朴素贝叶斯自动分类食品安全新闻


    in Python , 机器学习 , 神经网络及深度学习 , 程序语言 , 算法 2018-11-29

    这是本系列第二篇文章,位于源代码的 2. NB_Weights 中:

    https://github.com/Ckend/NLP_DeepLearning_CN_Tutorial

    前一篇文章中,我们学习了如何使用朴素贝叶斯自动分类食品安全新闻,准确率为97%,这一篇文章将教大家如何改进这个模型。阅读本篇文章之前,建议先阅读前一篇文章:[准确率:97%] 朴素贝叶斯自动分类食品安全新闻,否则有些概念可能无法理解。

    在那篇文章中,在训练的时候,朴素贝叶斯模型中所有词语都是相同的权重,而事实上真的如此吗?我们怎么样才可以知道哪些词语更加重要呢?这时候,数理统计就派上用场了。

    我们先对所有的食品安全新闻和非食品安全新闻使用结巴(jieba)分词, 然后统计各个词性在这分别在这两个类别中的数量,比如说名词的结果如下表(使用SPSS得到,其他词性就不一一展示了),显然食品安全新闻中名词的数量多于非食品安全新闻,这也是在人意料之中的结果,但是这并不代表着对于食品安全新闻,名词的重要性就大于其他的词性:

    改进朴素贝叶斯-1

    那么如何确定各个词性对分类的重要性呢?单纯根据频率和频数确定是比较复杂的,我们可以尝试使用我们的模型,比如说,先得到一个基准的准确值,然后尝试去除掉名词得到一个准确值,观察这两个准确值的差距,如果非常大,说明名词具有比较重要的地位。我们可以试一下:

    在所有词性权重都为1的情况下(基准)进行训练

    阅读更多...

    [准确率:97%] 朴素贝叶斯自动分类食品安全新闻


    in Python , 机器学习 , 算法 2018-11-07

    教程源代码点击阅读原文或访问:

    https://github.com/Ckend/NLP_DeepLearning_CN_Tutorial

    利用朴素贝叶斯来分类食品安全新闻(标题)这种短文本其实精确度并不高,在实际的生产中,由于食品安全和非食品安全的数量差异,我们会发现1000条新闻中可能才出现2条食品安全新闻,也就是说,即便你的模型准确率为95%,1000条新闻中依然会有许多新闻 (50条) 会被错分类,这是一个非常糟糕的结果。因此在生产环境中,如果模型准确率不能高达99%,甚至都无法使用。在我们的研究下,使用朴素贝叶斯,我们的准确率能提高到97%,使用改进的朴素贝叶斯准确率能达到98%以上,使用字符级的卷积神经网络甚至能达到99%,后续的教程我会介绍这两种方法。

    为了后续的教程,我们还是先利用最简单的朴素贝叶斯来理解“训练”这个概念。为了尽量简化教程的难度,我尽量不使用数学公式进行讲解,更多的以自然语言和Python代码进行分析。在这个教程中,你所需要的东西有:

    python 3

    jieba 分词

    numpy

    sklearn (用joiblib保存模型)

    训练

    朴素贝叶斯的训练,其实就是遍历整个训练集,算出每个词语在不同的分类下出现的概率(该词语/该分类总词数)。最后得到两个向量,这两个向量分别代表了每个词语在食品安全新闻和非食品安全新闻中出现的概率。

    for i in r...

    阅读更多...

    利用股市找到已有或潜在食品安全问题的上市企业


    in Python , 程序语言 , 算法 , 闲谈 2018-05-26

    当某个股票保持下跌的时候,你可以肯定该股票一定有什么地方不对,要么是它的市场,要么是它的公司。——利弗莫尔

    最近食品安全项目成功升到国家级,对我而言真的是个挑战,无论是朴素贝叶斯分类新闻还是数据分析其实都到了瓶颈阶段(即便过了瓶颈还有瓶盖),真的是绞尽脑汁都不知道问题出现在哪里。因此想换一个思路,结合自己最近的研究,提出了这个比较新颖的想法:利用股票市场找到已有或潜在食品安全问题的企业。

    为什么会有这个想法呢?我们知道食品安全事故发生的时间点和媒体报道的时间点之间实际上是有一个间隔的,然而相关利益人士、内部人士却能提前知道事件的发生。比如说,2012年11月19日,酒鬼酒被国家质检总局爆出塑化剂超标247%,但是在19号之前,酒鬼酒的收盘价却神奇地从2012年11月2日的55元回落到2012年11月16号的46元。然而国家质检总局的消息是在2012年11月19号才发布的。而且这样的下跌,明显违背该股票当时上涨的趋势,在10月底时,它的股价已突破周K的压力线,却很不自然地下跌了?而且还违背了许多技术指标,如1号、14号、16号,KDJ和BOLL指标明显提示上涨,在股市这种情绪化的市场中,有人却不为所动,仍然售出大量股票导致其不正常下跌。

    股市 食品安全

    2012年11月19号消息公布时紧急停牌,复牌后有三个跌停,股价暴跌48%,但我相信某些人已经成功躲开了这场股灾。

    找到已有或潜在食品安全问题

    阅读更多...

    使用决策树判断各种标准对新生加入社团的影响


    in Python , 机器学习 , 程序语言 , 算法 2017-09-23

    决策树 新生 社团 加入 标准

    倘若我们拥有许多数据,而且能够恰当地使用决策树,我相信将能创造不小的价值

    由于微信编辑器的问题,没办法上传源代码上来若您需要源代码进行参考请访问https://alltoshare.com/dt_judge/

    在尝试的过程中,您或许会发现很多问题,比如Python中文编码问题,matplotlib编码问题等等,希望在这过程中您可以妥善地利用搜索引擎解决问题

    其实决策树的应用非常广泛,尤其是在预测方面,我所介绍的不过其冰山一角。更详细的参考文献,请看维基百科https://zh.wikipedia.org/wiki/%E5%86%B3%E7%AD%96%E6%A0%91

    幻象客 二维码

    阅读更多...

    使用k近邻算法根据数据识别性别


    in 算法 2017-08-20

    使用k近邻算法利用数据来识别性别(机器学习)

    阅读更多...

    <算法>利用基本遗传算法解决函数最大值问题


    in 算法 2017-04-25

    利用基本遗传算法解答1/(|x1|+|x2|+|x3|+|x4|+1)的最大值,步骤如下:

    1. 初始化X条染色体
    2. 进行初始适应性评估,评估函数是:1/(|x1|+|x2|+|x3|+|x4|+1),标准答案是1
    3. 选出初始最优适应值
    4. 开始繁衍
    5. 求出适应值的和,以及每条染色体与总适应值的比
    6. 对染色体进行选择,淘汰最弱的染色体
    7. 对染色体进行配对交叉
    8. 染色体变异
    9. 重新评估适应值,并检测是否有更大的最优适应值,有则更新
    10. 重复2-9的步骤

    测试环境:

    遗传算法求解

    为什么使用Python:

    拥有强大的内置数学函数库,代码简洁明了。

    不需要去解决一些算法之外的事情,比如求最优染色体时的算法。

    简单实用,效率高。

    1.初始化染色体:

    遗传算法求解

    2.进行初始适应性评估,评估函数是:1/(|x1|+|x2|+|x3|+|x4|+1),标准答案是1

    遗传算法求解

    3.选出初始最优适应值

    遗传算法求解

    4.开始繁衍

    遗传算法求解

    5.求出适应值的和,以及每条染色体与总适应值的比

    遗传算法求解

    6.对染色体进行选择,淘汰最弱的染色体

    遗传算法求解

    7.对染色体进行配对交叉

    遗传算法求解

    8.染色体变异

    遗传算法求解

    9.重新评估适应值,并检测是否有更大的最优适应值,有则更新

    遗传算法求解

    10.重复2-9的步骤

    遗传算法求解

    运行结果展示:

    遗传算法求解

    从图中可以看到,并非总是能获得最优的解,主要是因为函数非常可能提前收敛(即染色体全部相同)。这需要通过调整参数使得结果变得优秀。

    我相信在这个基础上进行一些优化,答案非常可能更加趋近于1 ,有

    阅读更多...

    遗传算法及其应用范围


    in 算法 2017-04-23

    遗传算法( GA , Genetic Algorithm ): 利用自然界中的自然选择、交叉、变异求得一些函数的最优解

    阅读更多...

    [算法]震惊!竟有人这样进行偷窃(动态规划)


    in 算法 2017-04-15

    假如你是一个偷窃犯,你想要在半夜偷华狮街上的房子内的金钱,每个房子内都有一定量的金额,但是如果你偷了连续相邻的两个房子,便会惊扰警察。现在给定你N个房子,请问你要怎么偷窃才能在不惊扰警察的情况下得到最多的金钱呢?(动态规划)

    阅读更多...

    <算法>分享一个很6666的算法(逆序二进制串)


    in 算法 2017-04-10

    教你如何优雅地逆序二进制串

    阅读更多...

    <算法(LeetCode)>六种方法求数组中的绝对众数


    in 算法 2017-04-06

    众数:要求出他们之中出现次数超过N/2的元素(假定一个数组中必定会有这样的元素),你会怎么求?若你是暴力求解,时间复杂度为O(n^2),那就low啦!

    阅读更多...