决策树挑出好西瓜【人工智能】

2023-10-13 00:20

本文主要是介绍决策树挑出好西瓜【人工智能】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 一、决策树
  • 二、ID3决策树及实现
    • 1.西瓜样本
    • 2.决策树实现
  • 三、Sklearn决策树实现
    • 1.数据集
    • 2.导入库
    • 3.数据转换
    • 4.建立模型并训练
  • 四、参考文献

一、决策树

决策树(decision tree):是一种基本的分类与回归方法,此处主要讨论分类的决策树。

在分类问题中,表示基于特征对实例进行分类的过程,可以认为是if-then的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

决策树通常有三个步骤:特征选择、决策树的生成、决策树的修剪。

用决策树分类:从根节点开始,对实例的某一特征进行测试,根据测试结果将实例分配到其子节点,此时每个子节点对应着该特征的一个取值,如此递归的对实例进行测试并分配,直到到达叶节点,最后将实例分到叶节点的类中。

下图为决策树示意图,圆点——内部节点,方框——叶节点

这里写图片描述

  • 决策树学习的目标:根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。
  • 决策树学习的本质:从训练集中归纳出一组分类规则,或者说是由训练数据集估计条件概率模型。
  • 决策树学习的损失函数:正则化的极大似然函数
  • 决策树学习的测试:最小化损失函数
  • 决策树学习的目标:在损失函数的意义下,选择最优决策树的问题。
  • 决策树原理和问答猜测结果游戏相似,根据一系列数据,然后给出游戏的答案。

在这里插入图片描述

上图为一个决策树流程图,正方形代表判断模块,椭圆代表终止模块,表示已经得出结论,可以终止运行,左右箭头叫做分支。

决策树的优势在于数据形式非常容易理解。

二、ID3决策树及实现

1.西瓜样本

在这里插入图片描述

2.决策树实现

  • 计算初始信息熵
  • 计算信息增益
  • 按照信息增益的大小排序
  • 选取最大的信息增益的特征,以此特征作为划分节点
  • 该特征从特征列表删除,继续返回到上一步筛选,重复操作,知道特征列表 = 0

1.导入包

#导入模块
import pandas as pd
import numpy as np
from collections import Counter
from math import log2

2.数据的获取处理操作

#数据获取与处理
def getData(filePath):data = pd.read_excel(filePath)return datadef dataDeal(data):dataList = np.array(data).tolist()dataSet = [element[1:] for element in dataList]return dataSet

3.获取属性名称

#获取属性名称
def getLabels(data):labels = list(data.columns)[1:-1]return labels

4.获取类别标记

#获取属性名称
def getLabels(data):labels = list(data.columns)[1:-1]return labels
#获取类别标记
def targetClass(dataSet):classification = set([element[-1] for element in dataSet])return classification

5.叶节点标记

#将分支结点标记为叶结点,选择样本数最多的类作为类标记
def majorityRule(dataSet):mostKind = Counter([element[-1] for element in dataSet]).most_common(1)majorityKind = mostKind[0][0]return majorityKind

6.计算信息熵

#计算信息熵
def infoEntropy(dataSet):classColumnCnt = Counter([element[-1] for element in dataSet])Ent = 0for symbol in classColumnCnt:p_k = classColumnCnt[symbol]/len(dataSet)Ent = Ent-p_k*log2(p_k)return Ent

7.子数据集构建

#子数据集构建
def makeAttributeData(dataSet,value,iColumn):attributeData = []for element in dataSet:if element[iColumn]==value:row = element[:iColumn]row.extend(element[iColumn+1:])attributeData.append(row)return attributeData

8.计算信息增益

#计算信息增益
def infoGain(dataSet,iColumn):Ent = infoEntropy(dataSet)tempGain = 0.0attribute = set([element[iColumn] for element in dataSet])for value in attribute:attributeData = makeAttributeData(dataSet,value,iColumn)tempGain = tempGain+len(attributeData)/len(dataSet)*infoEntropy(attributeData)Gain = Ent-tempGainreturn Gain

9.选择最优属性

#选择最优属性                
def selectOptimalAttribute(dataSet,labels):bestGain = 0sequence = 0for iColumn in range(0,len(labels)):#不计最后的类别列Gain = infoGain(dataSet,iColumn)if Gain>bestGain:bestGain = Gainsequence = iColumnprint(labels[iColumn],Gain)return sequence

10.建立决策树

#建立决策树
def createTree(dataSet,labels):classification = targetClass(dataSet) #获取类别种类(集合去重)if len(classification) == 1:return list(classification)[0]if len(labels) == 1:return majorityRule(dataSet)#返回样本种类较多的类别sequence = selectOptimalAttribute(dataSet,labels)print(labels)optimalAttribute = labels[sequence]del(labels[sequence])myTree = {optimalAttribute:{}}attribute = set([element[sequence] for element in dataSet])for value in attribute:print(myTree)print(value)subLabels = labels[:]myTree[optimalAttribute][value] =  \createTree(makeAttributeData(dataSet,value,sequence),subLabels)return myTree
def main():filePath = 'E:\Ai\watermelon\watermalon.xls'data = getData(filePath)dataSet = dataDeal(data)labels = getLabels(data)myTree = createTree(dataSet,labels)return myTree

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

三、Sklearn决策树实现

1.数据集

在这里插入图片描述

2.导入库

导入相关库
import pandas as pd
import graphviz 
from sklearn.model_selection import train_test_split
from sklearn import treef = open('C:/Users/86199/Jupyter/watermalon.csv','r')
data = pd.read_csv(f)x = data[["色泽","根蒂","敲声","纹理","脐部","触感"]].copy()
y = data['好瓜'].copy()
print(data)

在这里插入图片描述

3.数据转换

