"""
文件说明:决策树
"""
from math import log
"""
函数说明:创建测试数据集
Parameters:
null
Returns:
dataSet - 数据集
labels - 分类属性
Author:
ZhengYuXiao
Modify:
2019-03-04
"""
def createDataSet():
dataSet = [[0, 0, 0, 0, 'no'], # 数据集
[0, 0, 0, 1, 'no'],
[0, 1, 0, 1, 'yes'],
[0, 1, 1, 0, 'yes'],
[0, 0, 0, 0, 'no'],
[1, 0, 0, 0, 'no'],
[1, 0, 0, 1, 'no'],
[1, 1, 1, 1, 'yes'],
[1, 0, 1, 2, 'yes'],
[1, 0, 1, 2, 'yes'],
[2, 0, 1, 2, 'yes'],
[2, 0, 1, 1, 'yes'],
[2, 1, 0, 1, 'yes'],
[2, 1, 0, 2, 'yes'],
[2, 0, 0, 0, 'no']]
labels = ['不放贷', '放贷'] # 分类属性
return dataSet, labels # 返回数据集和分类属性
"""
函数说明:计算给定数据集的经验熵
Paremeters:
dataSet - 数据集
Returns:
shannonEnt - 经验熵 H(D)
Author:
ZhengYuXiao
Modofy:
2019-03-04
"""
def calcShannonEnt(dataSet):
# 训练集数据条数
numEntires = len(dataSet)
# 记录训练集中每个标签出现次数的字典
labelCounts = {}
for featVec in dataSet:
currentLabel = featVec[-1]
labelCounts[currentLabel] = labelCounts.get(currentLabel, 0) + 1
# 经验熵
shannonEnt = 0.0
# k
# H(D) = -∑[P(Xi)log2P(Xi)] P(Xi) = |Ck|/|D|
# i=1
# |Ck|:训练集中标签为Ck的数据的条数
# |D|:训练集数据总条数
for key in labelCounts:
prob = float(labelCounts[key]) / numEntires
shannonEnt -= prob * log(prob, 2)
return shannonEnt
"""
函数说明:按照给定特征以及指定的特征值划分数据集(例:性别 男)
Parameters:
dataSet - 待划分的数据集
axis - 划分数据集的特征的列数[0,1,2,3....]
value - 需要返回的特征的值
Returns:
returnDataSet - 指定特征的值等于指定特征值的数据的集合(例:性别为男的数据的集合)
Author:
ZhengYuXiao
Modify:
2019-03-05
"""
def splitDataSet(dataSet, axis, value):
# 存储返回数据的列表
returnDataSet = []
# 遍历训练集
for featVec in dataSet:
# 如果该条数据中用来划分训练集的特征的值等于指定值
# 则把这个特征值从这条数据中去除,并把新数据储存
if featVec[axis] == value:
# list[ start : end ] :Python列表的切片操作
# 返回列表从start位置开始,到end位置前的元素组成的列表
# 例:print([1,3,5,7,9][1:3])
# 输出:[3,5]
#
# list.extend( list2 ) :把列表list2中的元素添加到列表list的尾部
# 例子:List1 = [0, 1, 2, 3, 4, 5, 6][:2]
# List1.extend([0, 1, 2, 3, 4, 5, 6][3:])
# print(List1)
# 输出:[0, 1, 3, 4, 5, 6]
reducedFeatVec = featVec[:axis]
reducedFeatVec.extend(featVec[axis + 1:])
returnDataSet.append(reducedFeatVec)
return returnDataSet
"""
函数说明:选择划分训练集的最优特征
Parameters:
dataSet - 数据集
Returns:
bestFeature - 使信息增益最大的特征的索引值
Author:
ZhengYuXiao
Modify:
2019-03-05
"""
def chooseBestFeatureToSplit(dataSet):
# 特征数量
numFeatures = len(dataSet[0]) - 1
# 训练集的香农熵 H(D)
baseEntropy = calcShannonEnt(dataSet)
# 信息增益
bestInfoGain = 0.0
# 最优特征(使训练集信息增益最大的特征)的索引值
bestFeature = -1
#
# 信息增益 = 集合的熵 - 特征X给定条件下集合的熵
# g(D,X) = H(D) - H(D|X)
#
# 计算每一个特征对集合产生的信息增益
for i in range(numFeatures):
# 把每一特征整列取出:
# 性别 年级 及格 性别 年龄 及格
# | 男 1 Y | |男| |1| |Y|
# | 女 4 Y | -> |女| |4| |Y|
# | 女 3 N | |女| |3| |N|
# | 男 1 Y | |男| |1| |Y|
featList = [example[i] for example in dataSet]
# 创建集合,集合中的元素不能重复,set函数会自动去除重复的数据,
# 所以集合存储——某一特征的所有取值
uniqueVals = set(featList)
# 条件熵 H(D|X)
# n
# = ∑[ |Di|/|D| * H(Di) ]
# i=1
#
# n K
# = - ∑[ |Di|/|D| * ∑[ |Dik|/|Di|] * Log2(|Dik|/|Di|) ]
# i=1 k=1
#
newEntropy = 0.0
for value in uniqueVals:
# 训练集被某一特征的某一特征值划分的子集
# 例:
# 年级 及格
# | 1 Y |
# | 1 Y |
subDataSet = splitDataSet(dataSet, i, value)
# |Di|/|D|
prob = len(subDataSet) / float(len(dataSet))
# 根据公式计算条件经验熵 H(D|X):
# n
# ∑[ |Di|/|D| * H(Di) ]
# i=1
newEntropy += prob * calcShannonEnt(subDataSet)
# 计算信息增益:
# 信息增益 = 集合的熵 - 特征X给定条件下集合的熵
# g(D,X) = H(D) - H(D|X)
infoGain = baseEntropy - newEntropy
print("第", i, "个特征的信息增益为:", infoGain)
if (infoGain > bestInfoGain):
bestInfoGain = infoGain
bestFeature = i
print("信息增益最高的是第", bestFeature, "个特征")
return bestFeature
if __name__ == '__main__':
dataSet, features = createDataSet()
print("训练集=\n", dataSet)
print("经验熵=\n", calcShannonEnt(dataSet))
chooseBestFeatureToSplit(dataSet)
文章浏览阅读461次。本次教程用宇宙模拟器space engine 0.980版本教大家如何创建自定义太阳系系统,包括创建恒星,行星,卫星,小行星,彗星等天体,最后教如何制作插件,打包压缩成pak文件。把链接复制到浏览器地址栏上,按回车键就可以看了关于宇宙模拟器Space Engine的天体(星球,星系,星云,星团等)脚本参数,如何创建天体(星球,星系,星云,星团等)的脚本,请看这些教程space engine打包创建..._space engine
文章浏览阅读10w+次,点赞5次,收藏17次。更新了Chrome,发现网页全部打不开了。都显示:“喔唷 崩溃啦”。点击任何按钮,例如,设置,选项,历史记录等,也“喔唷 崩溃啦” 卸载重装也无效解决方案找到 路径C:\Windows\System32\drivers\bd0001.sys删除(没有强制删除工具重命名也行,随便改个名字)重启电脑chrome就正常了原因可能是注册列表被一些卫士类优化工具或杀毒..._为什么googlechrome设置也打不开
文章浏览阅读1.5k次。安装thrift,我是mac机器,mac下使用homebrew安装thrift很方便,具体看另一篇博客。首先的定义接口文件: service HelloWorldService { string sayHello(1:string username)}因为thrift是支持跨平台的,所以这里接口的定义,thrift定义了自己的规范。 然后使用thrift的工具..._thrift调用例子 java
文章浏览阅读261次。我不确定术语“通配符”是否可以解释我的观点,但有时在一些现成的脚本中,我们可以调用一个非定义的函数,如find_by_age(23),其中age可以是映射到数据库表记录的任何其他内容.所以我可以调用find_by_name,find_by_email,find_by_id等等.那么我们怎么能以程序或面向对象的方式做这样的事情呢?解决方法:你正在寻找的术语是魔法.基本上是这样的:class Foo ..._php路径通配符
文章浏览阅读904次。ANR-WatchDog-ohos一个简单的监测程序,可检测到鸿蒙系统的 ANR(Application Not Response-应用程序无响应)错误并引发有意义的异常项目名称:ANR-WatchDog-ohos所属系列:鸿蒙的第三方组件适配移植功能:可检测到鸿蒙系统的ANR错误并引发有意义的异常项目移植状态:全部完成调用差异:无开发版本:sdk5,DevEco Studio2.1 beta3项..._com.github.anrwatchdog.anrerror: application not responding for at least 400
文章浏览阅读441次。赵辉《Visual+C++_MATLAB图像处理与识别实用案例精选》程序代码说明P0201:MATLAB赋值P0202:MATLAB中的for循环P0203:MATLAB中的for循环和if条件P0205:MATLAB图像处理的基本操作P0206:MATLAB高级图像处理操作P0207:根据RGB图像创建一幅灰度图像P0208:二值图像的取反操作P0209:用imshow函数显示图像P0210:在..._matlab命令行检测网络
文章浏览阅读3.1k次。经常会有机友提问,乐视MAX(乐视 X900+)手机支不支持一键刷机?由于奇兔刷机已经支持多达上千款安卓手机一键刷机,所以有时候小编也无法及时回答上来,最简单的办法就是把手机连上奇兔刷机,即可看到手机是否支持一键刷机。一键刷机并非每次都能一次成功,如果一次不成功可以多试几次,刷机失败不会对您的手机造成任何影响。奇兔市场小编给大家分享下乐视MAX(乐视 X900+)一键刷机教程,虽然使用方法很简单,..._乐视x900刷miui10
文章浏览阅读2.5k次,点赞7次,收藏49次。文章目录1.创建数据库与表2. 创建java项目并且导入jar包(buildPath)2.1 创建数据库连接文件 DBhelper.java2.2 创建vo (stu.java), 与数据库一致2.3 创建service (StuService.java)3. 编写功能类 FromDbToExcel.java注意事项:4. 编写功能类 FromExcelToDb.java注意事项5. 效果展示1.创建数据库与表2. 创建java项目并且导入jar包(buildPath)2.1 创建数据库连接文件_mysql导出多张表结构 excel java代码
文章浏览阅读352次。首先介绍阻塞与非阻塞:阻塞是个什么概念呢?比如某个时候你在等快递,但是你不知道快递什么时候过来,而且你没有别的事可以干(或者说接下来的事要等快递来了才能做);那么你可以去睡觉了,因为你知道快递把货送来时一定会给你打个电话(假定一定能叫醒你)。非阻塞忙轮询。接着上面等快递的例子,如果用忙轮询的方法,那么你需要知道快递员的手机号,然后每分钟给他挂个电话:“你到了没?”很明显一般人不会用第二..._epoll kqueue
文章浏览阅读509次。关于西门子PLC modbus通讯与运动控制的应用应用的设备昆仑通态1570gi(15寸)西门子plc smart-st20昆仑通态参数的设置与组态的重点组态软件选用型号1570gi的屏幕设置通讯地址 192.168.190报警参数的配置脚本的编写关于组态过程中遇到的问题由于这是我参加工作自己独立的完成的,这个期间真的是太坎坷了,我来说说我遇到的问题吧脚本应用if和if的嵌套IF THEN IF THEN ENDIFENDIF由于画面中关联着报_plc作为从站 modbus协议和运动控制命令冲突
文章浏览阅读972次。先用一台电脑连接IPSAN管理端口进去配置阵列配置完成后把IPSAN的ISCSI接口连接到服务器网口,man iscsiadm 查看可以查看是否安装了 iscsiadmyum -y install*iscsi* 命令安装iscsiadm然后在服务器上输入:iscsiadm -m discovery -t sendtargets -p 169.254.194.201:3260 (169.254.19..._centos实现ipsan卸载
文章浏览阅读698次。点击上方 "程序员小乐"关注,星标或置顶一起成长后台回复“大礼包”有惊喜礼包!关注订阅号「程序员小乐」,收看更多精彩内容每日英文Tough people aren..._cannot use range access on index 'env_index' due to type or collation conver