机器学习:信息熵决策树预测泰坦尼克数据

简介: 机器学习:信息熵决策树预测泰坦尼克数据

决策树

思想:程序设计中分支结构if-then结构

信息熵

信息的单位:比特

image.png

信息和消除不确定性相联系

信息熵越大,不确定性越大,获取信息付出的代价越大

信息熵公式

image.png

信息增益

决策树的划分依据之一

信息增益:

得知一个特征A的信息而使得集合D的信息不确定性减少的程度

image.png

信息熵计算

image.png

条件熵计算

image.png

Ck 表示属于某类别的样本数

计算举例

1、数据

ID  年龄  房子   类别
1   青年   无     否
2   青年   无     否
3   青年   有     是
4   青年   无     否
5   中年   有     否
6   中年   有     否
7   中年   有     是
8   老年   无     是
9   老年   有     否
10  老年   无     否

2、计算

# 经验熵:
H(D) = -(4/10log(4/10) + 6/10log(6/10)) = 0.97
# 年龄条件熵:
H(D|年龄) = 1/3H(青年) +  1/3H(中年) +  1/3H(老年)
H(青年) = -(1/4log(1/4) + 3/4log(3/4)) = 0.81
H(中年) = -(1/3log(1/3) + 2/3log(2/3)) = 0.92
H(老年) = -(2/3log(2/3) + 1/3log(1/3)) = 0.92
H(D|年龄) = 1/3 * 0.81 + 1/3 * 0.92 + 1/3 * 0.92 = 0.88
# 年龄信息增益:
g(D, 年龄) = H(D) - H(D|年龄) = 0.97 - 0.88 = 0.09
# 房子条件熵
H(D|房子) = 1/2H(有) +  1/2H(无)
H(有) = -(2/5log(2/5) + 3/5log(3/5)) = 0.97
H(无) = -(1/5log(1/5) + 4/5log(4/5)) = 0.72
H(D|房子) = 1/2 * 0.97 + 1/2 * 0.72 = 0.84
# 房子信息增益
g(D, 房子) = H(D) - H(D|房子) = 0.97 - 0.84 = 0.13
# 信息增益比较
g(D, 房子) > g(D, 年龄)

常见决策树使用的算法

ID3 信息增益最大准则

C4.5 信息增益比最大准则

CART

回归树:平方误差最小

分类树:基尼系数最小的准侧(划分更加仔细) sklean中默认划分原则

graphviz

决策树结构保存查看

1、安装graphviz

brew install graphviz

dot 转换为 png

$ dot -Tpng tree.doc -o tree.png

2、python接口

pip install graphviz

文档:https://graphviz.readthedocs.io/en/stable/index.html

代码示例

泰坦尼克数据集下载

https://www.kaggle.com/c/titanic/data

import pandas as pd
from graphviz import render
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_graphviz
# 读取数据
train = pd.read_csv("source/train.csv")
# 选取数据集和目标集
data = train[["Pclass", "Sex", "Age"]]
target = train["Survived"]
# 关闭警告
pd.set_option('mode.chained_assignment', None)
# 缺失值处理
data["Age"].fillna(data["Age"].mean(), inplace=True)
# 处理分类数据 数值替换为文本
data["Pclass"].replace(1, "low", inplace=True)
data["Pclass"].replace(2, "middle", inplace=True)
data["Pclass"].replace(3, "high", inplace=True)
# 拆分数据集成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    data, target, test_size=0.25)
# 特征工程,类别-> One-Hot编码
dct = DictVectorizer(sparse=False)
X_train = dct.fit_transform(X_train.to_dict(orient="records"))
X_test = dct.transform(X_test.to_dict(orient="records"))
print(dct.get_feature_names())
# ['Age', 'Pclass=high', 'Pclass=low', 'Pclass=middle', 'Sex=female', 'Sex=male']
# 决策树进行预测
decision = DecisionTreeClassifier(max_depth=5)
decision.fit(X_train, y_train)
print(decision.score(X_test, y_test))
# 0.80
# 导出决策树
filename = "tree.dot"
feature_names = ['年龄', '高层', '中层', '底层', '女性', '男性']
export_graphviz(decision, filename, feature_names=feature_names)
# 渲染保存决策树
render("dot", "png", filename)

20190120192958619.png

决策树优缺点

优点:

简单的理解和解释,树木可视化