#将特征值数值化
x = x.copy()
for i in ["色泽","根蒂","敲声","纹理","脐部","触感"]:for j in range(len(x)):if(x[i][j] == "青绿" or x[i][j] == "蜷缩" or data[i][j] == "浊响" \or x[i][j] == "清晰" or x[i][j] == "凹陷" or x[i][j] == "硬滑"):x[i][j] = 1elif(x[i][j] == "乌黑" or x[i][j] == "稍蜷" or data[i][j] == "沉闷" \or x[i][j] == "稍糊" or x[i][j] == "稍凹" or x[i][j] == "软粘"):x[i][j] = 2else:x[i][j] = 3y = y.copy()
for i in range(len(y)):if(y[i] == "是"):y[i] = int(1)else:y[i] = int(-1) 
#需要将数据x,y转化好格式,数据框dataframe,否则格式报错
x = pd.DataFrame(x).astype(int)
y = pd.DataFrame(y).astype(int)
print(x)
print(y)

在这里插入图片描述

4.建立模型并训练

x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.2)
print(x_train)

训练结果:

#决策树学习
clf = tree.DecisionTreeClassifier(criterion="entropy")                    #实例化 
clf = clf.fit(x_train, y_train) 
score = clf.score(x_test, y_test)
print(score)

在这里插入图片描述

四、参考文献

1.决策树挑出好西瓜(基于ID3、CART)

2.决策树挑出好西瓜

3.【机器学习】 - 决策树(西瓜数据集)

这篇关于决策树挑出好西瓜【人工智能】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199453

相关文章

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控制设备,用户可以轻松实现对灯光、空调、门锁等家电的控制,提升生活的便捷性和舒适性。本文将介绍如何构建一个基于人工智能的智能家居语音控制系统,包括环境准备

从希腊神话到好莱坞大片,人工智能的七大历史时期值得铭记

本文选自historyextra,机器之心编译出品,参与成员:Angulia、小樱、柒柒、孟婷 你可能听过「技术奇点」,即本世纪某个阶段将出现超级智能,那时,技术将会以人类难以想象的速度飞速发展。同样,黑洞也是一个奇点,在其上任何物理定律都不适用;因此,技术奇点也是超越未来理解范围的一点。 然而,在我们到达那个奇点之前(假设我们能到达),还存在另一个极大的不连续问题,我将它称之

[Day 73] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在健康管理中的應用實例 1. 引言 隨著健康管理需求的提升,人工智能(AI)在該領域的應用越來越普遍。AI可以幫助醫療機構提升效率、精準診斷疾病、個性化治療方案,以及進行健康數據分析,從而改善病患的健康狀況。這篇文章將探討AI如何應用於健康管理,並通過具體代碼示例說明其技術實現。 2. AI在健康管理中的主要應用場景 個性化健康建議:通過分析用戶的健康數據,如飲食、運動、睡眠等,AI可

决策树的实现原理与matlab代码

很久不写博客了,感觉很长一段时间只是一味的看书,疏不知一味地看书、写代码会导致自己的思考以及总结能力变得衰弱。所以,我决定还是继续写博客。废话不多说了,今天想主要记录数据挖掘中的决策树。希望能够将自己的理解写得通俗易懂。 决策树是一种对实例分类的树形结构,树中包含叶子节点与内部节点。内部节点主要是数据中的某一特性,叶子节点是根据数据分析后的最后结果。 先看一组数据: 这组数据的特性包含

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里,中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余,这一路走来,既有模仿学习的艰辛,也有创新突破的喜悦。然而,站在人工智能时代的门槛上,我们不禁要问:下一个十年,中国企业将如何在数字营销的浪潮中乘风破浪? 一、从跟风到精通:中国数字营销的进化史 回顾过去,中国企业在数字营销领域的发展可谓是一部"跟风学习"的编年史。从最初的搜索引擎营销(SEM),

通学人工智能一

AI 工具 1. 语言与内容创作工具 Heygen: 全球语言转换,创建逼真的数字人。系统主要是英文的,但可以通过微软小冰实现中文支持。 Predis.ai: 制作图文内容以及简单的视频。 通义听悟 & 讯飞语记: 帮助收集灵感并将其整理成文案。 2. 设计与图片生成 Pic Copilot: 自动生成电商网站。 Codia AI: 擅长将截图 1:1 复制成原图,并生成相关代码。 In

人工智能时代开启ai代写模式,让创作变得更加简单!

随着人工智能技术的飞速发展,我们的生活和工作方式正在发生翻天覆地的变化。在这个信息爆炸的时代,内容创作领域也迎来了新的变革——ai代写。这一模式的出现,让文章写作变得更加简单高效,为创作者们打开了新的可能。   一、ai代写的优势   提高写作效率   在传统写作过程中,创作者需要花费大量时间和精力进行资料搜集、构思和撰写。而ai代写能够在短时间内完成这些工作,大大提高了写作效率。创

机器学习(西瓜书)第 4 章决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别.注意这两种情形的处理实质不同:情形⑵是在利用当前结点的后验分布,而情形⑶则是把父结点的样本分布作为当前结点的先验分布. 基本算法 由算法4 .2可看出,决策树学习

[Day 72] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈在跨境支付中的應用 跨境支付一直是全球經濟中極具挑戰的領域。傳統的跨境支付系統通常需要數天時間來處理交易,涉及的中間機構多且手續費昂貴。然而,區塊鏈技術的出現為解決這些問題提供了一條嶄新的途徑。本文將探討區塊鏈在跨境支付中的應用,並通過代碼示例展示如何使用區塊鏈技術來優化跨境支付流程。 1. 區塊鏈在跨境支付中的優勢 區塊鏈技術具有去中心化、透明、高效和安全等特性,使其在跨境支付領域具