Apache Kafka正是上节描述的MQ系统,但不仅是MQ系统,它往往也被描述为分布式提交日志系统或者分布式流式处理系统。从这节开始,我们将逐步了解Kafka的核心概念。

Topic

在Kafka中,Topic可以理解为表示一组特殊的数据流。可以将它想象为关系性数据库中的表。

  • 数据库中的表存储着同一类的数据。那么Topic同样表示同一类的数据流。
  • 数据库中的表可以根据需求创建多张。那么Topic同样可以根据需求创建多个,但有一点区别是,Topic没有像数据库表中约束(Constraints)的概念。
  • 数据库中表的名称是不能重复的,表名能唯一确定一张表。那么Topic同样是以名称确定唯一的,Topic名称不能重复。
閱讀全文 »

首先我们来认知什么是MQ系统既消息队列(Message Queue)系统。举个不恰当的例子,消息(Message)就相当于自来水,队列(Queue)就相当于自来水管道,错综复杂的管道将自来水送给千家万户。在计算机领域,消息其实就是数据,各种格式的数据,队列就是运输数据的管道,通过各种运输策略将数据送达使用它们的地方。

消息生产者(Producer)

任何MQ系统都离不开消息生产者(后文中统一使用Producer),否则MQ系统也就没有了存在的意义。好比没有了水源,自来水管道也就没有意义了一样。MQ系统中的Producer既消息(数据)生产者,主要的作用就是生成数据,然后发送给MQ系统中的队列,通常情况下,消息生产者将生产出的消息丢给MQ系统的队列后通常就不再关心消息的去向了,所以它的职责主要就是生成数据,以及数据是否成功被队列接收。然后丢进队列。每个MQ系统都有自己的消息格式,以字节数组的形式在队列中传输。

閱讀全文 »

到目前为止,我们已经学习了大概有八种机器学习的算法,其中有解决分类问题的,有解决回归问题的。这些算法其实没有谁是最好的,谁不好之说,反而应该将这些算法集合起来,发挥他们的最大价值。比如我们买东西或看电影之前,多少都会咨询身边的朋友,或去网上看看买家的评价,然后我们才会根据口碑好坏,或评价好坏决定买还是不买,看还是不看。在机器学习中,同样有这样的思路,这就是重要的集成学习。

集成学习

机器学习中的集成学习就是将选择若干算法,针对同一样本数据训练模型,然后看看结果,使用投票机制,少数服从多数,用多数算法给出的结果当作最终的决策依据,这就是集成学习的核心思路。下面我们先手动模拟一个使用集成学习解决回归问题的的示例:

閱讀全文 »

这篇笔记我们来看看决策树的另一种划分方式基尼系数和决策树中的超参数,以及决策树的缺陷。

基尼系数

在一开始我们使用Scikit Learn中提供的决策树分类器时,DecisionTreeClassifier有一个参数criterion,我们之前传入了entropy,也就是表示此时决策树使用信息熵方式。由此可知,决策树应该不止信息熵一种方式,所以这一节来看看决策树的另一种方式,基尼系数。

其实基尼系数和信息熵的思路基本是一致的,只是判定数据随机性度量的公式不一样,那么基尼系数的公式为:

$$G = 1 - \sum_{i=1}^k p_i^2$$

同样用之前的例子代入公式看一下:

$$\{\frac 1 3,\frac 1 3,\frac 1 3\}$$

将上面的数据类别占比信息代入公式后可得:

$$G = 1-(\frac 1 3)^2-(\frac 1 3)^2-(\frac 1 3)^2=0.6666$$

再换一组数据类别占比信息:

$$\{\frac 1 {10},\frac 2 {10},\frac 7 {10}\}$$

代入公式后可得:

$$G = 1-(\frac 1 {10})^2-(\frac 2 {10})^2-(\frac 7 {10})^2=0.46$$

可见基尼系数同样反应了数据不确定性的度量。这里就不再使用代码对基尼系数的方式进行模拟了,其实只需要将信息熵的公式换成基尼系数的既可。

閱讀全文 »

这篇笔记我们来看看机器学习中一个重要的非参数学习算法,决策树。

什么是决策树

上图是一个向银行申请信用卡的示例,图中的树状图展示了申请人需要在银行过几道关卡后才能成功申请到一张信用卡的流程图。在图中树状图的根节点是申请人输入的信息,叶子节点是银行作出的决策,也就相当于是对申请者输入信息作出的分类决策。从第一个根节点到最后一个叶子节点经过的根节点数量称为树状图的深度(depth)。上图示例中的树状图从第一个根节点申请人是否办理过信用卡,到最后一个发放信用卡叶子节点共经过了三个根节点,所以深度为3。那么像这样使用树状图对输入信息一步步分类的方式就称为决策树方式。

我们再来看一个问题,上图中每一个根节点的输入信息都可以用来做判断分类,但是机器学习的样本数据都是数字,那么此时如果做判断呢?我们先来使用Scikit Learn中提供的决策树直观的看一下通过决策树对样本数据的分类过程和分类结果。

閱讀全文 »