需要很少的数据准备,其他技术通常需要数据归一化

缺点

决策树学习者可以创建不能很好地推广数据的过于负责的树,被称为过拟合

改进

减枝cart算法,决策树API中已经实现,随机森林参数调优有相关介绍

随机森林

企业重要决策,由于决策树很好的分析能力,在决策过程应用较多

相关文章
|
1月前
|
机器学习/深度学习 数据采集 算法
量子机器学习入门:三种数据编码方法对比与应用
在量子机器学习中,数据编码方式决定了量子模型如何理解和处理信息。本文详解角度编码、振幅编码与基础编码三种方法,分析其原理、实现及适用场景,帮助读者选择最适合的编码策略,提升量子模型性能。
164 8
|
6月前
|
机器学习/深度学习 算法 数据挖掘
PyTabKit:比sklearn更强大的表格数据机器学习框架
PyTabKit是一个专为表格数据设计的新兴机器学习框架,集成了RealMLP等先进深度学习技术与优化的GBDT超参数配置。相比传统Scikit-Learn,PyTabKit通过元级调优的默认参数设置,在无需复杂超参调整的情况下,显著提升中大型数据集的性能表现。其简化API设计、高效训练速度和多模型集成能力,使其成为企业决策与竞赛建模的理想工具。
207 12
PyTabKit:比sklearn更强大的表格数据机器学习框架
|
9月前
|
机器学习/深度学习 数据采集 JSON
Pandas数据应用:机器学习预处理
本文介绍如何使用Pandas进行机器学习数据预处理,涵盖数据加载、缺失值处理、类型转换、标准化与归一化及分类变量编码等内容。常见问题包括文件路径错误、编码不正确、数据类型不符、缺失值处理不当等。通过代码案例详细解释每一步骤,并提供解决方案,确保数据质量,提升模型性能。
373 88
|
9月前
|
机器学习/深度学习 数据采集 算法
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
机器学习在生物信息学中的创新应用:解锁生物数据的奥秘
796 36
|
9月前
|
机器学习/深度学习 人工智能
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
Diff-Instruct 是一种从预训练扩散模型中迁移知识的通用框架,通过最小化积分Kullback-Leibler散度,指导其他生成模型的训练,提升生成性能。
253 11
Diff-Instruct:指导任意生成模型训练的通用框架,无需额外训练数据即可提升生成质量
|
7月前
|
机器学习/深度学习 传感器 数据采集
基于机器学习的数据分析:PLC采集的生产数据预测设备故障模型
本文介绍如何利用Python和Scikit-learn构建基于PLC数据的设备故障预测模型。通过实时采集温度、振动、电流等参数,进行数据预处理和特征提取,选择合适的机器学习模型(如随机森林、XGBoost),并优化模型性能。文章还分享了边缘计算部署方案及常见问题排查,强调模型预测应结合定期维护,确保系统稳定运行。
754 0
|
9月前
|
人工智能 Kubernetes Cloud Native
跨越鸿沟:PAI-DSW 支持动态数据挂载新体验
本文讲述了如何在 PAI-DSW 中集成和利用 Fluid 框架,以及通过动态挂载技术实现 OSS 等存储介质上数据集的快速接入和管理。通过案例演示,进一步展示了动态挂载功能的实际应用效果和优势。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
模型训练数据-MinerU一款Pdf转Markdown软件
MinerU是由上海人工智能实验室OpenDataLab团队开发的开源智能数据提取工具,专长于复杂PDF文档的高效解析与提取。它能够将含有图片、公式、表格等多模态内容的PDF文档转化为Markdown格式,同时支持从网页和电子书中提取内容,显著提升了AI语料准备的效率。MinerU具备高精度的PDF模型解析工具链,能自动识别乱码,保留文档结构,并将公式转换为LaTeX格式,广泛适用于学术、财务、法律等领域。
1413 4
|
11月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
198 2
|
机器学习/深度学习 存储 人工智能
揭秘机器学习背后的神秘力量:如何高效收集数据,让AI更懂你?
【10月更文挑战第12天】在数据驱动的时代,机器学习广泛应用,从智能推荐到自动驾驶。本文以电商平台个性化推荐系统为例,探讨数据收集方法,包括明确数据需求、选择数据来源、编写代码自动化收集、数据清洗与预处理及特征工程,最终完成数据的训练集和测试集划分,为模型训练奠定基础。
306 3