Boosting和GBT

来源:互联网 发布:千牛与淘宝什么区别 编辑:程序博客网 时间:2024/06/06 21:38

总结的Boosting和GBT相关内容

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

boosting的代码,g为不同的幂次的函数

# -*- coding: utf-8 -*-"""Created on Mon Jan 23 11:02:38 2017@author: Administrator"""import numpy as npdef XYSeparation(dataset):    dataset = np.transpose(np.array(dataset))    Xset = dataset[:-1]    Yset = dataset[-1]    return Xset,Ysetdef BaseG(dataset,n):    basefunction = np.array([[0.0]*(len(dataset[0])) for i in range(len(dataset)*n + 1)])    NormalizedCoef = np.array([0.0]*(len(dataset)*n + 1))    basefunction[0] = 1.0    NormalizedCoef[0] = np.linalg.norm(basefunction[0])    basefunction[0] = basefunction[0]/NormalizedCoef[0]    for i in range(n):        for ii in range(len(dataset)):            NormalizedCoef[i*len(dataset)+ii+1] = np.linalg.norm((dataset[ii]**(i+1)))            basefunction[i*len(dataset)+ii+1] = (dataset[ii]**(i+1))/NormalizedCoef[i*len(dataset)+ii+1]    return basefunction,NormalizedCoefdef myBoosting(dataset,n,MaxDepth):    myResult = {}    Xset,yr = XYSeparation(dataset)    basefunction,NormalizedCoef = BaseG(Xset,n)    for depth in range(MaxDepth):        i0 = 0        Val0 = 0        for i in range(len(basefunction)):            Val = np.dot(yr,basefunction[i])            if abs(Val) > abs(Val0):                Val0 = Val                i0 = i        if i0 in list(myResult.keys()):            myResult[i0] += Val0        else:            myResult[i0] = Val0        yr -= Val0*basefunction[i0]        if np.linalg.norm(yr) == 0:            break    for i in list(myResult.keys()):        myResult[i] /= NormalizedCoef[i]    return myResult,np.linalg.norm(yr)def BoostingClassify(myResult,n,data):    Val = 0    IndexD = list(myResult.keys())    basefunction = [1.0]*(len(data)*n + 1)    for i in range(n):        for ii in range(len(data)):            basefunction[len(data)*i+ii+1] = data[ii]**(i+1)    for i in range(len(IndexD)):        if IndexD[i] == 0:            Val += myResult[IndexD[i]]        else:            Val += myResult[IndexD[i]]*basefunction[IndexD[i]]    return Val

GBRT的代码

# -*- coding: utf-8 -*-"""Created on Mon Jan 23 14:46:42 2017@author: Administrator"""import DTdef GBRTClassify(myTreeSet,data):    GBRTResult = 0    for Tree in myTreeSet:        GBRTResult += DT.classify(Tree,data)    return GBRTResultdef myGBRT(dataset,TreeN,TreeMaxDepth):    myTreeSet = []    for i in range(TreeN):        inputTree = DT.MyCreateTree(dataset,TreeMaxDepth)        myTreeSet += [inputTree]        for data in dataset:            data[-1] -= DT.classify(inputTree,data)    return myTreeSet
0 0
原创粉丝点击