回歸樹的實現(3個核心函式)

2021-08-22 11:55:21 字數 2366 閱讀 6536

def binsplitdataset(dataset,feature,value):

bigindex = dataset[:,feature] > value

smallindex = dataset[:,feature] <= value

#print('bigindex:',bigindex)

#print('smallindex:',smallindex)

big = dataset[nonzero(bigindex)[0],:]

small = dataset[nonzero(smallindex)[0],:]

return small,big

第乙個函式有三個引數:資料集合,待切分的特徵和該特徵的某個值,在給定特徵和特徵值的情況下,該函式通過陣列過濾方式將上述資料集合切分得到兩個子集並返回

def choosebestsplit(dataset,leaftype=regleaf,errtype=regerr,ops=(1,4)):

if len(set(dataset[:,-1].t.a.tolist()[0]))==1:

return none,leaftype(dataset)

es=ops[0]

minsample=ops[1]

besterror=errtype(dataset)

originerror=errtype(dataset)

bestfeatindex=0

bestsplitvalue=0

m,n=shape(dataset)

for featindex in range (n-1):

for splitvalue in set(dataset[:,featindex].t.a.tolist()[0]):

mat0,mat1=binsplitdataset(dataset,featindex,splitvalue)

if shape(mat0)[0]choosebestsplit()函式目標是找到資料集切分的最佳位置。

它遍歷所有的特徵及其可能的取值來找到誤差最小化的切分閾值。 

對每個特徵:

對每個特徵值: 

將資料集切分成兩份(小於該特徵值的資料樣本放在左子樹,否則放在右子樹)

計算切分的誤差

如果當前誤差小於當前最小誤差,那麼將當前切分設定為最佳切分並更新最小誤差

返回最佳切分的特徵和閾值

args:

dataset   載入的原始資料集

leaftype  建立葉子點的函式

errtype   誤差計算函式(求總方差)

ops       [容許誤差下降值,切分的最少樣本數]。非常重要,因為它決定了決策樹劃分停止的threshold值,被稱為預剪枝(prepruning),

其實也就是用於控制函式的停止時機。

之所以這樣說,是因為它防止決策樹的過擬合,所以當誤差的下降值小於tols,或劃分後的集合size小於toln時,選擇停止繼續劃分。

returns:

bestindex feature的index座標

bestvalue 切分的最優值

def createtree(dataset,leaftype=regleaf,errtype=regerr,ops=(1,4)):

feat,val=choosebestsplit(dataset,leaftype,errtype,ops)

if feat==none:

return val

rettree={}

rettree['spind']=feat

rettree['spval']=val

#大於在右邊,小於在左邊,分為兩個資料集

lset,rset=binsplitdataset(dataset,feat,val)

#遞迴的進行呼叫,在左右子樹中繼續遞迴生成樹

rettree['left']=createtree(lset,leaftype,errtype,ops)

rettree['right']=createtree(rset,leaftype,errtype,ops)

return rettree

步驟:找到最佳的待切分特徵

如果該節點不能再分,將該節點存為葉節點

執行二元切分

在右子樹呼叫createtree()方法

在左子樹呼叫createtree()方法

args:

dataset   載入的原始資料集

leaftype  建立葉子點的函式

errtype   誤差計算函式(求總方差)

ops       [容許誤差下降值,切分的最少樣本數]。非常重要,因為它決定了決策樹劃分停止的threshold值,被稱為預剪枝

專案群的3個核心特徵

多個專案 指專案群由若干個同時發生或部分搭接的專案構成。這些專案相互問,要麼具有一定邏輯關係,要麼雖沒有邏輯關係,但具有類似特徵。邏輯關係並不是構成專案群的必要條件,專案群中乙個專案的推遲可能影響到另乙個專案,如著名阿波羅計畫中的專案 也可能不會影響到另乙個專案,如南水北調工程的東 中 西線工程專案...

SpringBoot最核心的3個註解

org springframework context annotation configuration bean 用來代替 xml 配置檔案裡面的 配置 importresource 如果有些通過類的註冊方式配置不了的,可以通過這個註解引入額外的 xml 配置檔案,有些老的配置檔案無法通過 con...

linux3 核心的 setup函式

在核心 中經常會看到 setup函式,這個函式從哪來,到哪去?下面我們逐一分析 例如在i2c驅動中就有這麼乙個setup函式 setup i2c bus omap i2c bus setup 我們先要直到它是從哪來的 看如下 define setup param str,unique id,fn,e...