大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(二十三):人工神經(jīng)網(wǎng)絡(luò)
大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(二十五):聚類(lèi)(一)
一、回歸樹(shù)
-
回歸樹(shù)是決策樹(shù)的一種算法,但回歸的值是連續(xù)值。
- 與分類(lèi)樹(shù)不同,回歸樹(shù)的每個(gè)節(jié)點(diǎn)(包括葉子節(jié)點(diǎn)和中間節(jié)點(diǎn)),都會(huì)得到預(yù)測(cè)值。
- 一般這個(gè)預(yù)測(cè)值就是這些連續(xù)標(biāo)注的平均值。
- 對(duì)特征進(jìn)行分類(lèi),切分屬性的依據(jù)不再是熵或基尼系數(shù),而是最小方差。
- 也就是說(shuō)在根據(jù)某一個(gè)屬性切分后,必須要滿(mǎn)足兩部分的方差的和是最小的。
- 之后就可以套用其它特征進(jìn)行同樣的過(guò)程,直到滿(mǎn)足回歸樹(shù)的停止條件。
- 停止條件可以是剪枝的限制、葉子最大樣本數(shù)量等等。
- 如果要進(jìn)行預(yù)測(cè),順著回歸樹(shù)的特征到葉子節(jié)點(diǎn),取葉子節(jié)點(diǎn)的平均值作為預(yù)測(cè)值。
二、提升樹(shù)
-
提升樹(shù)的構(gòu)建基于回歸樹(shù),提升樹(shù)中以梯度提升決策樹(shù)(GBDT)的預(yù)測(cè)效果最好。
- 梯度提升決策樹(shù)是一種集成方法:
- 其中第一棵樹(shù)是一個(gè)弱集成器,擬合效果誤差較大。
- 下一個(gè)棵樹(shù)的標(biāo)簽,是上一棵預(yù)測(cè)后,與原標(biāo)簽的差分值。
- 重復(fù)第二步直到結(jié)束。
- 詳細(xì)算法如下:
| Setting | Loss Function | |
|---|---|---|
| Regression | ||
| Regression | ||
| Regression | Huber |
where |
| Classification | Deviance | kth component: |
其中:
是實(shí)際值。
代表預(yù)設(shè)值,希望預(yù)設(shè)值更小,所以與
相減。

三、代碼實(shí)現(xiàn)
>>>import os
>>>import pandas as pd
>>>import numpy as np
>>>from sklearn.model_selection import train_test_split
>>>from sklearn.metrics import accuracy_score,recall_score,f1_score
>>>from sklearn.ensemble import GradientBoostingClassifier
>>>models = []
>>>models.append(("GBDT",GradientBoostingClassifier(max_depth=6,n_estimators=100)))
>>>df = pd.read_csv(os.path.join(".", "data", "WA_Fn-UseC_-HR-Employee-Attrition.csv"))
>>>X_tt,X_validation,Y_tt,Y_validation = train_test_split(df.JobLevel,df.JobSatisfaction,test_size=0.2)
>>>X_train,X_test,Y_train,Y_test = train_test_split(X_tt,Y_tt,test_size=0.25)
>>>for clf_name,clf in models:
>>> clf.fit(np.array(X_train).reshape(-1,1),np.array(Y_train).reshape(-1,1))
>>> xy_lst = [(X_train,Y_train),(X_validation,Y_validation),(X_test,Y_test)]
>>> for i in range(len(xy_lst)):
>>> X_part = xy_lst[i][0]
>>> Y_part = xy_lst[i][1]
>>> Y_pred = clf.predict(np.array(X_part).reshape(-1,1))
>>> print(i)
>>> print(clf_name,"-ACC",accuracy_score(Y_part,Y_pred))
>>> print(clf_name,"-REC",recall_score(Y_part,Y_pred,average='macro'))
>>> print(clf_name,"-F1",f1_score(Y_part,Y_pred,average='macro'))
>>> print("="*40)
0
GBDT -ACC 0.31746031746031744
GBDT -REC 0.25609813587629976
GBDT -F1 0.1933613852394503
========================================
1
GBDT -ACC 0.29931972789115646
GBDT -REC 0.22676837725381413
GBDT -F1 0.173353927942814
========================================
2
GBDT -ACC 0.2925170068027211
GBDT -REC 0.2583216292134831

