ID3 決策樹

西瓜數據集D如下:

編號色澤根蒂敲聲紋理臍部觸感好瓜
1青綠蜷縮濁響清晰凹陷硬滑
2烏黑蜷縮沉悶清晰凹陷硬滑
3烏黑蜷縮濁響清晰凹陷硬滑
4青綠蜷縮沉悶清晰凹陷硬滑
5淺白蜷縮濁響清晰凹陷硬滑
6青綠稍蜷濁響清晰稍凹軟粘
7烏黑稍蜷濁響稍糊稍凹軟粘
8烏黑稍蜷濁響清晰稍凹硬滑
9烏黑稍蜷沉悶稍糊稍凹硬滑
10青綠硬挺清脆清晰平坦軟粘
11淺白硬挺清脆模糊平坦硬滑
12淺白蜷縮濁響模糊平坦軟粘
13青綠稍蜷濁響稍糊凹陷硬滑
14淺白稍蜷沉悶稍糊凹陷硬滑
15烏黑稍蜷濁響清晰稍凹軟粘
16淺白蜷縮濁響模糊平坦硬滑
17青綠蜷縮沉悶稍糊稍凹硬滑

即集合D為分類問題,分類瓜的好壞是一個二分類問題,故|y| =2 ,故只存在p1,p2

信息熵為衡量信息混亂程度的量
記好瓜比例為p1,壞瓜比例為p2

1. 若全是好瓜 , 則 p 1 = 1 , p 2 = 0 E n t ( D ) = ? ∑ k = 1 ∣ y ∣ p k l o g 2 p k = ? ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = 1 ? l o g 2 ? 1 + 0 ? l o g 2 ? 0 = 0 2. 若全是好瓜 , 則 p 1 = 0 , p 2 = 1 E n t ( D ) = ? ∑ k = 1 ∣ y ∣ p k l o g 2 p k = ? ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = 0 ? l o g 2 ? 0 + 1 ? l o g 2 ? 1 = 0 則完全不混亂為全是好瓜或全是壞瓜 , E n t ( D ) = 0 2. 若全是好壞瓜個一半 , 則 p 1 = 1 2 , p 2 = 1 2 E n t ( D ) = ? ∑ k = 1 ∣ y ∣ p k l o g 2 p k = ? ( p 1 l o g 2 p 1 + p 2 l o g 2 p 2 ) = ? ( 1 2 ? l o g 2 ? 1 2 + 1 2 ? l o g 2 ? 1 2 ) = 1 則最混亂為 E n t ( D ) = 1 1.若全是好瓜,則p_1=1,p_2=0 \\ Ent(D) = -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\= -(p_1log_2p_1 + p_2log_2p_2 ) \\=1\cdot log_2\cdot 1 + 0\cdot log_2\cdot 0 \\=0\\ 2.若全是好瓜,則p_1=0,p_2=1 \\ Ent(D) = -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\= -(p_1log_2p_1 + p_2log_2p_2 ) \\=0\cdot log_2\cdot 0 + 1\cdot log_2\cdot 1 \\=0\\ 則完全不混亂為全是好瓜或全是壞瓜,Ent(D) = 0\\ 2.若全是好壞瓜個一半,則p_1=\frac12,p_2=\frac12 \\ Ent(D) = -\sum\limits _{k=1}^{|y|}p_klog_2p_k \\= -(p_1log_2p_1 + p_2log_2p_2 ) \\=-(\frac12\cdot log_2\cdot \frac12 + \frac12\cdot log_2\cdot \frac12 )\\=1\\ 則最混亂為Ent(D) = 1 1.若全是好瓜,p1?=1,p2?=0Ent(D)=?k=1y?pk?log2?pk?=?(p1?log2?p1?+p2?log2?p2?)=1?log2??1+0?log2??0=02.若全是好瓜,p1?=0,p2?=1Ent(D)=?k=1y?pk?log2?pk?=?(p1?log2?p1?+p2?log2?p2?)=0?log2??0+1?log2??1=0則完全不混亂為全是好瓜或全是壞瓜,Ent(D)=02.若全是好壞瓜個一半,p1?=21?,p2?=21?Ent(D)=?k=1y?pk?log2?pk?=?(p1?log2?p1?+p2?log2?p2?)=?(21??log2??21?+21??log2??21?)=1則最混亂為Ent(D)=1

當前樣本集合D中第k類樣本所占比例為pk(k=1,2,3,…,|y|),則D的信息熵為:

E n t ( D ) = ? ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D) = -\sum\limits _{k=1}^{|y|}p_klog_2p_k Ent(D)=?k=1y?pk?log2?pk?

信息增益為:

G a i n ( D , a ) = E n t ( D ) ? ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D,a) = Ent(D) - \sum\limits _{v=1}^V \frac{|Dv|}{|D|}Ent(D^v) Gain(D,a)=Ent(D)?v=1V?DDv?Ent(Dv)

