決策樹算法-Python實現


決策樹比較常用的算法模型,可以做分類也可以回歸

  • 決策樹算法重點
  • 對特征的選擇,可以使用熵,也可以使用基尼系數,通過信息增益或者信息增益率選擇最好的特征
  • 決策樹的剪枝,有兩種策略,一種是預剪枝,一種是后剪枝,預剪枝可以通過限制樹的高度,葉子節點個數,信息增益等進行,使得樹邊建立邊剪枝,后剪枝通過增加損失項,使得樹建立后,然后對不符合的葉子節點進行合並。達到減小樹的要求,避免過擬合

集成算法

  • Bagging 主要通過並行建立多個決策模型,然后通過投票或者平均輸出最后的值
  • Boosting 主要是通過串行的思想,通過弱分類器開始加強,然后通過加權來進行訓練,比如先訓練一棵樹,然后在增加一棵樹,達到提高模型的效果
  • Stacking 聚合多個分類或者 回歸模型來提高模型的效果、
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()
# print(housing.DESCR)

print(housing.data.shape)
print(housing.data[0])

from sklearn import tree
dtr = tree.DecisionTreeRegressor(max_depth=2)
dtr.fit(housing.data[:, [6, 7]], housing.target)

# 樹模型參數
# 1.criterion gini or entroy
# 2.splitter best or random 前者是在所有特征最終找到最好的切分點,后者實在部分特征中
# 3.max_features  None, log2, sqrt, N特征小於50一般使用所有的
# 4.mini_depth 數據少或者特征少的情況下,可以不管這個值,如果模型數據樣本量多或者特征多的情況下,可以嘗試限制
# 5.mini_samples_split 如果節點數量少,不用管,如果樣本數非常大,則推薦增加這個值
# 6.mini_samples_leaf 限制了葉子節點的樣本權重和最小值,如果小於這個值,樣本量不大,不需要管這個值,大些如果10w,可以設置5

from sklearn.model_selection import train_test_split
data_train, data_test, target_train, target_test = train_test_split(housing.data, housing.target, test_size=0.1, random_state=42)
# dtr = tree.DecisionTreeRegressor(random_state= 42)
# dtr.fit(data_train, target_train)
#
# print(dtr.score(data_test, target_test))
#
#
from sklearn.ensemble import RandomForestRegressor
#
# rfr = RandomForestRegressor(random_state=42)
# rfr.fit(data_train, target_train)
# print(rfr.score(data_test, target_test))

from sklearn.model_selection import GridSearchCV
tree_param_grid = {'min_samples_split':list((3, 6, 9)), 'n_estimators':list((10, 50, 100))}
grid = GridSearchCV(RandomForestRegressor(), param_grid=tree_param_grid, cv=5)
grid.fit(data_train, target_train)
print(grid.error_score, grid.best_params_, grid.best_score_)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM