Fork me on GitHub

Other articles

  1. Function Programming in Python: 1. (Avoiding) Flow Control

    0. whatever


    “Function Programming in Python” Chapter 1:避免流控制

    在传统的imperative式编程中,一段代码通常包括一些循环(whilefor)、变量的声明和数据的修改(dict,list,set等)、分支语句(if/elif/else/, try/except/finally)。所有这些看起来都很自然,很好理解。这些状态变量和可修改的数据结构通常从现实世界中抽象而来,但是它们会带来一些副作用,随意给定程序的一个断点,我们很难靠人脑快速精确地推断出这些数据里面的值,所以我们经常需要依靠编译器的帮助来查看这些数据里面的值是不是我们想要的那样。

    一个解决方案是使我们的代码专注于描述数据是什么(what),而不是如何构建数据(how).

    1. Encapsulation (封装)


    最先想到的专注于“what”而不是“how”的方法就是:重构代码,把数据构建的操作放在一个独立的地方。考虑改写如下代码:

    # configure the data ...
    read more
  2. 机器学习算法之K近邻(k nearest neighbors)

    1. K近邻算法

    什么是K近邻算法?简单的说就是:给定所有训练数据和一组测试数据之后,在训练数据中寻找离这组测试数据最近的K组邻居,根据这K组邻居的label来做voting/average,从而预测出测试数据的label。

    knn-sample

    如上图所示,绿色圆圈是测试数据,其余为训练数据。假设K == 3,即寻找离测试数据最近的三个邻居,如图中黑色实线圆中的三个邻居(两个红色三角形,一个蓝色正方形)。在这三个邻居中,少数服从多数,所以测试数据就被分类为红色三角形。假设K == 5,那虚线圆中的5个邻居就是离测试数据最近的5个邻居,里面有三个蓝色正方形和2个红色三角形,所以少数服从多数,测试数据被分类为蓝色正方形。

    2. 距离度量

    那么如何找到最近的K个邻居呢?换句话说,如何度量样本之间的距离?

    最常用的距离度量方式自然是欧式距离,类似的还有马氏距离。本质上来说,寻找最近的邻居无非就是寻找最相似的邻居,所以余弦相似度这类相似度度量方式也完全可以在此处使用。

    3. Search algorithms

    接下来介绍查找最近K个邻居的算法:Brute Force, K-D ...

    read more
  3. 机器学习算法之决策树(decision tree)

    modeling

    先简单地举一个例子,看看什么是决策树。以下是一棵分类树,决定下班后是否要观看机器学习公开课。

    DT

    我们可以看到从根节点开始往下会有分支,最终会走向叶子节点,得到分类结果。每一个非叶子节点都是一个特征,上图中共有三维特征。决策树是所有机器算法中与人脑处理问题方式最接近的算法,所以很好理解。一棵决策树可以被抽象成以下数学公式:

    DTmodel

    T是路径总数/叶子节点总数(上图中有6个叶子节点),g_t(x)base hypothesis,上图中是常量Y/Nq_t(x)可以理解成g_t(x)的权重,取值为1或0:

    is x on path t ? 1 : 0;
    

    我们也可以用递归的视角来看决策树:

    recursiveDTmodel

    G_c(x)是当前节点的子树:

    tree = (root, sub-trees)
    

    构建一棵决策树

    按照以下伪代码我们可以递归式地构建一棵决策树:

    function DecisionTree ...
    read more
  4. 机器学习算法之随机森林(Random Forest)

    机器学习算法之随机森林(Random Forest)

    转载请注明出处:BackNode

    随机森林作为两大ensemble methods之一,近年来非常火热,本文试图探讨一下其背后原理,欢迎指正!

    Bagging

    Bagging方法是ensemble methods中获得用于训练base estimator的数据的重要一环。 正如其名,Bagging方法就是将所有training data放进一个黑色的bag中,黑色意味着我们看不到里面的数据的详细情况,只知道里面有我们的数据集。然后从这个bag中随机抽一部分数据出来用于训练一个base estimator。抽到的数据用完之后我们有两种选择,放回或不放回。

    既然样本本身可以bagging,那么feature是不是也可以bagging呢?当然可以!bagging完数据本身之后我们可以再bagging features,即从所有特征维度里面随机选取部分特征用于训练 ...

    read more
  5. 离散优化之Knapsack问题(二):relaxation, branch and bound

    knapsack问题之relaxation, branch and bound

    转载请注明出处:BackNode 我们接着上回(传送门:动态规划)继续分析knapsack问题。

    问题描述

    你有一个负重量为capacity的背包,摆在你面前的是一堆宝物,宝物有重量weight和价值value,你要在你的背包中装下宝物将它们占为己有,因此你希望背包中的宝物负重量不超过capacity,同时背包中的宝物的价值value尽可能的大。 输入:

    4 11 
    8 4
    10 5
    15 8
    4 3
    

    第一行4 11表示宝物数量item_count为4,背包负重量capacity为11 接下来为item_count行,每行第一个元素是该宝物的价值value ...

    read more
  6. 离散优化之Knapsack问题(一):动态规划

    knapsack问题之动态规划

    问题描述

    你有一个负重量为capacity的背包,摆在你面前的是一堆宝物,宝物有重量weight和价值value,你要在你的背包中装下宝物将它们占为己有,因此你希望背包中的宝物负重量不超过capacity,同时背包中的宝物的价值value尽可能的大。 输入:

    4 11 
    8 4
    10 5
    15 8
    4 3
    

    第一行4 11表示宝物数量item_count为4,背包负重量capacity为11 接下来为item_count行,每行第一个元素是该宝物的价值value,第二个元素是该宝物的重量weight

    问题建模

    数学模型

    x[i]=1表示选中宝物i,x ...

    read more
  7. python学习--locals globals

    python学习--locals globals

    locals() and globals()

    locals()globals()是python的两个内置函数,它们提供了基于dictionary的访问局部和全局变量的方式。 locals()返回一个名字/值对的dictionary。这个dictionary的键字是字符串形式的变量名字,diction的值是变量的实际值。

    In [12]: def func(arg):
        ...:     num = 90
        ...:     print locals()
        ...:     print locals()['arg']
        ...:     
    
    In [13]: func('hello')
    {'num': 90, 'arg': 'hello'}
    hello
    

    globals()函数则返回包含全局变量的dictionary,在下例中,operation()函数根据oper变量的值自动调用相应的全局函数:

    In [3]: def plus(a,b):
       ...:     return ...
    read more
  8. python学习--itertools模块

    python学习:itertools

    itertools模块包含一系列迭代数据集的函数,如下三个表格:

    iterators

    下面挑常用的举例学习一下:

    itertools.count(start=0,step=1)和itertools.izip(*iterables)

    count()函数生成从start(default=0)开始的以step(default=1)为步长的连续整数, izip()函数将多个迭代器中的元素合并为一个元组并作为一个迭代器返回,类似于zip()函数 使用:

    In [1]: from itertools import *
    
    In [2]: for i in izip(count(7,2),['a','b','c']):
       ...:     print i 
       ...:     
    (7, 'a')
    (9, 'b ...
    read more
  9. 机器学习笔记--主成分分析(PCA)与奇异值分解

    特征值分解与奇异值分解

    svd-1

    svd-2

    PCA

    PCA的作用主要是分析数据主成分,降低数据维度,方便计算。数据降到1、2、3维之后还可以可视化。在对数据执行PCA处理之前要对数据进行预处理,使每个特征维度上的数据具有相同均值并归一化到同一范围内。

    #feature scaling
    scaler = StandardScaler()
    train_norm = scaler.fit_transform(train_data[0::,1::])
    test_norm = scaler.fit_transform(test_data)
    

    主成分个数的选择

    一般来说,我们根据方差百分比来选择要保留的主成分个数。如我们要保留99%的方差(以下示例为matlab代码):

    [u,s,v] = svd(x);
    k = 0; % Set k accordingly
    eigenvalues = diag(s);
    current_var = 0;
    total_var = sum(eigenvalues);
    while ...
    read more

Page 1 / 2 »

blogroll

social