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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

机器学习理论入门:第二章 经典监督学习算法-决策树

發布時間:2025/3/19 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习理论入门:第二章 经典监督学习算法-决策树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第二章 經典監督學習算法-決策樹

一、決策樹總體概覽

  • 概念:是在已知各種情況發生概率的基礎上,通過構成決策樹來求取凈現值的期望值大于等于零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。由于這種決策分支畫成圖形很像一棵樹的枝干,故稱決策樹。

  • 能解決的問題
    –分類問題(較多使用)
    –回歸問題

  • 決策樹的種類(主要根據屬性劃分的依據來進行算法的分類)
    –ID3決策樹
    –C4.5決策樹
    –CART(Classification And Regression Tree)決策樹

  • 優缺點

  • 二、信息論-信息熵

  • 隨機事件及其信息
    –概念:隨機事件是在隨機試驗中,可能出現也可能不出現,而在大量重復試驗中具有某種規律性的事件叫做隨機事件
    –信息:對于一個隨機變量X,它的每一個可能值的出現都可以看作是一個信息,每當X的一個可能值被觀測到,我們稱不確定性減少了,即信息增加了

  • 信息熵
    –概念:是信息增益的數學期望

  • 熱力學中的熵
    –概念:表示系統混亂程度的量度

  • 最大熵增原則
    –概念:當根據不完整的信息作為依據進行推斷時,應該由滿足分布限制條件的具有最大熵的概率分布推得
    –推論:對于給定的方差,在任意的隨機變量中高斯隨機變量的熵最大

  • 三、信息論-交叉熵與KL散度

  • 聯合熵
    –概念:若X,Y是一對離散型隨機變量,且聯合概率分布為p(x,y),則X,Y的聯合熵為:
    –作用:描述了一對隨機變量的平均信息量

  • 條件熵
    –概念:給定隨機變量X的情況下,隨機變量Y的條件熵為:

  • 熵的連鎖規則

  • 互信息
    –定義

    –作用:反應的是知道了Y以后X的不確定性的減少量

  • 相對熵(KL散度)
    –定義

    –推論

  • 交叉熵(在深度學習中占據重要地位)
    –定義

    –作用:衡量估計出來的概率分布和真實概率分布之間的差異情況

  • 四、屬性選擇的依據

  • 決策樹的結構及作用
    –葉節點:輸出分類結果
    –內部節點:用于屬性測試
    –根節點:內節點的一種,位置特殊

  • 決策樹的輸入

  • 根節點的一些特殊情況
    –若訓練集中的數據都屬于同一類,那么將RootNode標記為該類的葉節點。返回(返回也意味著算法的結束)
    –若屬性集為空集,或者訓練集中的所有數據的所有屬性都相等,那么將RootNode標記為訓練集中出現次數最多的類的葉節點,返回

  • 決策樹的一般算法流程

  • 信息增益
    –計算樣本集的信息熵
    –使用特定屬性a進行劃分的信息增益

    –用法
    A)某個屬性的信息增益越大,則使用該屬性進行劃分所得的“純度提升”越大
    B)ID3算法使用信息增益作為屬性選擇的依據
    –缺點
    A)對可取值數目較多的屬性有偏好

  • 增益率
    –定義

    –缺點
    A)對可取值數目較少的屬性有偏好
    –缺點的解決辦法(C4.5算法):先從屬性中找到信息增益高于平均水平的屬性,然后再從中選出增益率最高的

  • 基尼指數
    –樣本集的基尼值公式

    –基尼值作用:反映了隨機抽取兩個樣本,其所屬的類別不一致的概率
    –屬性a的基尼指數定義

    –選擇標準:選擇基尼指數最小的屬性

  • 五、剪枝操作

  • 決策樹中的過擬合
    –概念:決策樹的生成過程有時候導致決策樹的分支過多(分支過多意味著考慮了過多的邊緣情況,邊緣情況很多時候由個體差異引起),從而導致過擬合

  • 驗證集
    –概念:決策樹在構造的過程中使用驗證集進行測試,來決定當前屬性是否要進行分裂

  • 剪枝的定義:將本來為內部節點的節點變成葉節點的過程叫做剪枝

  • 預剪枝(決策樹邊生成邊進行剪枝操作)
    –操作:在決策樹生成過程中,每個節點在劃分之前先在驗證集上進行一次測試,若當前節點的劃分無法提高泛化性能,則不做劃分處理,直接將此節點作為葉節點(使得一些分支不能展開,降低了過擬合)

  • 后剪枝(決策樹完全生成之后才開始剪枝,并且是自下向上的進行)

    –優點:樹的分支相對于預剪枝較多;泛化性能優于預剪枝
    –缺點:訓練時間較長

  • 六、決策樹的拓展

  • 連續值處理
    –連續屬性離散化
    A)C4.5算法采用“二分法”:假設有一個連續屬性a,那么將數據劃分為a≤t和a>t兩個部分


    2.多變量決策樹
    –屬性的線性組合
  • 七、編程實現(Python)

    from math import log import operatordef calc_entropy(labels):# 計算信息熵label_num = len(labels)label_show_up_times_dict = {}for label in labels:if label not in label_show_up_times_dict.keys():label_show_up_times_dict[label] = 0label_show_up_times_dict[label] += 1entropy = 0.0for key in label_show_up_times_dict:prob = float(label_show_up_times_dict[key]) / label_numentropy += prob * log(prob, 2)return -entropydef split_dataset(dataset, labels, index, value):# 根據特征所在的位置index和特征的值value,從原數據集中分割出那些值等于value的子集和標簽子集sub_dataset = []sub_labels = []fc_index = 0for fc in dataset:if fc[index] == value:# 如果遇到了值相等的,那么把這個索引剔除,然后把剔除該索引之后的特征向量加入到子集中temp = fc[:index]temp.extend(fc[index + 1:])sub_dataset.append(temp)# 把該特征向量對應的標簽也挑出來fc_index += 1return sub_dataset, sub_labelsdef select_best_attribute(dataset, labels):# 選擇最佳屬性,依據信息增益,即找到信息增益最大的屬性feature_num = len(dataset[0]) # 特征個數base_entropy = calc_entropy(labels) # 當前數據集的信息熵max_info_gain = -1 # 最大信息增益best_feature = -1 # 最佳的特征所在的索引for i in range(feature_num):# 當前特征位置上所有值的Listfeature_value_list = [example[i] for example in dataset]# 獲取所有可能的值(不重復)unique_vals = set(feature_value_list)# 此特征的信息熵new_entropy = 0.0for value in unique_vals:# 獲取子集sub_dataset, sub_labels = split_dataset(dataset, i, value)# 子集占的比例prob = float(len(sub_dataset)) / len(dataset)# new_entropy加上相應的部分new_entropy += prob * calc_entropy(sub_labels)# 計算當前特征的信息增益info_gain = base_entropy - new_entropyif info_gain > max_info_gain:# 如果比best_info_gain高,那么更新best_info_gain和best_featuremax_info_gain = info_gainbest_feature = ireturn best_featuredef majority_count(labels):# 選出所占比例最高的labellabel_count = {}for vote in labels:if vote not in label_count.keys():label_count[vote] = 0label_count[vote] += 1sorted_class_count = sorted(label_count.iteritem(), key=operator.itemgetter(1), reverse=True)return sorted_class_countdef decision_tree(dataset, feature_names, labels):if labels.count(labels[0]) == len(labels):# label中所有元素都相等,及類別完全相同,停止劃分return labels[0]if len(dataset[0]) == 1:# 如果只有一個特征return majority_count(labels)# 選出根節點的最最佳屬性best_feature_index = select_best_attribute(dataset, labels)best_feature_name = feature_names[best_feature_index]tree = {best_feature_name: {}}del (feature_names[best_feature_index])attr_values = [example[best_feature_index] for example in dataset]unique_vals = set(attr_values)for value in unique_vals:sub_dataset, sub_labels = split_dataset(dataset, best_feature_index, value)tree[best_feature_name][value] = decision_tree(sub_dataset, sub_labels)return tree

    總結

    以上是生活随笔為你收集整理的机器学习理论入门:第二章 经典监督学习算法-决策树的全部內容,希望文章能夠幫你解決所遇到的問題。

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