当前位置: 首页 > wzjs >正文

做西装的网站小制作饮水机

做西装的网站,小制作饮水机,免费网站建设网站推广,网站的建设是什么分类决策树算法-python实现 数据集 具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构…

分类决策树算法-python实现

数据集

在这里插入图片描述
具体方法是:从根结点开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子节点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树。

递归构建决策树的两种停止条件:
(1) 当前结点包含的样本全属于同一类别,无需划分;
(2) 当前属性集为空, 或是所当前结点包含的样本集合为空, 无需划分,取当前最多的哪个类别当叶子节点的分类即可;

在这里插入图片描述
在这里插入图片描述

具体实现代码:
import numpy as np
import math
from typing import Dict
from collections import Counter
import copyclass DeciseTreeNode:def __init__(self, propety="", classify_result=None, labelIndex=-1):# 属性self.propety = propety# 分类结果self.classify_result = classify_result# labels索引self.labelIndex = labelIndex# 属性分类   我们通过字典存储每个属性的类别(分支)self.children: Dict[DeciseTreeNode] = {}class DeciseTree:def __init__(self):# 决策树根节点self.tree: DeciseTreeNode | None = None# 决策树输入数据标签self.labels = []# 列表去重def __filterRepeat(self, l: list):res = []for item in l:if res.count(item) == 0:res.append(item)return res# 计算香农熵def calcShannonEnt(self, train_x: list[list], train_y: list):value_dict, res, size = {}, 0, len(train_x)for item in train_y:if value_dict.get(item):value_dict[item] += 1else:value_dict[item] = 1for item in value_dict:res -= ((value_dict[item] / size) * math.log2(value_dict[item] / size))return res# 计算信息增益def calcMsgIncrease(self, train_x: list[list], train_y: list):H = self.calcShannonEnt(train_x, train_y)classify_values = self.__filterRepeat(train_y)  # [yes no]# 属性个数,分类个数property_nums, classify_nums = len(train_x[0]), len(set(train_y))  # 2 2max_msgIncrease_index, max_msgIncrease = 0, 0.0for i in range(property_nums):data = [item[i] for item in train_x]  # [1,1,1,0,0]set_data = self.__filterRepeat(data)  # [1,0]msgIncrease = 0.0for feature_value in set_data:  # 1count = data.count(feature_value)  # 1的次数res = 0.0for types in classify_values:times = 0for index, item in enumerate(data):if item == feature_value and train_y[index] == types: times += 1if times != 0:res -= ((times / count) * math.log2(times / count))msgIncrease += (count / len(data) * res)# print(f"属性{labels[i]}的信息增益是{H - msgIncrease}")if (H - msgIncrease) > max_msgIncrease:max_msgIncrease = H - msgIncreasemax_msgIncrease_index = ireturn max_msgIncrease_index"""函数说明:递归构建决策树Parameters:train_x - 训练数据集xtrain_y - 训练数据集ylabels - 分类属性标签Returns:Tree: DeciseTreeNode - 决策树"""def createDeciseTree(self, train_x: list[list], train_y: list, labels: list):if len(np.unique(train_y)) == 1:return DeciseTreeNode("", train_y[0])if len(train_x[0]) == 0 and len(train_y) != 0:result, result_times = Counter(train_y).most_common(1)[0]return DeciseTreeNode("", result)feature_index = self.calcMsgIncrease(train_x, train_y)label_index = self.labels.index(labels[feature_index])feature_values = np.unique([item[feature_index] for item in train_x])  # [1,0]node = DeciseTreeNode(labels[feature_index], labelIndex=label_index)for f_v in feature_values:sub_train_x, sub_train_y = [], []for k_x, k_y in [(x, y) for x, y in zip(train_x, train_y) if x[feature_index] == f_v]:sub_train_x.append([v for v_index, v in enumerate(k_x) if v_index != feature_index])sub_train_y.append(k_y)node.children[f_v] = self.createDeciseTree(sub_train_x, sub_train_y,[item for item_index, item in enumerate(labels) ifitem_index != feature_index])return nodedef fit(self, train_x: list[list], train_y: list, labels=[]):xLen = len(train_x[0])if len(labels) != xLen:self.labels = [item for item in range(xLen)]else:self.labels = labelslabels = copy.deepcopy(self.labels)self.tree = self.createDeciseTree(train_x,train_y,labels)def getResult(self,tree: DeciseTreeNode,x: list):if tree.classify_result is not None:return tree.classify_resultreturn self.getResult(tree.children[x[tree.labelIndex]],x)def predict(self,x: list):if len(x)!=len(self.labels):raise ValueError("输入数据列表长度不匹配!")return self.getResult(self.tree,x)#
# dataSet = [[1, 1, 'yes'],  # 数据集
#            [1, 1, 'yes'],
#            [1, 0, 'no'],
#            [0, 1, 'no'],
#            [0, 1, 'no']]
# labels = ['红不红', '圆不圆']
# X = [item[:2] for item in dataSet]
# Y = [item[2] for item in dataSet]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 = ['年龄', '有工作', '有自己的房子', '信贷情况']
X = [item[:4] for item in dataSet]
Y = [item[4] for item in dataSet]model = DeciseTree()
model.fit(train_x=X,train_y=Y,labels=labels)
print(model.predict([2,0,0,0]))
http://www.dtcms.com/wzjs/546200.html

相关文章:

  • ktv网站建设方案花都网页设计
  • 网站禁止ip访问福建福州最新情况
  • 企业网站建设遵循的原则网站运营建设的培训班
  • 网站建设的解决办法响应式模版移动优化
  • yahoo网站提交入口英语复试口语模板
  • 电子商务网站建设期末试卷答案天津网站建设方案服务
  • 做网站需要多少钱平邑仿《快乐麻花》网站源码
  • diywap手机微网站内容管理系统wordpress 占用资源
  • 浅议我国旅游景点网站的建设wordpress灯箱图片翻页
  • 什么类型客户做网站c 网站开发htnl
  • 做音乐相册的网站成都网页制作推广
  • 网站管理怎么做顺德网站建设服务平台
  • 萍乡招聘网站建设国内免费crm系统
  • 学网站建设多久能学会长沙市天心区建设局网站
  • 可以注册免费网站简约设计网站
  • 江门恒阳网站建设营口网站制作
  • 贵州省网站集约化建设网站建设设计案例网站logo实验报告
  • 银川建网站wordpress 设置中文
  • 网站开发需要掌握技术中国室内设计艺术千年回眸
  • 没固定ip怎么做网站网吧设计装饰公司
  • 企业网站名是什么意思快速搭建网站框架
  • 做任务给钱的网站一个域名怎么做网站
  • 做网站的可以注册个工作室吗wordpress评论字段
  • 响应式网站什么意思泉州网站优化排名
  • 网站空间 上传程序最高法律网站是做啥的
  • 网页上做ppt的网站wordpress被设置不录入
  • 东莞找网站设计培训体系
  • 网站关键词推广做自然排名珠海做企业网站多少钱
  • ysl免费网站建设西安网站建设熊掌
  • 做it的兼职网站有哪些学校电脑课做网站的软件