决策树中的属性评价指标

1、信息增益(information gain)

2、增益率(gain ratio)

的代码计算(C++)(python)

C++:

#include <iostream>
#include <cmath>using namespace std;long double except(int a, int b) {long double c = 0.0;c = 0.1 * a / b * 10;return c;
}int main()
{int n = 0, i = 0, j = 0, Dadd = 0.0, madd = 0, mm = 0, a = 0, Aadd = 0;cout << "在总表中有多少类? ";cin >> a;int* A = new int[a];for (i = 0; i < a; i++) {cout << "第" << i + 1 << "类有多少样本? ";cin >> A[i];Aadd += A[i];}cout << "共计样本:" << Aadd << endl;//划分前的信息熵:Ent(D)long double Ent = 0.0;for (i = 0; i < a; i++) {Ent -= except(A[i], Aadd) * log2(except(A[i], Aadd));}cout << "划分前的信息熵:Ent(D)=" << Ent << endl;cout << "使用属性后有多少数据子集? ";cin >> n;int* D = new int[n];int* m = new int[n];int** M;M = new int* [n];for (i = 0; i < n; i++) {cout << "第" << i + 1 << "数据子集有多少样本数量? ";cin >> D[i];Dadd += D[i];}cout << "共计:" << Dadd << "应为:" << Aadd << endl;if (Dadd != Aadd) {return 0;}long double* EntD = new long double[n];for (i = 0; i < n; i++) {EntD[i] = 0;madd = 0;cout << "在第" << i + 1 << "数据子集"/*<<D[i] */<< "中有多少样本种类? ";cin >> mm;m[i] = mm;M[i] = new int[mm];for (j = 0; j < mm; j++) {cout << "第" << i + 1 << "类中第" << j + 1 << "类有多少样本数量? ";cin >> M[i][j];madd += M[i][j];}cout << "共计:" << madd << "应为:" << D[i] << endl;if (madd != D[i]) {return 0;}for (j = 0; j < mm; j++) {EntD[i] -= except(M[i][j], madd) * log2(except(M[i][j], madd));}}cout << endl << endl;for (i = 0; i < n; i++) {cout << "划分后的信息熵:Ent(D" << i + 1 << ")=" << EntD[i] << endl;}//信息增益(information gain)long double Gain = 0.0;Gain = Ent;for (i = 0; i < n; i++) {Gain -= except(D[i], Aadd) * EntD[i];}cout << "信息增益:Gain(D,a)=" << Gain << endl;//信息增益率(information gain ratio)//固有值long double IV = 0.0;for (i = 0; i < n; i++) {IV -= except(D[i], Dadd) * log2(except(D[i], Dadd));}cout << "固有值:IV=" << IV << endl;long double Gain_ratio = Gain / IV;cout << "信息增益率:Gain_ratio(D,**)=" << Gain_ratio << endl;return 0;
}

对于彩色图片里的内容应如下输入:

python: 

import math
import xlrd
#use xlrd=1.2xlsx=r'C:\3.xlsx'#文件绝对路径
biao = xlrd.open_workbook(filename=xlsx)
A = biao.sheet_by_name("Sheet1")#确保内容放在Sheet1中
H=A.nrows
L=A.ncols
data=[]
for i in range(H):Hdata=[]for j in range(L):Hdata.append(A.cell(i,j).value)if(i!=0):data.append(Hdata)#第一行不读取print(Hdata)
#内容读取完毕#计算信息熵Ent(D)
YES0=0
for i in range(H-1):if(data[i][3]=='是'):YES0+=1
#总体样本数量
D=H-1
#p(YES)
p1=YES0/D
#p(NO)
p0=1-p1
#信息熵Ent(D)
EntD=-p1*math.log(p1, 2)-p0*math.log(p0, 2)
print('信息熵Ent(D)=%f'%EntD)
#a=1敲声 a=2色泽
a=2
if(a==1):print('计算敲声')
elif(a==2):print('计算色泽')seze=[]
sezenum=[]for i in range(D):if(data[i][a] in seze):for j in range(len(seze)):if(data[i][a] == seze[j]):sezenum[j]+=1else:seze.append(data[i][a])sezenum.append(1)seze_y_num=[]
seze_n_num=[]
for i in range(len(seze)):seze_y_num.append(0)seze_n_num.append(0)
for i in range(D):for j in range(len(seze)):if(data[i][a] == seze[j]):if(data[i][3]=='是'):seze_y_num[j]+=1elif(data[i][3]=='否'):seze_n_num[j]+=1#Ent(Di)
Ent=[]
for i in range(len(seze)):if(seze_y_num[i]==0):Ent.append(0)elif(seze_n_num[i]==0):Ent.append(0)else:Ent.append(-(seze_y_num[i]/sezenum[i])*math.log((seze_y_num[i]/sezenum[i]), 2)-(seze_n_num[i]/sezenum[i])*math.log((seze_n_num[i]/sezenum[i]), 2))
for i in range(len(Ent)):print('D%d=%.15f'%((i+1) ,Ent[i]))
#Gain信息增益
Gain=EntD
for i in range(len(Ent)):Gain-=Ent[i]*(sezenum[i]/D)
print('Gain(...)=%.15f'%Gain)
#固有值IV
IV=0
for i in range(len(seze)):if(sezenum[i]==0):IV=IVelse:IV-=(sezenum[i]/D)*math.log((sezenum[i]/D), 2)
print('IV=%.15f'%IV)
#Gain_ratio
Gain_ratio=Gain/IV
print('Gain_ratio(...)=%.15f'%Gain_ratio)

