pyttsx-文本转语音

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

现在的年轻人很喜欢看小说,武侠小说、奇幻小说、军事小说、历史小说等等。他们通常在地铁里看、公交车上看、回家累了躺在床上看。如果边走边看可能会有危险,而在办公室看又总担心被老板发现。如果能够将文字转化为语音,或许会带来很多的方便。

pyttsx是Python的一个开源包,一个可以将文本转化为语音的引擎,支持Mac OS X、Windows、Linux等平台使用。

使用之前需要先安装pyttsx包,本文基于python2.7进行编写。

安装完毕之后,我们先来编写一个简单的例子。

运行程序后,就能够通过音箱听到“Hello World”的女性声音。

我们再稍微对语速和声音进行一下调整。

接下来,我们修改一下声音的年龄和性别

看了上面的简单例子,下面我们来演示如何朗读电脑中的文本文档吧。

是不是很简单,不过目前的功能还不支持暂停、运行时调整音量等操作,这部分内容就由感兴趣的你来慢慢完成吧。

 

API文档:http://pyttsx.readthedocs.io/en/latest/engine.html

中文参考:http://blog.csdn.net/marksinoberg/article/details/52137547

Python数据挖掘06 scikit-learn之随机森林分类器

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

随机森林分类器

上一节,我们使用了决策树的分类方式。决策树可以学到很复杂的规则,但是却容易产生过拟合问题。为了弥补决策树的不足,可以创建多棵决策树,用它们分别分类,在根据少数服从多数的原则从多个预测结果中选择最终预测结果,这就是随机森林。

加载代码和扩展数据均可以参考:Python数据挖掘05 scikit-learn之决策树分类器

使用随机森林算法进行分类

 

完整代码

 

Python数据挖掘05 scikit-learn之决策树分类器

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

决策树分类器

决策树是有监督机器学习算法,它看起来像是由一系列节点组成的流程图,其中位于上层节点的值决定下一步走向哪个节点。

这次的例子中,我们以NBA2013~2014年比赛结果进行分析,预测NBA获胜球队。

1、加载数据

加载数据是从NBA官网下载。如需要,可以与我联系。

2、扩展数据集

由于现有的数据有限,需要扩展数据的内容,便于后续的分析工作。

3、使用决策树

这里简单的按照主场球队/客场球队上一场比赛的结果作为判断胜负的依据。

 

完整代码

 

Python数据挖掘04 scikit-learn之K-近邻分类器下

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

交叉检验

Python数据挖掘03 scikit-learn之K-近邻分类器上中,数据集分为训练集和测试集,使用训练集进行训练并使用测试集进行测试。一旦测试集分配不合理,导致测试集过于简单或复杂,都会对最终的结果产生影响。

为了解决上述问题,通常采用交叉校验方式。交叉校验将整个数据集切割为多份,每一份再分为训练集和测试集。交叉训练并测试多次后将每次测试分数取平均值。

交叉检验即进行了训练,又进行了测试,最终输出测试结果。

 

优化参数

在之前的K-近邻算法中,使用了默认的参数进行训练和测试。对于K-近邻算法,影响最大的参数为n_neighbors,这个参数用来设置近邻数量,scikit-learn默认使用5个近邻进行训练学习。

K-近邻参数设置过小容易受到干扰,而设置过大又可能使近邻影响力减弱。那么如何找到最优的n_neighbors参数取值呢?我们不妨设n_neighbors取值为1~20,使用matplotlib来输出n_neighbors与准确率的曲线,看看两者之间的变化趋势。

输出为

可以发现,随着n_neighbors参数增大,准确率减小。n_neighbors的最佳取值为2。

 

完整代码

 

Python数据挖掘03 scikit-learn之K-近邻分类器上

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

scikit-learn估计器

scikit-learn作为数据挖掘及机器学习库,提供了很多的分类算法。如近邻算法、支持向量机、随机森林、神经网络等。而这部分功能称为scikit-learn估计器。它主要通过以下两个函数完成分类学习与测试工作。

fit():训练算法,接收训练集和训练结果参数

predict():测试算法,接收测试集参数

K-近邻分类器

在开始开始学习之前,请先下载测试数据以供K-近邻学习使用。

http://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/ionosphere.names

http://archive.ics.uci.edu/ml/machine-learning-databases/ionosphere/ionosphere.data

 

1、加载数据

将下载好的数据与代码放在同一目录下。

2、使用K-近邻分类器训练

这里我们使用默认的配置进行训练。

3、测试K-近邻分类器