import math
D = [
['青綠','蜷縮','濁響','清晰','凹陷','硬滑','是'],
['烏黑','蜷縮','沉悶','清晰','凹陷','硬滑','是'],
['烏黑','蜷縮','濁響','清晰','凹陷','硬滑','是'],
['青綠','蜷縮','沉悶','清晰','凹陷','硬滑','是'],
['淺白','蜷縮','濁響','清晰','凹陷','硬滑','是'],
['青綠','稍蜷','濁響','清晰','稍凹','軟粘','是'],
['烏黑','稍蜷','濁響','稍糊','稍凹','軟粘','是'],
['烏黑','稍蜷','濁響','清晰','稍凹','硬滑','是'],
['烏黑','稍蜷','沉悶','稍糊','稍凹','硬滑','否'],
['青綠','硬挺','清脆','清晰','平坦','軟粘','否'],
['淺白','硬挺','清脆','模糊','平坦','硬滑','否'],
['淺白','蜷縮','濁響','模糊','平坦','軟粘','否'],
['青綠','稍蜷','濁響','稍糊','凹陷','硬滑','否'],
['淺白','稍蜷','沉悶','稍糊','凹陷','硬滑','否'],
['烏黑','稍蜷','濁響','清晰','稍凹','軟粘','否'],
['淺白','蜷縮','濁響','模糊','平坦','硬滑','否'],
['青綠','蜷縮','沉悶','稍糊','稍凹','硬滑','否']
]
A = ['色澤','根蒂','敲聲','紋理','臍部','觸感','好瓜']# 當前樣本集合D中第k類樣本所占比例為pk(k=1,2,3,…,|y|)
# 計算A的信息熵,以數據最后一列為分類
def getEnt(D):# 獲取一個類型k->出現次數的mapkMap = dict()for dLine in D:# 獲取分類值kk = dLine[len(dLine) - 1]# 獲取當前k出現的次數kNum = kMap.get(k)if  kNum is None:kMap[k] = 1else:kMap[k] = kNum + 1# 遍歷mapdLen = len(D)rs = 0for kk in kMap:pk = kMap[kk]/dLenrs = rs + pk * math.log2(pk)return -rs# 求信息增益,aIndex為屬性列號
def getGain(D,aIndex):dMap = dict()for dLine in D:# 獲取屬性k = dLine[aIndex]# 屬性所屬的數組dChildren = dMap.get(k)if  dChildren is None:dChildren = []dMap[k] = dChildrendChildren.append(dLine)rs = 0    for key in dMap:dChildren = dMap[key]entx = getEnt(dChildren)print(entx)r = len(dChildren)/len(D) * entxrs = rs + rreturn getEnt(D) - rs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39390.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

idea cannot download sources 解決方法

問題 點擊class文件右上角下載源碼失敗 解決方案 找到idea terminal 控制臺cd 至maven工程執行 mvn dependency:resolve -Dclassifiersources

【IMX6ULL驅動開發學習】04.應用程序和驅動程序數據傳輸和交互的4種方式:非阻塞、阻塞、POLL、異步通知

一、數據傳輸 1.1 APP和驅動 APP和驅動之間的數據訪問是不能通過直接訪問對方的內存地址來操作的,這里涉及Linux系統中的MMU(內存管理單元)。在驅動程序中通過這兩個函數來獲得APP和傳給APP數據: copy_to_usercopy_from_user …

24屆近3年上海電力大學自動化考研院校分析

今天給大家帶來的是上海電力大學控制考研分析 滿滿干貨~還不快快點贊收藏 一、上海電力大學 學校簡介 上海電力大學(Shanghai University of Electric Power),位于上海市,是中央與上海市共建、以上海市管理為主的全日…

stack 、 queue的語法使用及底層實現以及deque的介紹【C++】

文章目錄 stack的使用queue的使用適配器queue的模擬實現stack的模擬實現deque stack的使用 stack是一種容器適配器&#xff0c;具有后進先出&#xff0c;只能從容器的一端進行元素的插入與提取操作 #include <iostream> #include <vector> #include <stack&g…

Layui列表復選框根據條件禁用

// 禁用客服回訪id有值的復選框res.data.forEach(function (item, i) {if (item.feedbackEmpId) {let index res.data[i][LAY_TABLE_INDEX];$(".layui-table tr[data-index"index"] input[typecheckbox]").prop(disabled,true);$(".layui-table tr[d…

【WebRTC---源碼篇】(二十四)GCC獲取碼率后的分配

RtpTransportControllerSend::PostUpdates 配置碼率 // Contains updates of network controller comand state. Using optionals to // indicate whether a member has been updated. The array of probe clusters // should be used to send out probes if not empty. // 包…

【SpringBoot】89、SpringBoot中使用@Transactional進行事務管理

事務是一組組合成邏輯工作單元的操作,雖然系統中可能會出錯,但事務將控制和維護事務中每個操作的一致性和完整性。 1、SpringBoot 引用說明 新建的 Spring Boot 項目中,一般都會引用 spring-boot-starter 或者 spring-boot-starter-web,而這兩個起步依賴中都已經包含了對…

EV 錄屏修復小工具

