<转载+随笔>机器学习实战笔记(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(1, 3),结果为4;再把结果和第3个元素计算:f(4, 5),结果为9;再把结果和第4个元素计算:f(9, 7),结果为16;再把结果和第5个元素计算:f(16, 9),结果为25;由于没有更多的元素了,计算结束,返回结果25。reduce(f, [1, 3, 5, 7, 9], 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) 收藏 举报
浙公网安备 33010602011771号