数据来源自《数据挖掘:方法与应用》
导入Rstudio中:
library(tidyverse)
df = readxl::read_xlsx("datas/student.xlsx")
* 将Age中的<=30、31-40,>40记作1、2、3
ID3算法:
离散型随机变量
𝑋
的概率分布为
𝑃(𝑋 = 𝑥
𝑖
) = 𝑝
𝑖
, 𝑖 = 1, ⋯ , 𝑛
, 则其熵
定义为:
calEntropy = function(Y) { # 计算因变量 Y 分组下的经验熵
p = table(Y) / length(Y)
- sum(p * log2(p))
}
属性A的信息熵定义为:
calCondEntropy = function(A, Y) {
p = table(A) / length(A)
H = tapply(Y, A, calEntropy)
sum(p * H)
}
# 计算各个特征对结果变量 Y 的信息熵
HDA = map_dbl(df[2:5], calCondEntropy, Y = df$buys_computer)
HDA
输出如下:
age income student credit_rating
0.6935361 0.9110634 0.7884505 0.8921589
课本给出的参考结果如下:
计算信息增益:
> gDA = HD - HDA
> gDA
age income student credit_rating
0.24674982 0.02922257 0.15183550 0.04812703
课本参考值:
参考资料: [1] 张敬信.2021.R机器学习课件
[2]徐华.数据挖掘:方法与应用.清华大学出版社.2014