标签归档:Python 实战教程

Python实用宝典7月精选实战教程

点击标题或者图片,均可直达文章。

1.Brython!极具意义的Python前端开发工具

没错,Python也能用来开发前端了,真的是无所不能。

使用Brython,你甚至不需要下载Python就能用Python写前端,非常方便。

2.国外牛人整理的Matplotlib超强使用指南与笔记

使用Matplotlib,没有搜索引擎就走不动路。

主要是因为Matplotlib的内容实在是太多了,只有经验丰富的人才能熟练掌握它。

国外有位开发者针对这种情况,写了五章使用指南,供君参考~

3.用Python实战制作一张极具意义的人生进度图

我觉得人生进度图还是很有必要绘制的。

你能根据人生进度图,从大局上规划未来和思考过去。

某些让你现在觉得很难过的经历,放到整个人生进度中,也不过影响你一两个小格子而已。

所以,通过人生进度图回顾过去,能让你更好地迈向未来。

4.Python 获取股票数据并存入MongoDB实战教程

我个人其实非常喜欢MongoDB,尤其是那些不需要事务和关系型的应用场景,MongoDB用起来会比MySQL舒服。

总的来说,MongoDB是一个绝对值得你学习的非关系型数据库。

5.Python 一个漂亮的音乐节奏可视化方案

通过可视化音乐节奏来学习音频处理的各种技巧。

6.Python celery异步快速下载股票数据

Python Celery 是一个非常重要的分布式异步任务队列,可以说是Python后台开发必不可少的组件。

如果你想用Python开发更高效的功能和模块,请学习Celery.

7.Python 三行代码检测爬虫

如果你有自己的网站,这篇文章是值得参考的,因为它提供了一个反爬虫的思路。

如果你没有自己的网站,这篇文章也是值得阅读的,因为它提供了一个反反爬虫的思路。

拒绝套娃。

8.编程利器!有道词典命令行快速翻译

每次编程遇到不会翻译的变量时,打开有道词典—等待响应—输入相关词汇,这一套流程起码得消耗30秒。

现在有了这个工具,你只需要在命令行输入一行命令,就能得到有道翻译的结果,效率极高,推荐使用!


7月份的这8篇原创文章大家觉得如何呢?欢迎在下方留言建议。​

如果你觉得有收获的话,点个赞、点个在看对于我而言都是一种莫大的支持,谢谢!

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注Python实用宝典。

有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。


​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

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

模型成品在极致安食网:https://jizhianshi.com, 木有太多时间维护。

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

https://github.com/Ckend/NLP_DeepLearning_CN_Tutorial

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

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

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

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

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

如果说,名词权重为0呢?

不过,没有对比是没有意义的,我们尝试令形容词权重为0,看看怎么样:

可以看到几乎没有影响,也就是说,对于我们的分类器而言,名词的重要性远远大于形容词。这样,我们可以尝试增加名词的权重,看看效果怎么样:

准确率 0.98,效果显著,不过我们很难确定最佳的权重,只能通过(玄学)调参来找到最合适的权重,你也可以尝试用神经网络来确定权重,虽然容易过拟合,但也是一种方法。不过既然用上了神经网络,就有更优秀的模型可以使用了,我们下次再介绍吧。

接下来讲一下这个权重的实现原理(要是不耐烦,可以直接看文章首行的源代码):基于前一篇文章,我们修改jieba_cut_and_save_file这个函数,这个函数在训练的时候用到了,它修改的就是训练时每个新闻被向量化而成的值,如下所示:

将该函数改成这样:

def jieba_cut_and_save_file(inputList, n_weight, a_weight, output_cleaned_file=False):

   """
   1. 读取中文文件并分词句子
   2. 可以将分词后的结果保存到文件
   """

    output_file = os.path.join('./data/', 'cleaned_' + 'trainMatrix.txt')
    lines = []
    tags = []

    for line in inputList:
        result = pseg.cut(clean_str(line))
        a = []
        b = []
        for word, flag in result:
            # 对分词后的新闻
            if word != ' ':
                # 若非空
                a.append(word)
                if flag.find('n')==0:
                    # 若是名词
                    b.append(n_weight)

                elif flag.find('a')==0:
                    # 若形容词
                    b.append(a_weight)
                else:
                    b.append(1)

        lines.append(a)
        tags.append(b)

    if output_cleaned_file:
        with open(output_file, 'w') as f:
            for line in lines:
                f.write(" ".join(line) + '\n')

    vocabulary = createVocabList(lines)

    # 根据词典生成词向量化器,并进行词向量化
    setOfWords2Vec = setOfWords2VecFactory(vocabulary)
    vectorized = []
    for i,news in enumerate(lines):
        vector = setOfWords2Vec(news, tags[i])
        vectorized.append(vector)

    return vectorized, vocabulary

最后,在主函数调用的时候传入你想需要的参数即可,你可以按照代码,修改任意词性权重,不过要注意结巴的词性表(每种词性的字母),你可以搜索“ictclas 词性表”得到。

import bayes
from data_helpers import *
from sklearn.externals import joblib


posFile = "./data/train_food.txt"
negFile = "./data/train_notfood.txt"



print("正在获取训练矩阵及其分类向量")
trainList,classVec = loadTrainDataset(posFile,negFile)

print("正在将训练矩阵分词,并生成词表")
n_weight = 3
# 名词权重
a_weight = 1
# 形容词权重

vectorized, vocabulary = jieba_cut_and_save_file(trainList, n_weight, a_weight, True)
bayes_ = bayes.oldNB(vocabulary)

# 初始化模型
print("正在训练模型")
bayes_.train(vectorized, classVec)

# 训练
print("保存模型")

joblib.dump(bayes_, "./arguments/train_model.m")

最后总结一下,我们通过修改训练集新闻中不同词性的权重,加大名词权重,从而提高朴素贝叶斯模型的准确率到98%,不过,这个仅仅是在食品安全新闻这个例子中是这样,你如果想要应用到自己的程序上,应该先找到你的关键词性。下一篇文章我们将尝试一些新的模型元素。如果你喜欢的话,请继续关注幻象客。