机器学习实战之CART

理论

CART(Classification and Regression Tree)是决策树的一种。
决策树是每次以某个属性为准,将数据集划分为几个类,最终数据集中的元素都被划分到相应的类中。典型的决策树算法是ID3。ID3与CART不同之处:ID3生成的决策树是n叉树,CART是二叉树;两种算法在每次迭代时都需要寻找最优的划分属性,不同的是,ID3用来度量划分是否为优的准则是:信息增益(Information Gain),而CART使用的准则是Gini impurity(基尼杂质)或Variance reduction。

Gini impurity

(来自维基百科)
Gini impurity用来衡量一个元素被错误分类的概率大小。当所有节点只能分到一个类中时,Gini imputiry达到最小0.
Gini impurity的计算:加上所有项被选择的概率 fi 与被错分的概率 1fi 的乘积(不懂)

IG(f)=i=1mfi(1fi)=i=1m(fif2i)=i=1mfii=1mf2i=1i=1mf2i=ikfifk

后剪枝

getMean(tree):计算树所有叶子节点值的平均值
由底向上剪枝,如果合并两棵子树后的方差比未合并时小,那么合并子树。

程序学习

  1. numpy中的函数:nonzero
    返回非零元素值的下标,返回数组的数组,包含某一维(二维矩阵的话,会返回包含两个array的tuple,其中一个array代表x维,另一个代表y维)中非零元素的下标。相应的非零元素值可以通过a[nonzero(a)]来得到。
    Examples:
    python
    >>> x = np.eye(3)
    >>> x
    array([[ 1., 0., 0.],
    [ 0., 1., 0.],
    [ 0., 0., 1.]])
    >>> np.nonzero(x)
    (array([0, 1, 2]), array([0, 1, 2]))
    >>> x[np.nonzero(x)]
    array([ 1., 1., 1.])
    >>> np.transpose(np.nonzero(x))
    array([[0, 0],
    [1, 1],
    [2, 2]])
  2. numpy中的matrix
    在其函数中,有axis参数,其中0表示每列,1表示每行。
    example:
    python
    >>> a
    matrix([[1, 0],
    [3, 4]])
    >>> argmax(a,0) #argmax返回matrix中沿某个轴最大数的下标
    matrix([[1, 1]])
    >>> argmax(a,1)
    matrix([[0],
    [1]])
  3. 这个程序中使用的准则是Variance reduction
    在根据属性的大小将数据集一分为二时(函数binSplitDataSet),有三种情况直接返回叶子节点(返回的数值是此数据集的平均):
    • 1 数据集的类别或数值只有一个时
    • 2 在根据某个属性划分数据集后,划分的左子树或右子树中元素的个数小于实现设置的阈值
    • 3 在确定了最好的划分属性后,方差和划分前的方差相差很小(方差没有什么改进)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值