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

机器学习决策树

一、香农公式

熵:

信息增益:

信息增益=信息熵-条件熵

前者是初始信息熵大小,后者是因为条件加入后带来的确定性增加

信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度

信息增益越大说明影响越大

二、代码

"""
决策树对泰坦尼克号进行预测生死
:return: None
"""
# 获取数据
titan = pd.read_csv("./data/titanic.txt")
titan.info() # info()查看数据信息,包括每列的类型,非空值个数,内存占用等
# 处理数据,找出特征值和目标值
x = titan[['pclass', 'age', 'sex']]

y = titan['survived']
print(x.info())  # 用来判断是否有空值
x.describe(include='all') # 用来查看数据的描述性统计信息
# 一定要进行缺失值处理,填为均值
mean=x['age'].mean()
print(mean)
x.loc[:,'age']=x.loc[:,'age'].fillna(mean)
# 分割数据集到训练集合测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=4)
print(x_train.head())
x_train.to_dict(orient="records") #把df变为列表套字典,后面方便变成one_hot编码
# 进行处理(特征工程)特征-》类别-》one_hot编码
dict = DictVectorizer(sparse=False) # sparse=False表示不用稀疏矩阵,用numpy数组

# 这一步是对字典进行特征抽取,to_dict可以把df变为字典,records代表列名变为键
x_train = dict.fit_transform(x_train.to_dict(orient="records"))
print(type(x_train))
print(dict.get_feature_names_out())
print('-' * 50)
x_test = dict.transform(x_test.to_dict(orient="records"))
print(x_train)
# 用决策树进行预测,修改max_depth试试,修改criterion为entropy
#树过于复杂,就会产生过拟合
dec = DecisionTreeClassifier()

#训练
dec.fit(x_train, y_train)

# 预测准确率
print("预测的准确率:", dec.score(x_test, y_test))

# 导出决策树的结构
export_graphviz(dec, out_file="tree.dot",
                feature_names=['age', 'pclass=1st', 'pclass=2nd', 'pclass=3rd', 'female', 'male'])

http://www.dtcms.com/a/44578.html

相关文章:

  • Oracle性能调优(一):时间模型统计
  • 使用C#控制台调用本地部署的DeepSeek
  • 大型旋转机械装备转子健康监控与故障诊断模块
  • C 语言共用体:深入理解与实践】
  • Redis面试题
  • 【Unity】搭建HTTP服务器并解决IP无法访问问题解决
  • 激活函数ReLU的原理与应用
  • linux-Dockerfile及docker-compose.yml相关字段用途
  • 记忆化搜索与动态规划:原理、实现与比较
  • 2025春新生培训数据结构(树,图)
  • 【后端】Docker一本通
  • MacBook Pro使用FFmpeg捕获摄像头与麦克风推流音视频
  • PHP:从入门到进阶,掌握动态网页开发的利器
  • C++ primer plus 第五节 循环
  • 分布式系统核心基石:CAP定理、BASE理论与一致性算法深度解析
  • 2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析
  • LeetCode 链表章节 (持续更新中)
  • 接口测试及常用接口测试工具(postman/jmeter)
  • Spring Bean生命周期:从创建到销毁的完整流程
  • 【手撕算法】支持向量机(SVM)从入门到实战:数学推导与核技巧揭秘
  • unity使用input system实现相机屏幕手势丝滑拖拽
  • 买二赠一--蓝桥
  • 一次现网问题定位-线程池设置不当,导致流量上去后接口变慢
  • 【网络安全 | 渗透工具】小程序反编译分析源码 | 图文教程
  • GPT-4.5震撼登场,AI世界再掀波澜!(3)
  • 【MySQL】 数据类型
  • ESP32+Mixly+LED闪烁
  • getline的使用(L1-059敲笨钟)
  • 02Java基础概念
  • ISP 常见流程