參考這篇文章, EV錄制文件損壞-修復方法, 我用 C# 寫了一個小程序. 倉庫: github.com/SlimeNull/EvRepair 下載: github.com/SlimeNull/EvRepair/Releases 鏡像: gitee.com/slimenull/EvRepair/releases 覺得還不錯的話, 點個星星 推薦使用的幾個理由: 內嵌 ffmpeg 和 recov…

Linux學習之初識Linux

目錄 一.Linux的發展歷史及概念 1.什么是Linux UNIX發展的歷史&#xff1a; Linux發展歷史&#xff1a; 2. 開源 商業化發行版本 二. 如何搭建Linux環境 Linux 環境的搭建方式主要有三種&#xff1a; 1. 直接安裝在物理機上 2. 使用虛擬機軟件 3. 使用云服務器 三. …

沒學C++,如何從C語言絲滑過度到python【python基礎萬字詳解】

大家好&#xff0c;我是紀寧。 文章將從C語言出發&#xff0c;深入介紹python的基礎知識&#xff0c;也包括很多python的新增知識點詳解。 文章目錄 1.python的輸入輸出&#xff0c;重新認識 hello world&#xff0c;重回那個激情燃燒的歲月1.1 輸出函數print的規則1.2 輸入函…

idea 使用debug 啟動項目的時候 出現 Method breakpoints may dramatically slow down debugging

問題: 1. 寫了一段時間的代碼&#xff0c;在debug啟動項目后提示&#xff1a;Method breakpoints may dramatically slow down debugging 但是正常啟動是可以的&#xff0c;debug不行。 2. idea 里面的項目&#xff0c;很多地方都有斷點&#xff0c;現在想要取消全部的斷點…

Redis——hash類型詳解

概述 Redis本身就是鍵值對結構&#xff0c;而Redis中的value可以是哈希類型&#xff0c;為了區分這兩個鍵值對&#xff0c;Redis中的鍵值對是key-value&#xff0c;而value中的哈希鍵值對則是field-value&#xff0c;其中value必須是字符串 下面介紹一些Redis的hash類型的常用…

Vue中拖動排序功能,引入SortableJs,前端拖動排序。

背景&#xff1a; 作為一名前端開發人員&#xff0c;在工作中難免會遇到拖拽功能&#xff0c;分享一個github上一個不錯的拖拽js庫&#xff0c;能滿足我們在項目開發中的需要&#xff0c;支持Vue和React&#xff0c;下面是我在vue后臺項目中中使用SortableJS的使用詳細流程&am…

html實現iphone同款開關

一、背景 想實現一個開關的按鈕&#xff0c;來觸發一些操作&#xff0c;網上找了總感覺看著別扭&#xff0c;忽然想到iphone的開關挺好&#xff0c;搞一個 二、代碼實現 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8&qu…

HDFS原理剖析

一、概述 HDFS是Hadoop的分布式文件系統&#xff08;Hadoop Distributed File System&#xff09;&#xff0c;實現大規模數據可靠的分布式讀寫。HDFS針對的使用場景是數據讀寫具有“一次寫&#xff0c;多次讀”的特征&#xff0c;而數據“寫”操作是順序寫&#xff0c;也就是…

STM32 LL庫+STM32CubeMX--LED呼吸燈

一、前期準備 硬件&#xff1a;STM32F103C8T6開發板調試工具&#xff1a;DAPLink(本次使用)或USB-TTL開發環境&#xff1a;STM32CubeMX、Keil、Vscode(可選)LED&#xff1a;使用PA0(TIM2_CH1)輸出PWM&#xff0c;LED的陰極接GND 二、使用定時器中斷產生PWM STM32F103C8T6在72…

scope,deep穿透的實際應用

一.父組件代碼 <template><div id"app"><h1 class"box"><pageName> </pageName></h1></div> </template><script> import pageName from "../src/components/pageName.vue"; export de…

Java中的==和equals():區別詳解

大家好&#xff01;在 Java 編程中&#xff0c;比較對象的相等性是一個常見的任務。然而&#xff0c;你是否知道在 Java 中有兩種不同的方法來比較對象的相等性&#xff1a; 操作符和 equals() 方法&#xff1f;本文將深入探討這兩種方法之間的區別以及何時使用它們。 操作符 …

arcgis pro3.0-3.0.1-3.0.2安裝教程大全及安裝包下載

一. 產品介紹&#xff1a; ArcGIS Pro 這一功能強大的單桌面 GIS 應用程序是一款功能豐富的軟件&#xff0c;采用 ArcGIS Pro 用戶社區提供的增強功能和創意進行開發。 ArcGIS Pro 支持 2D、3D 和 4D 模式下的數據可視化、高級分析和權威數據維護。 支持通過 Web GIS 在一系列 …

KafkaStream:基本使用

簡介&#xff1a; kafkaStream&#xff1a;提供了對存儲在kafka中的數據進行流式處理和分析的功能 特點&#xff1a; KafkasSream提供了一個非常簡單輕量的Library&#xff0c;它可以非常方便的嵌入到java程序中&#xff0c;也可以任何方式打包部署 入門案例&#xff1a; 1、…