日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习Sklearn实战——梯度提升树二分类原理

發布時間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习Sklearn实战——梯度提升树二分类原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、算法使用

(一)創建

(二)參數調整

  • cross_val_score:求單一參數最合適的值(KNN)

  • GridSearchCV網格搜索:多參數組合最優的值

  • 標準:準確率,精確率,召回率,F1

  • (三)數據清洗

    (四)操作數據庫(數據清洗)

    (五)數據分析,可視化(Excel可視化的表)

    二、算法原理

    KNN原理,距離(調整,p=1,p=2設置p=1,p=2調和)

    決策樹原理:熵、gini、梯度上升、梯度下降

    隨機森林,極限森林:簡單決策樹+隨機性

    梯度提升樹(回歸):每棵樹畫出來,顯示,推導

    梯度提升分類樹

    import numpy as np from sklearn.ensemble import GradientBoostingClassifier from sklearn import tree import matplotlib.pyplot as plt xi = np.arange(1,11) yi = np.array([0,0,0,1,1]*2)gbdt = GradientBoostingClassifier(n_estimators=3,max_depth=1) gbdt.fit(xi.reshape(-1,1),yi) gbdt.estimators_.shape #3是3棵樹,1是二分類問題(3分類問題是3 4分類問題是4) plt.figure(figsize=(9,6)) _ = tree.plot_tree(gbdt[0,0],filled = True)

    np.var(yi) 0.24F0 = np.log(4/6) -0.40546510810816444#殘差,概率,負梯度 yi_1 = yi - 1/(1+np.exp(-F0)) yi_1 array([-0.4, -0.4, -0.4, 0.6, 0.6, -0.4, -0.4, -0.4, 0.6, 0.6])#計算每個裂分點mse mse1 = [] for i in range (1,11):if i == 10:mse1.append(np.var(yi_1))else:mse1.append((np.var(yi_1[:i])*i+np.var(yi_1[i:])*(10-i))/10) mse1 [0.22222222222222224,0.2,0.17142857142857143,0.225,0.23999999999999994,0.23333333333333334,0.20952380952380958,0.15,0.2,0.24] np.var(yi_1[:8]) np.var(yi_1[8:]) 0.1875 0.0

    np.round(yi_1[:8].sum()/(((yi[:8]-yi_1[:8])*(1-yi[:8]+yi_1[:8])).sum()),3) np.round(yi_1[8:].sum()/(((yi[8:]-yi_1[8:])*(1-yi[8:]+yi_1[8:])).sum()),3)

    結果:

    -0.625 2.5 #第一棵樹數據預測的值 y_1 = [-0.625]*8 +[2.5]*2 y_1 = np.asarray(y_1) y_1gbdt[0,0].predict(xi.reshape(-1,1))

    結果:?

    array([-0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625,2.5 , 2.5 ]) array([-0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625, -0.625,2.5 , 2.5 ])

    ?

    I=1,xi屬于集合內? ?I=0,xi不屬于集合內

    #learning_rate = 0.1 F1 = F0 + y_1*0.1 F1.round(4)

    結果:

    array([-0.468 , -0.468 , -0.468 , -0.468 , -0.468 , -0.468 , -0.468 ,-0.468 , -0.1555, -0.1555]) yi_2 = yi - 1/(1+np.exp(-F1)) yi_2.round(4)

    結果:

    array([-0.3851, -0.3851, -0.3851, 0.6149, 0.6149, -0.3851, -0.3851,-0.3851, 0.5388, 0.5388]) plt.figure(figsize=(16,8)) tree.plot_tree(gbdt[1,0],filled = True)

    #計算每個裂分點mse mse1 = [] for i in range (1,11):if i == 10:mse1.append(np.var(yi_2))else:mse1.append((np.var(yi_2[:i])*i+np.var(yi_2[i:])*(10-i))/10) mse1 mse1 = np.asarray(mse1) mse1

    結果:

    array([0.20620922, 0.18564623, 0.1592081 , 0.21054968, 0.22242788,0.2186899 , 0.19976152, 0.15 , 0.19036645, 0.22265961]) np.round(yi_2[:8].sum()/(((yi[:8]-yi_2[:8])*(1-yi[:8]+yi_2[:8])).sum()),3) np.round(yi_2[8:].sum()/(((yi[8:]-yi_2[8:])*(1-yi[8:]+yi_2[8:])).sum()),3)

    結果:

    -0.571 2.168 np.var(yi_2[:8]) np.var(yi_2[8:]) 0.1875 0.0

    總結

    以上是生活随笔為你收集整理的机器学习Sklearn实战——梯度提升树二分类原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。