出于学习的目的,笔者决定将逻辑回归总结一次。本文主要介绍逻辑回归的推导,囊括Sigmoid函数、极大似然估计、损失函数以、梯度下降以及正则化。文章内容纯属总结性知识,并不是对LR进行大篇长论。如有理解不到位的地方,还请读者指出。

Read More »

关于Adaboost,在先前的一篇文章里,也介绍过它的步骤与实现,但理论上的推导未曾涉及。虽然Adaboost算法思想通俗易懂,但权值更新公式的由来,想必并非人人皆知。本文着重于从理论层面进一步阐述Adaboost,最终推导出迭代时的样本权值更新公式。

Read More »

实习结束一个星期有余了,也来说道说道吧。此次去奇虎360实习,不仅认识了许多牛人,同时也算是见识到了工业界与学术界的不同,更是游览了北京的不少景点,可以说是不虚此行吧。整个实习历时115天,于我而言,这是人生的第一次,或许也会是最后一次。我不敢奢求什么,只希望通过这篇随性而写的不长不短的Summary,给此次实习画上一个圆满的句号,或许以后回头看到这篇文章的时候,还可以勉强回忆下实习中的点点滴滴。

Read More »

在计算学习理论里面,有一个比较重要的概念,那就是VC维(Vapnic-Chervonenkis Dimension)。它解释了机器学习算法为什么可以去学习,数据又为什么可以被学习。在机器学习领域,VC维可以说是一个非常基础的定量化概念,可用来刻画分类系统的性能,也因此给诸多机器学习方法的可学习性提供了坚实的理论基础。网上有许多讲解VC维的博文,自己在学习VC维的时候也搜到很多,数量多的同时质量难免也良莠不齐。所以在这里,强烈推荐一下pluskid写的关于VC theory 的系列文章,总结的确实非常深入。

Read More »

在机器学习领域,概率分布对于数据的认识有着非常重要的作用。不管是有效数据还是噪声数据,如果知道了数据的分布,那么在数据建模过程中会得到很大的启示。本文总结了几种常见的概率分布,比如离散型随机变量的分布代表伯努利分布以及连续型随机变量的分布代表高斯分布。对于每种分布,不仅给出它的概率密度函数,还会对其期望和方差等几个主要的统计量进行分析。目前文章的内容还比较简洁,后续再不断进行完善。

Read More »

传统的正排索引指的是doc->word的映射,然而在实际工作中,仅仅只有正排索引是远远不够的,比如我想知道某个word出现在那些doc当中,就需要遍历所有的doc,这在实时性要求比较严的系统中是不能接受的。因此,就出现了倒排索引(inverted index ),详细内容参见Wikipedia-Inverted index。本文主要讲解的是如何使用Scala编写Spark程序来实现倒排索引。

Read More »

最近看到一篇关于Spark架构的博文,作者是 Alexey Grishchenko。看过Alexey博文的同学应该都知道,他对Spark理解地非常深入,读完他的 “spark-architecture” 这篇博文,有种醍醐灌顶的感觉,从JVM内存分配到Spark集群的资源管理,步步深入,感触颇多。因此,在周末的业余时间里,将此文的核心内容译成中文,并在这里与大家分享。如在翻译过程中有文字上的表达纰漏,还请大家指出。

Read More »

本文篇幅较短,内容源于自己在使用SparkSQL时碰到的一个小问题,因为在之后的数据处理过程中多次使用,所以为了加深印象,在此单独成文,以便回顾。至于文章中使用的方法,或许不是最好的,如果你有更好的方法,还请分享一下。

Read More »

此文是一篇译文,是本人于今年四月应CSDN编辑之邀翻译的一篇文章,原文发表于今年三月 [Escaping from Saddle Points](共两篇),此文是第一篇文章的译文,第二篇文章尚未翻译,如有需要请点击原文 Saddles Again。文章讲述了各式各样的 critical points 以及使用何种方法来来避开 saddle point(鞍点),个人觉得比较实用,属于纯理论知识,因此重新整理了一番,受益匪浅。详细内容请看正文。

Read More »

最近在处理数据时,需要将原始数据与Redis的数据进行join,在读取Redis的过程中,碰到了一些问题,顺便做个笔记,希望对其他同学也有所帮助。实验过程中,当数据量还是十万级别的时候,逐个读取Redis并无压力;但当数据量达到千万级别时,问题就油然而生了,即使是使用Spark的mapPartitions也无法解决。因此,就考虑使用Redis的pipeline了(如果你有更好的方法,还请不吝赐教)。PS:本文主要针对的是Scala语言,因为目前在网上还没有看到Scala版本的Redis pipeline,希望此文能给初学者提供一个参考。

Read More »

在做数据分析时,往往会碰到很多K-V结构,而处理K-V这种Pair型的数据结构是非常常见的事。譬如对Pair数据按照key进行分组、聚合,或是根据key对value进行fold运算等。本文讲解的就是spark的combineByKey算子。下面首先会对combineByKey的各个参数进行简单的介绍,然后通过一个实例来加深对它的理解。

Read More »

算法性能的好坏跟数据是密不可分的,因此找到一组更具代表性的特征子集显得更加重要。在实际项目中,因为有的特征对模型而言是冗余的,它对算法的性能会产生负面影响,此时就需要做特征选择。特征选择的目的就是从一组特征集合中去除冗余或不相关的特征从而达到降维的目的。说到降维,它不仅包括特征选择,还包括了特征提取,而本文主要介绍两种常用的特征选择方法。

Read More »

以前在使用python的时候,都是使用root用户安装好的全局python,现在,因为root用户安装的Python版本太低,同时自己没有root权限去对全局Python升级,所以要在非root用户下安装自己指定的Python。因此,就重新整理了一份如何在Linux环境下使用非root用户安装python及其相关的库,以备不时之需。

Read More »

损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可以表示成如下式子:

$$\theta^* = \arg \min_\theta \frac{1}{N}{}\sum_{i=1}^{N} L(y_i, f(x_i; \theta)) + \lambda\ \Phi(\theta)$$

Read More »