完整代码

 

Python数据挖掘02 分类问题入门

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

什么是分类问题

从孩子出生开始,分类便始终伴随左右。男孩还是女孩、身体是否健康、是否是名牌大学毕业、是否已经结婚、有没有小孩。这些都可以归属到分类问题当中。当然,分类问题不局限于两种可能结果,还可能有多种可能结果的情况,例如这辆车是什么牌子的。类似这样的问题也都属于分类问题。

图书馆中书籍是通过书籍的内容进行分类、市场里的某种水果一般会按照个头大小、产地以及新鲜程度进行分类、路上行驶的车辆可以按照生产厂商、乘坐人数甚至颜色进行分类。

这些分类一般是根据经验来进行划分,那么计算机是否也具备分类的能力呢?

 

简单分类问题示例

下面使用鸢尾植物分类数据集来进行分类算法的学习。这个数据集包含150条植物相关数据,每条数据包含4个特征:萼片长度、萼片宽度、花瓣长度、花瓣宽度,单位均为厘米。这个数据集共有3中类别:山鸢尾、变色鸢尾、维吉尼鸢尾。

1、导入数据

这里导入的数据是连续值,数据中的行表示植物个体,数据中的列表示4种特征。在分类之前需要先将连续值离散化。

离散化:计算各特征值的平均值,特征值小于平均值取0、特征值大于平均值取1,用这部分数据组成新的数据。

离散化数据之后,需要将数据及结果拆分成两部分,其中一部分用来训练,而另一部分用于测试训练。

将数据拆分的目的是避免过拟合。

2、训练数据集

训练过程采用针对不同特征及不同特征的可能取值进行遍历。将某一特征取0最多及取1最多的分类及错误数进行汇总。这里为了尽可能的简单,只按照错误数最低来选取分类模型。

3、测试训练模型

套用模型将测试数据分类后,与结果进行比较即可得到模型对于测试数据的准确率。

 

完整代码

 

Python数据挖掘01 亲和性分析

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

什么是亲和性分析

以往去服装店买衣服,挑好自己中意的衣服后,服务员通常会热情的向你推荐一些可以和这件衣服搭配的裤子或鞋子。在试穿之后觉得还不错,或许就会把这些推荐商品也收入囊中。又或者在超市,膨化食品通常会和碳酸饮料相距都不远,而手纸和洗衣液也同样存在着相似的关系。买房者总会接到装修公司的服务电话、买车者总会接到保险公司的服务电话。

以上种种在生活中常常能够碰到。服装店里的服务人员帮你推荐搭配的裤子可以增加店铺的收入;绝大多数人喜欢一边吃着膨化食品一边喝着碳酸饮料;家庭主妇去超市买手纸时,无意中看到了洗衣液,也会想想家里的洗衣液是否快要用光;各行各业都有自己特定的服务群体。

如果细心的你能够发现生活中的这些关系的存在,并巧妙的利用它,必定会有意想不到的收获。

这些规律在客观上是存在的,那么我们通过什么样的方式来找出这些规律呢?

今天就让我们一起来学习一下亲和性分析,通过编程来寻找事物间客观存在规律。

亲和性分析概念:根据样本(物体)之间的相似度,确定他们关系的亲属。

 

亲和性分析示例

超市针对5种不同商品以及多名客户的购物清单进行采样分析,希望能够从中找出某种客观规律。

1、加载采集数据

这样就将database.txt的基础数据加载到变量X中,这里我们称变量X为样本空间。

样本空间是一个2维数组,行表示一条客户购物清单信息,列表示客户是否购买对应序号商品,0表示没有购买,1表示购买。

关于Numpy的API可以在资源分享模块下载。

 

2、实现简单规则

在商品和客户购物清单中总结客观规律,我们需要建立一种规则,根据规则的优劣来判断亲和性的好坏。

常用的判断规则优劣的方法有支持度和置信度两种。

支持度为样本空间中规律应验的次数总和。

置信度为样本空间中规则准确率,即支持度/单一样本符合条件。

首先需要定义3个字典,分别记录有效规则、无效规则的数量。

然后针对一个客户的购物清单来匹配规则。

规则比对时,需要先从某个客户购物清单中找到一件已购买的商品(consumer_analyze方法实现),然后以这个商品为基础,遍历该客户购物清单里的其他已购买清单(排除自己本身)来组成规则(rule_analyze方法实现)。

接着对所有的客户进行规则分析。

得到规则分析结果之后,就可以计算支持度和置信度了。

其中支持度就是变量rule_analyze变量。

