第二个自己亲手敲出来的机器学习算法~

任务描述:

数据集来自:《机器学习实战》 手写数字识别任务 决策树算法

思路:

(1)计算信息增益,得到每一步的最好特征。

(2)树结构。

数据集及代码点击打开链接

代码如下:

'''数据集来自:《机器学习实战》 手写数字识别任务  决策树算法''''''使用决策树预测隐形眼镜类型
数据集:隐形眼镜数据集,来自UCI数据库
隐形眼镜类型包括:硬材质、软材质、不适合佩戴隐形眼镜'''import os
from numpy import  *# 查看一下数据集
fr = open('lenses.txt')
dataSet = fr.readlines()
# print(dataSet)
# 会发现TXT的数据集读出来以后是不规范的'''处理数据集'''
trainSet = [i.strip().split('\t') for i in dataSet]
# print(dataSet,dataLabel)'''四个特征'''
lensesFeatures = ['age','prescript','astigmatic','tearRate']
# print('查看数据集')
# for i in range(len(trainSet)):
#     print(trainSet[i])# 数据集含标签
'''编写函数:计算信息增益'''
def bestFeature(dataSet):HCXj = 0HCXjk = 0gain = []# 信息增益 = 类别增益 - 特征取i时类别的增益# ①计算类别增益 entropyClassnumFeatures = len(dataSet[0])-1currentLabel = [a[-1] for a in dataSet]labelCounts = dict(zip(*unique(currentLabel, return_counts=True)))entropyClass = 0for i in labelCounts:entropyClass -= labelCounts[i] / len(currentLabel) * log(labelCounts[i] / len(currentLabel))# ②计算特征取i时类别的增益for i in range(numFeatures):currentFeatColumn = [a[i] for a in dataSet]cueerntFeatureCounts = dict(zip(*unique(currentFeatColumn, return_counts=True)))# 计算属性取i特征值取j时类别的增益for j in cueerntFeatureCounts:# 取得当前特征值j的索引currentFeatIndex = [idx for idx, e in enumerate(currentFeatColumn) if e == j]for k in labelCounts:# 获得当前特征值j对应的标签的索引即数量Sjk = [b for b in currentFeatIndex if currentLabel[b] == k]p = len(Sjk) / currentFeatColumn.count(j)# 注意log()的参数不能为0,但概率p是可能为0的if p == 0:HCXjk = 0else:HCXjk -= p*log(p)pjk = currentFeatColumn.count(j) / len(currentFeatColumn)HCXj -= pjk * HCXjk# 计算特征取i时的信息增益gain.append(entropyClass - HCXj)# 返回信息增益最大的特征,物理意义是数据集的列索引bestFeature = gain.index(max(gain))return  bestFeature'''编写函数:创建树'''
# 这个世界是避不开数据结构的
# 创建树是一个递归的过程。递归结束的两个条件:①所有类标签相同,直接返回类标签。②当所有特征用完的时候,仍不能把数据集划成仅包含唯一类别的分组,此时需要返回多数表决结果。
# 采用字典类型存储树的信息def createTree(dataSet,featuresNode):# 递归终止条件classLabel = [x[-1] for x in dataSet]# ①所有类标签相同,直接返回类标签。if classLabel.count(classLabel[0]) == len(classLabel):return classLabel[0]# ②已用完所有特征,数据集的划分的类别仍不唯一,此时返回多数表决结果。if (len(dataSet[0]) == 1):temp = dict(zip(*unique(classLabel, return_counts=True)))return max(temp, key=temp.get)# 开始构建树。采用字典结构。bestFeatIndex = bestFeature(dataSet)bestFeat = featuresNode[bestFeatIndex]myTree = {bestFeat:{}}#准备递归调用createTree()的参数 subDataSet,subfeaturesNode# 取到最好特征下其中某个特征值划分下的子数据集、剩余的特征bestFeatColumn = [x[bestFeatIndex] for x in dataSet]bestFeatCounts = dict(zip(*unique(bestFeatColumn, return_counts=True)))for featValue in bestFeatCounts:# 在最好特征的值featValue下,划分新的子数据集,迭代调用createTree()subfeaturesNode = [feat for feat in featuresNode if feat != bestFeat]currentFeatValueIndex = [idx for idx, e in enumerate(bestFeatColumn) if e == featValue]subDataSet = []for i in currentFeatValueIndex:subDataSet.append([e for idx, e in enumerate(dataSet[i]) if idx != bestFeatIndex])myTree[bestFeat][featValue] = createTree(subDataSet,subfeaturesNode)return myTreelensesTree = createTree(trainSet,lensesFeatures)
print(lensesTree)

