机器学习—决策树分类算法分析哈伯曼癌症生存数据集

目前,决策树算法是利用最广泛的数据挖掘算法之一。

  1. 数据描述

(1)数据获取途径:
这里选用了uci数据集官网上的Haberman’s Survival Data Set。
(2)数据内容组成:
该数据集有306条记录,每条记录有3个属性,分别为:手术时患者年龄、患者手术年份、腋窝淋巴结阳性数。 根据这3个特征属性,将生存状态划分为两类:患者存活5年时间或者更长时间,患者在5年时间内死亡。
(3)对数据的预处理:
获取数据后,整理数据;随后将标签值转化为数字类型,并对数据集进行拆分,按照8:2的比例将其随机拆分成训练样本和验证样本,同时利用PCA将训练样本进行降维。
(由于对PCA的了解只是一点点,这里是参考网上的大神的文档做的,但是时间有点久,忘记是谁的了,希望不要介意)
2. 模型描述

这里我采用了信息增益和基尼系数两种特征选择策略进行预测。
首先在样本上进行模型训练;随后利用得到的决策树模型在训练、测试样本上进行模型预测并计算准确率、精度、召回率和混淆矩阵。之后,保存训练好的模型,并将其进行可视化
3. 算法实现

关键代码展示:

#1、将训练样本PCA 降低至少2维度
PCA = IncrementalPCA(n_components=2)
x_train = PCA.fit_transform(x_train)
x_test = PCA.transform(x_test)
#2、使用基尼系数(信息增益)作为划分标准,对决策树进行训练 
clf = tree.DecisionTreeClassifier(criterion='gini(entropy)')
clf.fit(x_train, y_train)
#把决策树结构写入文件 
with open("tree_entropy.dot", 'w') as f:
    f = tree.export_graphviz(clf, out_file=f)
#3、输出在训练样本和测试样本上的准确率,以及精确率和召回率,并画出混淆矩阵
print("训练数据上的准确率:", clf.score(x_train, y_train))
print("测试数据上的准确率:", clf.score(x_test, y_test))
predict_test = clf.predict(x_test)
precision = precision_score(predict_test, y_test, average="macro")
recall = recall_score(predict_test, y_test, average="macro")
print("测试数据上的精确率:", precision)
print("测试数据上的召回率:", recall)
#画出混淆矩阵
cm = confusion_matrix(y_test, predict_test)
print("混淆矩阵:\n", cm)
#4、决策树可视化
dot_data = StringIO()
export_graphviz(clf
                , feature_names=[0, 1]
                ,class_names=["0","1"]    
                ,filled=True        #由颜色标识不纯度
                ,rounded=True       #树节点为圆角矩形
                ,out_file=dot_data
            )
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("tree_entropy.pdf")

4.运行结果
两个模型均使用相同的训练样本进行训练,在相同的测试样本中进行测试。对其准确率、精确率、召回率进行计算为分别:
基尼系数:0.61、0.57、0.58;
信息增益:0.58、0.52、0.53。
从各项指标的对比当中可以发现,以基尼系数为划分标准的决策树模型相较以信息增益为划分标准的决策树模型更加准确。

结果展示:
以基尼系数为
以信息增益为划分标准的决策树

  1. 小结

做这个实验花了我挺长时间的,因为是第一次接触机器学习,第一次接触python,所以很多东西都得现学,不足之处请各位指正!

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小姝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值