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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习算法基础——决策树和随机深林

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习算法基础——决策树和随机深林 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

32.決策樹之信息論基礎(chǔ)

決策樹

決策樹思想的來源非常樸素,程序設(shè)計中的條件分支結(jié)構(gòu)就是if-then結(jié)構(gòu),最早的決策樹就是利用這類結(jié)構(gòu)分割數(shù)據(jù)的一種分類學習方法

猜誰是冠軍?假設(shè)有32支球隊

每猜一次給一塊錢,告訴我是否猜對了,那么我需要掏多少錢才能知道誰是冠軍?我可以把球編上號,從1到32,然后提問:冠軍在1-16號嗎?依次詢問,只需要五次(log32=5),就可以知道結(jié)果。

信息熵?

“誰是世界杯冠軍”的信息量應(yīng)該比5比特少。香農(nóng)指出,它的準確信息量應(yīng)該是: H = -(p1logp1 + p2logp2 + ... + p32log32)

H的專業(yè)術(shù)語稱之為信息熵,單位為比特

?

當這32支球隊奪冠的幾率相同時,對應(yīng)的信息熵等于5比特

信息熵和不確定性相關(guān)

33.決策樹的劃分以及案例

信息增益

特征A對訓練數(shù)據(jù)集D的信息增益g(D,A),定義為集合D的信息熵H(D)與特征A給定條件下D的信息條件熵H(D|A)之差,即公式為:

??

注:信息增益表示得知特征X的信息而使得類Y的信息的不確定性減少的程度??

信息增益的計算

結(jié)合前面的貸款數(shù)據(jù)來看我們的公式:

信息熵的計算:??

?

?條件熵的計算:

?注:C_k表示屬于某個類別的樣本數(shù),?

常見決策樹使用的算法

ID3

  • 信息增益 最大的準則

C4.5

  • 信息增益比 最大的準則

CART

  • 回歸樹: 平方誤差最小
  • 分類樹: 基尼系數(shù)最小的準則 在sklearn中可以選擇劃分的原則?

sklearn決策樹API

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, max_depth=None,random_state=None) 決策樹分類器

  • criterion:默認是’gini’系數(shù),也可以選擇信息增益的熵’entropy’
  • max_depth:樹的深度大小
  • random_state:隨機數(shù)種子
  • method:
  • decision_path:返回決策樹的路徑

泰坦尼克號案例

在泰坦尼克號和titanic2數(shù)據(jù)幀描述泰坦尼克號上的個別乘客的生存狀態(tài)。在泰坦尼克號的數(shù)據(jù)幀不包含從劇組信息,但它確實包含了乘客的一半的實際年齡。關(guān)于泰坦尼克號旅客的數(shù)據(jù)的主要來源是百科全書Titanica。這里使用的數(shù)據(jù)集是由各種研究人員開始的。其中包括許多研究人員創(chuàng)建的旅客名單,由Michael A. Findlay編輯。

我們提取的數(shù)據(jù)集中的特征是票的類別,存活,乘坐班,年齡,登陸,home.dest,房間,票,船和性別。乘坐班是指乘客班(1,2,3),是社會經(jīng)濟階層的代表。

其中age數(shù)據(jù)存在缺失。

from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler from sklearn.feature_extraction import DictVectorizer from sklearn.tree import DecisionTreeClassifier,export_graphviz import pandas as pd def decision():#獲取數(shù)據(jù)titan = pd.read_csv("/Users/zhucan/Desktop/titanic/train.csv")#處理數(shù)據(jù),找出特征值和目標值x = titan[["Pclass","Age","Sex"]]y = titan["Survived"]print(x)#缺失值處理x["Age"].fillna(x["Age"].mean(),inplace=True)x_train, x_test,y_train, y_test = train_test_split(x,y,test_size=0.25)#特征工程 特征是類別——》one_hot編碼dict = DictVectorizer(sparse = False)x_train = dict.fit_transform(x_train.to_dict(orient="records"))print(dict.get_feature_names())x_test = dict.transform(x_test.to_dict(orient="records"))#用決策樹進行預(yù)測dec = DecisionTreeClassifier()dec.fit(x_train,y_train)#預(yù)測準確率print("預(yù)測的準確率為:",dec.score(x_test,y_test))#導出樹的結(jié)構(gòu)export_graphviz(dec,out_file="./tree.dot",feature_names=["年齡","Pclass=1st", "Pclass=2nd", "Pclass=3rd", "Sex=女性", "Sex=男性"])return None if __name__ == "__main__":decision() Pclass Age Sex 0 3rd 22.0 male 1 1st 38.0 female 2 3rd 26.0 female 3 1st 35.0 female 4 3rd 35.0 male .. ... ... ... 886 2nd 27.0 male 887 1st 19.0 female 888 3rd NaN female 889 1st 26.0 male 890 3rd 32.0 male['Age', 'Pclass=1st', 'Pclass=2nd', 'Pclass=3rd', 'Sex=female', 'Sex=male'] 預(yù)測的準確率為: 0.8026905829596412