编程实践--决策树分类算法--隐形眼镜材质分类相关推荐

  1. 时间序列分类算法_时间序列分类算法简介

    时间序列分类算法 A common task for time series machine learning is classification. Given a set of time serie ...

  2. Python编程实现用KNN算法对红酒分类功能

    一.任务要求 导入红酒数据集(load_wine),编写Python代码,完成以下任务: 1.实现计算平均酒精含量的功能: 2.实现对数据的标准化: 3.使用kNN算法实现红酒分类功能 二.代码实现 ...

  3. 桶分类 算法_桶分类算法

    桶分类 算法 桶分类 (Bucket Sort) Bucket sort is a sorting technique in which array is partitioned into the b ...

  4. java 鸢尾花分类算法_鸢尾花分类算法实现 java

    使用的贝叶斯分类算法实现的,编程语言为java.是我本学期修的数据库与数据挖掘的课程的期末课程作业,算法本身不难,思路理清楚了很简单. 先看看鸢尾花(Iris)数据集(下图为数据集的部分截图),鸢尾花 ...

  5. Scikit-learn_分类算法_支持向量机分类

    一.描述 支持向量机的基本原理是找到一个将所有数据样本分隔成两部分的超平面,使所有样本到这个超平面的累计距离最短. 超平面是指n维线性空间中维度为n-1的子空间.例如,在二维平面中,一维的直线可以将二 ...

  6. 神经网络属于分类算法吗,神经网络分类特点区别

    神经网络算法的三大类分别是? 神经网络算法的三大类分别是:1.前馈神经网络:这是实际应用中最常见的神经网络类型.第一层是输入,最后一层是输出.如果有多个隐藏层,我们称之为"深度"神 ...

  7. 逻辑回归二分类算法python_多分类逻辑回归 (Multinomial Logistic Regression)

    前言 分类从结果的数量上可以简单的划分为: 二分类(Binary Classification) 多分类(Multinomial Classification). 其中二分类是最常见且使用最多的分类场 ...

  8. 机器学习分类算法_机器学习分类算法

    人们曾在自身的神经元得到启发,将机器学习中给出的特征输入与权重之积作为输出与阈值作比较,得到0或者1的输出. 这就是我们感知器的实现原理 感知器在实现过程中的步骤如下: ①将权值初始化称为一个很小的向 ...

  9. 【编程实践】Raft 算法的原理 go代码实例

    文章目录 Raft 算法的原理 & go代码实例 Raft 算法的原理 使用 Go 语言实现的简单 Raft 算法示例 Raft 算法的原理 & go代码实例 Raft 算法的原理 R ...

最新文章

  1. C++中的explicitkeyword
  2. NeHe教程Qt实现——lesson15
  3. java实现选项卡定时轮播_原生js面向对象编程-选项卡(自动轮播)
  4. 前端学习(3042):vue+element今日头条管理-用户退出
  5. 用于快速排查Java的CPU性能问题(top us值过高)
  6. 100+诡异的数据集,20万Eclipse Bug、死囚遗言等
  7. Shuffle Cards(Rope大法)将一段区间的数字整体搬动
  8. Q117:PBRT-V3反射模型(Reflection Models)笔记
  9. 09. 利用destructors避免泄漏资源
  10. MySql数据库的安装,mysql-5.5.28-winx64.msi
  11. UDS协议(史上最全)
  12. win7旗舰版上装VS2010错误(提示:miicrosoft 应用程序报告[安装失败])
  13. python判断闰年_python如何判断闰年
  14. 去除黄褐斑的方法,姬净美怎么样
  15. 编辑视频贴纸软件_3招教你搞定怎么在视频上加贴纸,剪片必备的手机App!
  16. 计算机弹出虚拟U盘,怎么设置vmware虚拟机U盘启动
  17. 「爬虫教程」吐血整理,最详细的爬虫入门教程
  18. 电商红包雨是如何实现的?拿去面试用(典型高并发)
  19. bucket是什么意思?有什么作用?
  20. 国产FPGA市场分析 该如何破局

热门文章

  1. 建立桌面文件管理格子_win10如何创建桌面格子_win10怎么建立桌面文件管理格子...
  2. python 最速曲线
  3. MarkDown 的常用高阶教程
  4. 语雀批量导出MarkDown文件
  5. ios html转换成网页,ios App加载本地HTML网页,点击网页链接跳转到app页面的方法
  6. html都有哪些事件,HTML有哪些事件属性?
  7. 如何使用KEIL5快速建立FreeRTOS项目(附建立成功的源代码以及问题解析)
  8. PING用一生诠释了TCP/IP(4)------二三层转发为PING劈荆斩棘
  9. java tapestry_Tapestry简介- 转载 (转自java-cn)
  10. 【计算机网络】第三部分 数据链路层(17) 广域网SONET/SDH