其中C:\3.xlsx为文件路径,路径有中文名在前面加r

xlsx文件内容:

更改a的值,可以计算色泽或敲声

信息熵(information entropy)

给定数据集D,其中第 k 类样本所占的比例为p

信息熵:

  信息熵总是>0

信息增益(information gain)

信息增益用于度量给定属性(a)对于降低数据集类别不确定程度的贡献。

其中Ent(D)为原信息熵,Ent(Dv)为使用度量给定属性(a)后每个部分的信息熵,

|Dv|/|D|为该部分占总体的比例。

信息增益率(information gain ratio)

在ID3算法的改进算法C4.5中用信息增益率代替信息增益。

IV(a)称为属性a的“固有值”(intrinsic value), 固有值和属性取值个数V呈“正相关”关系。

增益和增益率,计算代码相关推荐

  1. 用python写一个迁徙率计算代码

    我给你一个简单的python代码来计算迁徙率:# 迁徙率计算 总人口人数 population = 1000 年迁徙总人口 migrated_population = 200# 计算迁徙率 migra ...

  2. 反向放大器为何要使用同相增益(也称作噪声增益),来计算带宽

    模拟工程师电路设计指导手册:放大器pdf 的Page 9中,有如下设计 第一个疑问? 明明是反向放大器为何要使用同相增益(也称作噪声增益),来计算带宽,如下面第四步? 反相放大器的控制框图和电路结构如 ...

  3. 【PID控制】几种调参方法的比较 (含计算代码)

    ⭐⭐几种整定方法总结(含参数计算代码)⭐⭐ PID 参数整定方法 临界比例度法 (Ziegle-Nichols算法 齐格勒尼科尔斯整定方法) 适用条件 主要原理 PID控制器类型的选择 开环阶跃响应曲 ...

  4. PCB 线路铜皮面积(残铜率)计算的实现方法

    一个多月没更新博客园了,这里继续分享关于PCB工程相关一些知识,做过PCB工程都知道用使用genesis或incam是可以非常方便的计算得到铜皮面积这个参数[下图],但实际这个软件是通过什么算法计算出 ...

  5. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  6. [世界杯]根据赔率计算各种组合概率与赔率

    目录 一.背景 二.数据输入 2.1 赔率示意图 2.2 字典保存数据 三.数据处理 3.1 计算各种组合可能性 3.2 修正概率 四.输出结果 五.代码 一.背景 本文以世界杯体彩"混合过 ...

  7. R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间

    R语言统计代码运行耗时实战:计算代码运行时间.使用proc.time函数计算代码运行时间 目录

  8. ITK:计算代码点之间的时间

    ITK:计算代码点之间的时间 内容提要 输出结果 C++实现代码 内容提要 计算代码点之间的时间.Report()方法ITK可用4.9.0或更高版本. 输出结果 .. code-block:: non ...

  9. matlab软件imag函数_「复变函数与积分变换」基本计算代码

    使用了Matlab代码,化简平时遇到的计算问题,也可以用于验算结果 来自211工科专业2学分复变函数与积分变换课程 求复角主值 sym(angle(待求复数))%公式 sym(angle(1+sqrt ...

  10. PMP-商业论证中的财务测量指标-动态投资回收期、净现值、内部收益率、效益成本率计算

    文章目录 前言 PMP-商业论证中的财务测量指标-动态投资回收期.净现值.内部收益率.效益成本率计算 1. 术语定义 2. 净现值(NPV) 2.1 利息与折现 2.2. 利息的计算方式 3. IRR ...

最新文章

  1. jstat命令查看tomcat进程提示进程没找到(PID not found
  2. opencv检测矩形
  3. 网站请求过程中的代号及意义
  4. R语言:cbind()和rbind()
  5. SAP按单生产和重复制造
  6. Struts2中的链接标签
  7. scala函数的定义语法说明
  8. 前端性能优化之防抖-debounce
  9. Error creating bean with name 'adminUserController': Injection of autowired dependencies failed;
  10. JDK1.5 与 JDK1.6的新特性
  11. JS进阶之---函数,立即执行函数
  12. C语言 文件读写 fputs 函数 - C语言零基础入门教程
  13. 更新无限无线连接更新服务器,02-H3C WBC560多业务无线控制器软件升级操作指导...
  14. AYUI第12个作品-英雄联盟-魔法少女的星光水晶2.0-WPF版本
  15. js文件上传不用点击上传按钮自动上传
  16. 搜狐邮箱怎么开启pop3服务器,POP3是什么?怎样开通POP3?
  17. java日期函数_java常用日期函数总结
  18. MyBatis条件查询
  19. 线下 Meetup 预告|从原理到实战,详解 Database Plus 的互联网最佳实践
  20. pdf怎么删除其中一页与添加新页面

热门文章

  1. HW OD 机试攻略
  2. 固定资产调整对资产折旧的影响
  3. 「科技农人」,可能是未来的当红职业
  4. 日本泡沫经济破灭20年祭
  5. 64位操作系统和32位操作系统有区别吗
  6. NVivo最新v1.0重磅来袭!不一样的用户界面,不一样的体验!
  7. 水星mr807虚拟服务器,轻松实现多人上网 水星 MR807路由器
  8. JVM(一)JVM虚拟机内存结构 和 JAVA内存模型(JMM)
  9. 【成绩统计】Excel计算年级学校排名和班级排名,并统计各班各科前1050名学生人数
  10. 广东省交通行业十四五项目前景与建设规模分析报告2022版