決策樹的結(jié)構(gòu)、本地保存

  • sklearn.tree.export_graphviz() 該函數(shù)能夠?qū)С鯠OT格式 tree.export_graphviz(estimator,out_file='tree.dot’,feature_names=[‘’,’’])
  • 工具:(能夠?qū)ot文件轉(zhuǎn)換為pdf、png) 安裝graphviz ubuntu:sudo apt-get install graphviz ? ? ? ? ? ? ? ? ? ?Mac:brew install graphviz
  • 運行命令 然后我們運行這個命令 $ dot -Tpng tree.dot -o tree.png
  • 34.決策樹的保存結(jié)果分析

    決策樹的優(yōu)缺點以及改進

    優(yōu)點:

    • 簡單的理解和解釋,樹木可視化。
    • 需要很少的數(shù)據(jù)準備,其他技術(shù)通常需要數(shù)據(jù)歸一化

    缺點:

    • 決策樹學習者可以創(chuàng)建不能很好地推廣數(shù)據(jù)的過于復雜的樹,這被稱為過擬合
    • 決策樹可能不穩(wěn)定,因為數(shù)據(jù)的小變化可能會導致完全不同的樹被生成

    改進: 減枝cart算法 隨機森林

    35.隨機森林的原理以及案例調(diào)優(yōu)

    集成學習方法

    集成學習通過建立幾個模型組合的來解決單一預(yù)測問題。它的工作原理是生成多個分類器/模型,各自獨立地學習和作出預(yù)測。這些預(yù)測最后結(jié)合成單預(yù)測,因此優(yōu)于任何一個單分類的做出預(yù)測。

    什么是隨機森林

    定義:在機器學習中,隨機森林是一個包含多個決策樹的分類器,并且其輸出的類別是由個別樹輸出的類別的眾數(shù)而定。

    為什么要隨機抽樣訓練集?

    如果不進行隨機抽樣,每棵樹的訓練集都一樣,那么最終訓練出的樹分類結(jié)果也是完全一樣的

    為什么要有放回地抽樣?

    如果不是有放回的抽樣,那么每棵樹的訓練樣本都是不同的,都是沒有交集的,這樣每棵樹都是“有偏的”,都是絕對“片面的”(當然這樣說可能不對),也就是說每棵樹訓練出來都是有很大的差異的;而隨機森林最后分類取決于多棵樹(弱分類器)的投票表決。?

    集成學習API

    • class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None)
    • 隨機森林分類器
    • n_estimators:integer,optional(default = 10) 森林里的樹木數(shù)量
    • criteria:string,可選(default =“gini”)分割特征的測量方法
    • max_depth:integer或None,可選(默認=無)樹的最大深度
    • bootstrap:boolean,optional(default = True)是否在構(gòu)建樹時使用放回抽樣
    from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.neighbors import KNeighborsClassifier from sklearn.preprocessing import StandardScaler from sklearn.feature_extraction import DictVectorizer from sklearn.tree import DecisionTreeClassifier,export_graphviz from sklearn.ensemble import RandomForestClassifier import pandas as pd def decision():#獲取數(shù)據(jù)titan = pd.read_csv("/Users/zhucan/Desktop/titanic/train.csv")#處理數(shù)據(jù),找出特征值和目標值x = titan[["Pclass","Age","Sex"]]y = titan["Survived"]print(x)#缺失值處理x["Age"].fillna(x["Age"].mean(),inplace=True)x_train, x_test,y_train, y_test = train_test_split(x,y,test_size=0.25)#特征工程 特征是類別——》one_hot編碼dict = DictVectorizer(sparse = False)x_train = dict.fit_transform(x_train.to_dict(orient="records"))print(dict.get_feature_names())x_test = dict.transform(x_test.to_dict(orient="records"))#用隨機森林進行預(yù)測(超參數(shù)調(diào)優(yōu))rf = RandomForestClassifier()param ={"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]}#網(wǎng)格搜索與交叉驗證gc = GridSearchCV(rf,param_grid=param,cv=2)gc.fit(x_train,y_train)print("準確率:",gc.score(x_test,y_test))print("查看選擇的參數(shù)模型:",gc.best_params_)return Noneif __name__ == "__main__":decision() ['Age', 'Pclass=1st', 'Pclass=2nd', 'Pclass=3rd', 'Sex=female', 'Sex=male'] 準確率: 0.7443946188340808 查看選擇的參數(shù)模型: {'max_depth': 5, 'n_estimators': 800}

    隨機森林的優(yōu)點

    • 在當前所有算法中,具有極好的準確率
    • 能夠有效地運行在大數(shù)據(jù)集上 ?
    • 能夠處理具有高維特征的輸入樣本,而且不需要降維 能夠評估各個特征在分類問題上的重要性
    • 對于缺省值問題也能夠獲得很好得結(jié)果

    36.每日總結(jié)

    總結(jié)

    以上是生活随笔為你收集整理的机器学习算法基础——决策树和随机深林的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。