• 机器学习9树回归


    在前面线性回归,线性回归要拟合全部样本,这个是不显示的,因为问题不一定就是线性模型,其中一种可行的方法是将数据集切分成多分易建模的数据,然后利用前面线性回归的方法来建模。如果第一个切分之后的数据还不好拟合的话,那就继续切分。

    这就是决策树中一种叫分类回归树CART。这个算法即可以用于分类也可以用于回归。

    在这个学习中,介绍了树剪枝算法。

    CART算法实现

    先看一下之前的树分类

    from numpy import *
    
    def loadDataSet(fileName):      #general function to parse tab -delimited floats
        dataMat = []                #assume last column is target value
        fr = open(fileName)
        for line in fr.readlines():
            curLine = line.strip().split('	')
            fltLine = map(float,curLine) #map all elements to float()
            dataMat.append(fltLine)
        return dataMat
    
    def binSplitDataSet(dataSet, feature, value):
        mat0 = dataSet[nonzero(dataSet[:,feature] > value)[0],:][0]
        mat1 = dataSet[nonzero(dataSet[:,feature] <= value)[0],:][0]
        return mat0,mat1

    我们大概看一下结果:

    >>> import regTrees
    >>> testMat = mat(eye(4))
    >>> testMat
    matrix([[ 1.,  0.,  0.,  0.],
            [ 0.,  1.,  0.,  0.],
            [ 0.,  0.,  1.,  0.],
            [ 0.,  0.,  0.,  1.]])
    >>> mat0,mat1 = regTrees.binSplitDataSet(testMat,1,0.5)
    >>> mat0
    matrix([[ 0.,  1.,  0.,  0.]])
    >>> mat1
    matrix([[ 1.,  0.,  0.,  0.],
            [ 0.,  0.,  1.,  0.],
            [ 0.,  0.,  0.,  1.]])

    第二个函数以第二个特征进行分类,以0.5作为切分。下面给出CART算法流程

    image

    具体代码先不贴了,下面看看这个算法的树剪枝算法。

    对于一棵树来说,如果节点过多,这个模型可能对数据过拟合,我们之前采用了交叉验证来发现过拟合,这个决策树也是一样。

    通过降低决策树的复杂度来避免过拟合的过程称为剪枝。剪枝分为预剪枝跟后剪枝。

    学习的这个事需要坚持,这几天感觉状态不佳,看这些算法有点囫囵吞枣了,目前先这样吧,先匆匆看完吧。

  • 相关阅读:
    http协议及工作原理
    前端中的安全问题
    JS中的splice slice concat关于字符串,数组的处理
    git stash缓存
    Node学习心得
    uni-app中的TypeError: Cannot read property 'name' of undefined
    js 中Object.keys()返回string类型的索引
    JS中sort()方法,用于排序
    JS中JSON传值
    JS encodeURI()
  • 原文地址:https://www.cnblogs.com/fengbing/p/3523551.html
Copyright © 2020-2023  润新知