<转载+随笔>机器学习实战笔记(Python实现)-02-决策树

原文链接:http://www.cnblogs.com/hemiy/p/6165759.html

关于决策树的详细解释可以通过一个例子来了解:

算法杂货铺——分类算法之决策树(Decision tree)---张洋

该随笔主要记录中间自己不懂的函数,知识点

0.信息熵(香农熵)

信息传递中,一个信息符号的价值,取决于可表示状态数及可以消除的系统不确定性。其中可表示状态数以二状态符号为单位1,n状态符号价值是二状态符号的log2nlog2n倍,不确定性由信息熵度量,消除的不确定性越高则价值越高。

参考博客:http://blog.codinglabs.org/articles/simple-explain-of-amtoc.html

1.Counter()函数

  Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

  找到一个比较详细的博客:转自Pythoner  http://www.pythoner.com/205.html

  原博客中的一行代码:

  

dataSet = [[1, 1, 'yes'],
               [1, 1, 'yes'],
               [1, 0, 'no'],
               [0, 1, 'no'],
               [0, 1, 'no']]
t=Counter(sample[-1] for sample in dataSet)
#意思是遍历dataSet,根据sample[-1](即最后一个元素)来计数。
print(t)
#输出:Counter({'no': 3, 'yes': 2})

  

2.lambda()函数(来源https://www.cnblogs.com/evening/archive/2012/03/29/2423554.html

  lambda作为一个表达式,定义了一个匿名函数

  lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

  如果可以使用for...in...if来完成的,坚决不用lambda。

  如果使用lambda,lambda内不要包含循环,如果有,我宁愿定义函数来完成,使代码获得可重用性和更好的可读性。

  lambda 是为了减少单行函数的定义而存在的。

  g(1)

  >>>2

  g(2)

  >>>3

  当然,你也可以这样使用:

  lambda x:x+1(1)

  >>>2

3.reduce()函数  参考(https://www.cnblogs.com/evening/archive/2012/03/29/2423554.html

  reduce()函数有两个参数,第一个是函数(该函数必须有两个参数,第二个为map)

  举例:

  

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

def f(x,y):

  return x+y

先计算头两个元素:f(13),结果为4
再把结果和第3个元素计算:f(45),结果为9
再把结果和第4个元素计算:f(97),结果为16
再把结果和第5个元素计算:f(169),结果为25
由于没有更多的元素了,计算结束,返回结果25
 
若第二个参数后还有参数t:
reduce(f, [13579], 100)

结果将变为125,因为第一轮计算是:

计算初始值和第一个元素:f(100, 1),结果为101

 

 

reduce函数,reduce函数会对参数序列中元素进行累积。
reduce函数的定义:
reduce(function, sequence[, initial]) -> value
function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。
第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
结果为21(  (((((1+2)+3)+4)+5)+6)  )
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])

结果为20

4.del()函数

  del(args=)函数删除的是变量名,与c++不同,涉及到深拷贝浅拷贝的问题

  

if __name__=="__main__":
    g = [1,2,3]
    t = g
    g[0] = 8
    print(t)
    print(g)
    del (g[0])
    print(t)
    print(g)
#输出:
    [8, 2, 3]
    [8, 2, 3]
    [2, 3]
    [2, 3]
from copy import deepcopy
if __name__=="__main__":
    g = [1,2,3]
    t = deepcopy(g)
    g[0] = 8
    print(t)
    print(g)
    del (g[0])
    print(t)
    print(g)
#输出
    [1, 2, 3]
    [8, 2, 3]
    [1, 2, 3]
    [2, 3]

 

 

5.赋值操作

  creatTree()函数里第20行的赋值操作,刚看的时候不太懂,test了一下,贴下代码

  

    bestFeatLabel = "no"
    myTree = {bestFeatLabel: {}}
    print(myTree)
#输出:
{'no': {}}
#myTree是一个字典,key为字符串,value为字典

 

6.isinstance()函数 

  原型:

def isinstance(x, A_tuple): # real signature unknown; restored from __doc__
    """
    Return whether an object is an instance of a class or of a subclass thereof.
    
    A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
    check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
    or ...`` etc.
    """
    pass

功能:判断x是否为A类型

 

 

posted on 2017-12-13 22:16  wastelands  阅读(152)  评论(1)    收藏  举报

导航