Machine Learning | Learn for Master - Part 2
  • Good Articles to learn how to implement a neural network 2

    Vectorization

    This part will cover:

    The previous tutorial described a very simple neural network with only one input, one hidden neuron and one output. This tutorial will describe a neural network that takes 2-dimensional input samples, projects them onto a 3-dimensional hidden layer, and classifies them with a 2-dimensional softmax output classfier, this softmax function is explained in intermezzo 2 . While we didn’t add the bias parameters to the previous 2 models, we will add them to this model.

    [Read More...]
  • Paper Collection of Real-Time Bidding

    Paper Collection of Real-Time Bidding

    This is a collection of research and review papers of real-time bidding (RTB) based display advertising techniques. The sharing principle of these references here is for research. If any authors do not want their paper to be listed here, please feel free to contact me to remove it.

    Books/Monographs

    Tutorials

    [Read More...]
  • Learn TensorFlow By Examples

    Machine Learning

    Deep Learning & Neural Networks

    Tensor flow examples:

    TensorFlow Examples

    TensorFlow Tutorial with popular machine learning algorithms implementation.

    [Read More...]
  • 过拟合(overfitting)

    1,什么是过拟合(overfitting)
    简单的说就是这样一种学习现象:Ein 很小,Eout 却很大。
    而Ein 和 Eout 都很大的情况叫做 underfitting。
    这是机器学习中两种常见的问题。

     

    上图中,竖直的虚线左侧是”underfitting”, 左侧是”overfitting”。

    发生overfitting 的主要原因是:(1)使用过于复杂的模型(dvc 很大);(2)数据噪音;(3)有限的训练数据。

    2,噪音与数据规模
    我们可以理解地简单些:有噪音时,更复杂的模型会尽量去覆盖噪音点,即对数据过拟合!
    这样,即使训练误差Ein 很小(接近于零),由于没有描绘真实的数据趋势,Eout 反而会更大。
    即噪音严重误导了我们的假设。

    还有一种情况,如果数据是由我们不知道的某个非常非常复杂的模型产生的,实际上有限的数据很难去“代表”这个复杂模型曲线。我们采用不恰当的假设去尽量拟合这些数据,效果一样会很差,因为部分数据对于我们不恰当的复杂假设就像是“噪音”,误导我们进行过拟合。
    如下面的例子,假设数据是由50次幂的曲线产生的(下图右边),与其通过10次幂的假设曲线去拟合它们,还不如采用简单的2次幂曲线来描绘它的趋势。

     

    3,随机噪音与确定性噪音 (Deterministic Noise)
    之前说的噪音一般指随机噪音(stochastic noise),服从高斯分布;还有另一种“噪音”,就是前面提到的由未知的复杂函数f(X) 产生的数据,对于我们的假设也是噪音,这种是确定性噪音。

     

    上图是关于2次曲线和10次曲线对数据的拟合情况,我们将overfit measure 表示为Eout(g10) – Eout(g2)。

    下图左右两边分别表示了随机噪音和确定性噪音对于Overfitting 的影响。

     

    可见,数据规模一定时,随机噪音越大,或者确定性噪音越大(即目标函数越复杂),越容易发生overfitting。总之,容易导致overfitting 的因素是:数据过少;随机噪音过多;确定性噪音过多;假设过于复杂(excessive power)。

    如果我们的假设空间不包含真正的目标函数f(X)(未知的),那么无论如何H 无法描述f(X) 的全部特征。这时就会发生确定性噪音。它与随机噪音是不同的。
    我们可以类比的理解它:在计算机中随机数实际上是“伪随机数”,是通过某个复杂的伪随机数算法产生的,因为它对于一般的程序都是杂乱无章的,我们可以把伪随机数当做随机数来使用。确定性噪音的哲学思想与之类似。:-)

    4,解决过拟合问题
    对应导致过拟合发生的几种条件,我们可以想办法来避免过拟合。
    (1) 假设过于复杂(excessive dvc) => start from simple model
    (2) 随机噪音 => 数据清洗
    (3) 数据规模太小 => 收集更多数据,或根据某种规律“伪造”更多数据
    正规化(regularization) 也是限制模型复杂度的,在下一讲介绍。

    4.1 数据清洗(data ckeaning/Pruning)
    将错误的label 纠正或者删除错误的数据。

    4.2 Data Hinting: “伪造”更多数据,

    [Read More...]
  • Good resources to learn TensorFlow

    Here are some good resources to learn tensorflow.
    Tutorials

    [Read More...]
  • Machine Learning Libraries in Python

    Here are some popular machine learning libraries in Python

    Computer Vision

    • Scikit-Image – A collection of algorithms for image processing in Python.
    • SimpleCV – An open source computer vision framework that gives access to several high-powered computer vision libraries, such as OpenCV. Written on Python and runs on Mac, Windows, and Ubuntu Linux.
    • Vigranumpy – Python bindings for the VIGRA C++ computer vision library.
    • OpenFace
    [Read More...]
  • Machine Learning Libraries in Java

    Natural Language Processing

    • Cortical.io – Retina: an API performing complex NLP operations (disambiguation, classification, streaming text filtering, etc…) as quickly and intuitively as the brain.
    • CoreNLP – Stanford CoreNLP provides a set of natural language analysis tools which can take raw English language text input and give the base forms of words
    • Stanford Parser – A natural language parser is a program that works out the grammatical structure of sentences
    • Stanford POS Tagger – A Part-Of-Speech Tagger (POS Tagger
    • Stanford Name Entity Recognizer
    [Read More...]
  • GBDT good articles

    GBDT:梯度提升决策树
    From: http://www.jianshu.com/p/005a4e6ac775

    综述

      GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力较强的算法。
      GBDT中的树是回归树(不是分类树),GBDT用来做回归预测,调整后也可以用于分类。
      GBDT的思想使其具有天然优势可以发现多种有区分性的特征以及特征组合。业界中,Facebook使用其来自动发现有效的特征、特征组合,来作为LR模型中的特征,以提高 CTR预估(Click-Through Rate Prediction)的准确性(详见参考文献5、6);GBDT在淘宝的搜索及预测业务上也发挥了重要作用(详见参考文献7)。

    一、Regression Decision Tree:回归树

      回归树总体流程类似于分类树,区别在于,回归树的每一个节点都会得一个预测值,以年龄为例,该预测值等于属于这个节点的所有人年龄的平均值。分枝时穷举每一个feature的每个阈值找最好的分割点,但衡量最好的标准不再是最大熵,而是最小化平方误差。也就是被预测出错的人数越多,错的越离谱,平方误差就越大,通过最小化平方误差能够找到最可靠的分枝依据。分枝直到每个叶子节点上人的年龄都唯一或者达到预设的终止条件(如叶子个数上限),若最终叶子节点上人的年龄不唯一,则以该节点上所有人的平均年龄做为该叶子节点的预测年龄。(引用自一篇博客,详见参考文献3)


    回归树示例

      回归树算法如下图(截图来自《统计学习方法》5.5.1 CART生成):


    回归树生成算法

    二、Boosting Decision Tree:提升树算法

      提升树是迭代多棵回归树来共同决策。当采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到一个当前的残差回归树,残差的意义如公式:残差 = 真实值 – 预测值 。提升树即是整个迭代过程生成的回归树的累加。
      举个例子,参考自一篇博客(参考文献 4),该博客举出的例子较直观地展现出多棵决策树线性求和过程以及残差的意义。
      训练一个提升树模型来预测年龄:
      训练集是4个人,A,B,C,D年龄分别是14,16,24,26。样本中有购物金额、上网时长、经常到百度知道提问等特征。提升树的过程如下:


    提升树示例

      该例子很直观的能看到,预测值等于所有树值得累加,如A的预测值 = 树1左节点 值 15 + 树2左节点 -1 = 14。
      因此,给定当前模型 fm-1(x),只需要简单的拟合当前模型的残差。现将回归问题的提升树算法叙述如下:


    提升树算法

    三、Gradient Boosting Decision Tree:梯度提升决策树

      提升树利用加法模型和前向分步算法实现学习的优化过程。当损失函数时平方损失和指数损失函数时,每一步的优化很简单,如平方损失函数学习残差回归树。


    损失函数列表

      但对于一般的损失函数,往往每一步优化没那么容易,如上图中的绝对值损失函数和Huber损失函数。针对这一问题,Freidman提出了梯度提升算法:利用最速下降的近似方法,即利用损失函数的负梯度在当前模型的值,作为回归问题中提升树算法的残差的近似值,拟合一个回归树。(注:鄙人私以为,与其说负梯度作为残差的近似值,不如说残差是负梯度的一种特例)算法如下(截图来自《The Elements of Statistical Learning》):


    梯度提升决策树算法

    算法步骤解释:

    • 1、初始化,估计使损失函数极小化的常数值,它是只有一个根节点的树,即ganma是一个常数值。
    • 2、
      (a)计算损失函数的负梯度在当前模型的值,将它作为残差的估计
      (b)估计回归树叶节点区域,以拟合残差的近似值
      (c)利用线性搜索估计叶节点区域的值,使损失函数极小化
      (d)更新回归树
    • 3、得到输出的最终模型 f(x)

    四、重要参数的意义及设置

      推荐GBDT树的深度:6;(横向比较:DecisionTree/RandomForest需要把树的深度调到15或更高)
      以下摘自知乎上的一个问答(详见参考文献8),问题和回复都很好的阐述了这个参数设置的数学原理。
      【问】xgboost/gbdt在调参时为什么树的深度很少就能达到很高的精度?
      用xgboost/gbdt在在调参的时候把树的最大深度调成6就有很高的精度了。但是用DecisionTree/RandomForest的时候需要把树的深度调到15或更高。用RandomForest所需要的树的深度和DecisionTree一样我能理解,因为它是用bagging的方法把DecisionTree组合在一起,相当于做了多次DecisionTree一样。但是xgboost/gbdt仅仅用梯度上升法就能用6个节点的深度达到很高的预测精度,使我惊讶到怀疑它是黑科技了。请问下xgboost/gbdt是怎么做到的?它的节点和一般的DecisionTree不同吗?
      【答】
      这是一个非常好的问题,题主对各算法的学习非常细致透彻,问的问题也关系到这两个算法的本质。这个问题其实并不是一个很简单的问题,我尝试用我浅薄的机器学习知识对这个问题进行回答。
      一句话的解释,来自周志华老师的机器学习教科书( 机器学习-周志华):Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
      随机森林(random forest)和GBDT都是属于集成学习(ensemble learning)的范畴。集成学习下有两个重要的策略Bagging和Boosting。
      Bagging算法是这样做的:每个分类器都随机从原样本中做有放回的采样,然后分别在这些采样后的样本上训练分类器,然后再把这些分类器组合起来。简单的多数投票一般就可以。其代表算法是随机森林。Boosting的意思是这样,他通过迭代地训练一系列的分类器,每个分类器采用的样本分布都和上一轮的学习结果有关。其代表算法是AdaBoost,

    [Read More...]
  • A Neural Network in 11 lines of Python

    from:http://iamtrask.github.io/2015/07/12/basic-python-network/

    Summary: I learn best with toy code that I can play with. This tutorial teaches backpropagation via a very simple toy example, a short python implementation.

    Edit: Some folks have asked about a followup article, and I’m planning to write one. I’ll tweet it out when it’s complete at @iamtrask. Feel free to follow if you’d be interested in reading it and thanks for all the feedback!

    Just Give Me The Code:

    view sourceprint?

    01.X = np.array([ [0,0,1],[0,1,1],[1,0,1],[1,1,1] ])
    02.y = np.array([[0,1,1,0]]).T
    03.syn0 = 2*np.random.random((3,4)) – 1
    04.syn1 = 2*np.random.random((4,1)) – 1
    05.for j in xrange(60000):
    06.l1 = 1/(1+np.exp(-(np.dot(X,syn0))))
    07.l2 = 1/(1+np.exp(-(np.dot(l1,syn1))))
    08.l2_delta = (y – l2)*(l2*(1-l2))
    09.l1_delta = l2_delta.dot(syn1.T) * (l1 * (1-l1))
    10.syn1 += l1.T.dot(l2_delta)
    11.syn0 += X.T.dot(l1_delta)

    However,

    [Read More...]
  • Calculus on Computational Graphs: Backpropagation

    Calculus on Computational Graphs: Backpropagation

    http://colah.github.io/posts/2015-08-Backprop/

    Introduction

    Backpropagation is the key algorithm that makes training deep models computationally tractable. For modern neural networks, it can make training with gradient descent as much as ten million times faster, relative to a naive implementation. That’s the difference between a model taking a week to train and taking 200,000 years.

    Beyond its use in deep learning, backpropagation is a powerful computational tool in many other areas, ranging from weather forecasting to analyzing numerical stability – it just goes by different names. In fact, the algorithm has been reinvented at least dozens of times in different fields (see Griewank (2010)).

    [Read More...]
Page 2 of 41234