支持度、置信度计算并输出

完整代码

 

Python基础11 标准库

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

Python提供了一套标准库,其中包含了很多基础功能类和方法。这节课让我们先来认识一下常见的标准库。

 

操作系统库OS

这个模块提供了一种简便的方式来使用操作系统相关的功能。

os库的主要功能为文件及文件系统管理、命令行管理、环境变量管理、系统进程管理、操作系统信息管理等

 

系统库sys

这个模块提供对命令行参数的访问功能。

 

正则库re

这个模块提供了一套正则表达式功能。

 

数学库math

这个模块提供了针对实数计算的功能。

 

时间库datetime

这个模块提供了操作时间及日期的功能。

 

压缩库zlib

这个模块提供了一组压缩和解压缩功能。

 

总结

这节课算是抛砖引玉,带大家简单了看了一些python的标准库。

在之后的课程中,会选择一些常用的标准库进行详细的讲解。

Python基础10 面向对象(下)

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

继承

在现实世界中,不同的类之间可能存在某种从属关系。

例如:猫和狗都属于哺乳动物,猫和狗都有2只眼睛、4个脚、1个尾巴,也能够吃饭、睡觉、发出叫声。只是猫的叫声和狗的叫声不同。

那么我们先定义一个哺乳动物类。

这里可以发现,猫和狗除cry的方法不同外,其他属性和行为都相同,那么我们利用继承的方式,就不需要重新定义这些相同的属性和方法了。

输出为

可以发现,Mammal的子类Cat和Dog都可以调用父类的方法,并获得父类的属性。

 

方法重写

刚刚我们新建了Cat类和Dog类,各自集成了Mammal类,分别拥有了哺乳动物的基本属性和行为。但是对于cry这个方法,猫和狗是不一样的。

Mammal类中cry方法体为pass,即方法为空。

我们可以使用方法重新的办法将猫和狗的cry方法进行重写,使猫和狗有各自不同的叫声。

输出为

通过方法重写,我们就使Mammal的子类猫和狗拥有了各自不同的叫声。

 

私有属性及私有方法

为了类能够被安全的调用,Python提供了一套属性、方法私有的方式,防止类中不对外公开的属性和方法被外部访问。

我们只需要在定义的变量或方法前加2条下滑线(如:__param_name、__func)即可。

启动后报错,报错信息如下

如果将第8行代码注释掉,报错信息如下

当我们将属性或方法定义为私有、通过实例对象的方式就无法直接访问了,只能在类的内部访问。

 

总结

这节课我们将面向对象的剩余部分讲解完毕,主要内容包括:

类的集成

方法的重写

私有属性和私有方法的使用

Python基础09 面向对象(上)

作者:玉树【林】风

转自:http://techlin.cn

欢迎转载,也请保留这段声明。

 

什么是面向对象

 

面向对象(Object Oriented,OO)是软件开发的一种方法。

想要了解更多关于面向对象的概念,建议百度百科

 

类定义

采用面向对象的开发方式,我们首先要对客观事物归类。

python类定义语法如下:

紧接着,我们需要将客观事物的属性和行为进行抽象。

例如:猫咪有2只眼睛、4个脚、1个尾巴、能够吃饭、睡觉、行走。其中2只眼睛、4个脚、1个尾巴属于猫的属性,而能够吃饭、睡觉、行走属于猫的行为。那么我们可以将这些属性和行为进行封装操作。

这样,我们就完成了对猫的属性和行为的封装,从而得到了一个猫类。

 

实例化

我们有了猫的类,就可以通过这个类来实例化很多的猫。

输出为

这里,我们实例化了3只猫。并且分别查看了他们的属性和行为。

查看实例的属性:实例名.属性名

调用实例的行为:实例名.方法名()

 

我们在猫类中增加一个方法,能够在实例化时可以区分猫的品种。

输出为

这里我们定义了一个__init__方法,这个方法会在类被实例化时调用。__init__方法有两个参数,分别是selfbreed。在之前定义猫类的方法中,也都有self这个参数。self参数表示类实例本身,从上面的例子中我们可以发现通过初始化方法设置的breed属性和猫类无关,只与每一个猫实例有关。并且在方法调用时不需要我们手动传入self参数,系统会自动的传入这个参数。因此在类方法的调用时,我们只要从第二个参数开始传递即可。

 

总结

今天我们学习了面向对象的相关知识。

什么是面向对象。

如何定义一个类,如何封装属性和方法。

如何实例化一个类,self参数的作用,__init__方法何时被调用。