信息增益率詳解

一、信息熵

信息熵是度量樣本集合的無序程度的一種指標。如果一個樣本集合的純度較高,那麼熵值就比較小;反之,如果一個樣本集合的純度比較低,那麼熵值就比較大。

設樣本集合 D 中第 k 類樣本所佔的比例為 pk(k=1,2,…,|y|),則 D 的信息熵的計算公式為:

def calc_entropy(data_set):
    num_entries = len(data_set)
    label_counts = {}
    for feat_vec in data_set:
        current_label = feat_vec[-1]
        if current_label not in label_counts.keys():
            label_counts[current_label] = 0
        label_counts[current_label] += 1
    entropy = 0.0
    for key in label_counts:
        prob = float(label_counts[key])/num_entries
        entropy -= prob * log(prob, 2)
    return entropy

二、信息增益

信息增益是指在得知樣本特徵 X 的信息所能提供的關於樣本類別的信息量,它的計算公式為類別標籤的信息熵H(Y)減去在特徵 X 已知條件下類別標籤的條件熵H(Y|X),用數學式子表示即:

信息增益越大,表示特徵對樣本分類的重要性越高。在構造決策樹時,我們選擇信息增益最大的特徵作為當前節點對數據進行劃分,重複該步驟,直到劃分完畢。

def calc_info_gain(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
    info_gain = base_entropy - new_entropy
    return info_gain

三、信息增益率

信息增益率在選擇劃分屬性時對可選擇的屬性數進行了懲罰,避免選擇取值數目較多的屬性,即會將其權值進行降低,計算公式為:

用信息增益率來選擇屬性時,先從候選劃分屬性中找出所有能使信息增益高於平均水平的屬性,再從中選擇信息增益率最高的。

def calc_info_gain_ratio(data_set, base_entropy, feat_idx):
    num_entries = len(data_set)
    feat_vals = [example[feat_idx] for example in data_set]
    unique_vals = set(feat_vals) 
    new_entropy = 0.0
    split_info = 0.0
    for value in unique_vals:
        sub_set = split_data_set(data_set, feat_idx, value)
        prob = len(sub_set)/float(num_entries)
        new_entropy += prob * calc_entropy(sub_set)
        split_info -= prob * log(prob, 2)
    if split_info == 0.0:
        return 0.0
    info_gain = base_entropy - new_entropy
    info_gain_ratio = info_gain / split_info
    return info_gain_ratio

四、實例分析

在使用信息增益率算法建立決策樹時,在選擇初始特徵時,根據信息增益率最高的原則,選取了編號為2(有工作?)的屬性進行劃分,選擇該屬性的理由是它能將樣本集劃分成唯一的三個子集,且每個子集的信息熵都比較小。結果如下圖所示:

可以看出,經過信息增益率算法構建的決策樹比信息增益算法構建的更為簡潔,劃分效果更好。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/279616.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:04
下一篇 2024-12-20 15:04

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27
  • 已裝備我軍的空中信息化作戰平台

    本文將會從多個方面詳細闡述已裝備我軍的空中信息化作戰平台。 一、平台概述 已裝備我軍的空中信息化作戰平台是一個全新的作戰系統,具備實時數據採集、處理、分析、共享的能力。它可以在不同…

    編程 2025-04-27
  • 通過提交信息搜索-使用git

    本篇文章重點講解如何使用git通過提交信息來搜索。我們將從多個方面介紹如何使用git來搜索提交信息,並提供相應的代碼示例以供參考。 一、搜索方式 Git提供了三種搜索方式,分別為:…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25

發表回復

登錄後才能評論