之前的文章已经解决了数据预处理的问题。从这里开始,就要开始创建决策树了。
首先可以使用之前用Java实现的ID3算法进行修改。 之前的算法是基于Weka自带的数据进行的,跟这里的格式不太兼容。基本上需要把String改成Double就好了~
现在先尝试手动的创建模型,保证待会我们写出来的代码确实是正确的。
关于决策树模型以及ID3算法,具体的概念以及思路就不在这里重复写了,可以参考《数据挖掘导论》相关章节。
之前已经处理好的dataMatrix可以下载附件之中的train-matrix.csv. 然后直接使用Excel完成最简单的统计功能。
比如,第一步我需要统计Suvived之中1跟0的个数:
即: Survived=0 有549条记录, Survived=1 有342条记录。
可以使用如下代码计算熵:[代码来源:http://commons.apache.org/proper/commons-math/jacoco/org.apache.commons.math3.stat.inference/GTest.java.html 根据里面的entropy进行修改]
public static double entropy(final int[] k) { double h = 0d; double sum_k = 0d; for (int i = 0; i < k.length; i++) { sum_k += (double) k[i]; } for (int i = 0; i < k.length; i++) { if (k[i] != 0) { final double p_i = (double) k[i] / sum_k; h += p_i * FastMath.log(p_i); } } return -h; }
对于Survived, Entropy=0.9607
接下来就应该逐个的计算各个属性对应的熵以及对应的信息增益(Info Gain) 了
以PClass为例:
0.9607-(80+136)/891. * 0.9509 - (97+87)/891. * 0.9978 - (372+119)/891.*0.7989因此,Pclass属性的信息增益为
=0.0229
一次类推,计算Sex,Age,SibSp,Embarked对应的信息增益,结果如下:
Pclass:0.0838310452960116
Sex:0.2176601066606142
Age:0.010620040421108423
SibSp:0.022557964533659103
Embarked:0.024047090707960517
最终,选择Sex作为根节点。
我们看看Sex的数据情况吧,
不得不说一句:女性的存活几率要比男性大得多啊!
接下来,计算第二层。 我们先计算Sex=1(male) 的情况
此时的Entropy=entropy(468,109)=0.6992 Sum = 468+109=577
详细情况:
因此,Pclass对应的InfoGain =
0.6992 - 0.9567 * (45 + 77) / 577.0 - 0.628 * (91+17) / 577.0 - 0.5722 * (300 + 47) / 577.0
= 0.0352
后面的就不手动进行了~~~
[不得不再吐槽一下,Pclass=1的时候,生存的几率真的是非常非常大啊!不知道是不是当时的有钱人离救生艇比较近?]
具体的ID3分类器,可以参看我写的代码:https://gitcafe.com/rangerwolf/Kaggle-Titanic/blob/master/src/main/java/classifier/ID3Classifier.java。
运行test.MyID3.java即可得到结果。
将整个树json的格式输出出来:
{ "attribute": "Sex", "options": { "2.0": { "attribute": "Pclass", "options": { "3.0": { "attribute": "SibSp", "options": { "0.0": { "attribute": "Age", "options": { }, "subLeafs": { } }, "1.0": { "attribute": "Age", "options": { }, "subLeafs": { "3.0": { "count": 5, "outputValue": 0.0, "option": 3.0 } } } }, "subLeafs": { } }, "2.0": { "attribute": "Age", "options": { "2.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "2.0": { "count": 3, "outputValue": 1.0, "option": 2.0 } } } }, "subLeafs": { "1.0": { "count": 10, "outputValue": 1.0, "option": 1.0 } } }, "1.0": { "attribute": "Age", "options": { "3.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "1.0": { "count": 12, "outputValue": 1.0, "option": 1.0 } } }, "2.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "0.0": { "count": 34, "outputValue": 1.0, "option": 0.0 }, "2.0": { "count": 4, "outputValue": 1.0, "option": 2.0 } } } }, "subLeafs": { } } }, "subLeafs": { } }, "1.0": { "attribute": "Pclass", "options": { "3.0": { "attribute": "Age", "options": { "3.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "1.0": { "count": 2, "outputValue": 0.0, "option": 1.0 } } }, "2.0": { "attribute": "SibSp", "options": { }, "subLeafs": { } }, "1.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "1.0": { "count": 5, "outputValue": 1.0, "option": 1.0 } } } }, "subLeafs": { } }, "2.0": { "attribute": "Age", "options": { "2.0": { "attribute": "SibSp", "options": { }, "subLeafs": { "2.0": { "count": 4, "outputValue": 0.0, "option": 2.0 } } } }, "subLeafs": { "1.0": { "count": 9, "outputValue": 1.0, "option": 1.0 } } }, "1.0": { "attribute": "Age", "options": { "3.0": { "attribute": "SibSp", "options": { }, "subLeafs": { } }, "2.0": { "attribute": "SibSp", "options": { }, "subLeafs": { } } }, "subLeafs": { "1.0": { "count": 3, "outputValue": 1.0, "option": 1.0 } } } }, "subLeafs": { } } }, "subLeafs": { } }
用GUI的方式来显示json,部分结果如下:
可以看到,大致已经有了雏形。而且可以验证的就是,至少我们的根节点是正确的。
下面是老外的成果图:(是基于Python做出来的,不过没太看懂里面的结果,感觉只有一条边有label说明~)
下一篇文章,如果不出意外,将介绍一下Dot Language的应用。
后面的树状图,将会使用Dot Language以及相应的软件来进行展示。
PS:明天又要开始上班了~ 哎,可以用来学习的时间要少得多了...
相关推荐
【标题】:kaggle—Titanic_kaggle-titantic预测_ 【描述】:这个项目是关于在Kaggle平台上进行的泰坦尼克号(Titanic)生存预测挑战。它涉及了完整的数据分析流程,包括数据预处理、特征工程、模型训练以及结果...
对于二分类问题,我们可以尝试逻辑回归、决策树、随机森林、支持向量机、梯度提升树(如XGBoost或LightGBM)甚至神经网络。每种模型都有其优缺点,需要通过交叉验证和调参来优化性能。 在模型训练后,我们使用测试...
【标题】"Kaggle_Titanic_master" 是一个数据科学项目,主要集中在Kaggle平台上,该平台是全球领先的数据科学和机器学习竞赛的发源地。这个项目的核心是利用泰坦尼克号乘客的数据来预测他们在船沉没时的生存情况。 ...
kaggle-titanic, 关于Kaggle的Titanic教程 kaggle这是一个在Kaggle笔记本上进行竞赛的教程,来自灾难的泰坦尼克机器学习。 这个存储库的目标是为那些兴趣进入数据分析或者使用 python的kaggle科学比赛的数据提供竞争...
【标题】"Kaggle-Titanic---Machine-Learning-from-Disaster" 是一个非常知名的机器学习项目,源自数据科学竞赛平台Kaggle。这个项目的核心是利用历史数据预测泰坦尼克号沉船事件中乘客的生存情况。通过分析这些数据...
4. **train.csv**:训练数据集,用于构建和训练预测模型。它包含了已知结果的用户-商户交易,模型将基于这些数据学习识别出用户可能感兴趣的商户类别。 5. **test.csv**:测试数据集,模型的性能将根据这部分数据...
kaggle数据集 gun-violence-data_01-2013_03-2018kaggle数据集 gun-violence-data_01-2013_03-2018
The Rotten Tomatoes movie review dataset包含train.tsv >8M和test.tsv >3M两个文件 kaggle下载地址: https:// www.kaggle.com/c/sentiment analysis on movie reviews/data 分类标签如下: ...4 positive
4. 机器学习模型选择:常见的模型有逻辑回归、决策树、随机森林、支持向量机、梯度提升机(如XGBoost、LightGBM)以及神经网络等。每种模型都有其优缺点,需根据问题特性选择合适的模型。 5. 模型训练与调参:利用...
Kaggle M5预测精度2020 背景 资料库包含我的团队对2020年3月2日至6月30日在Kaggle举行的(即M5)的解决方案。请查看我的! 入门 克隆仓库: ...cd {path-to-dir}/Kaggle-M5-Forecasting-Accuracy-2020
在数据科学领域,Kaggle竞赛是全球顶尖的数据科学家竞技的舞台,而“泰坦尼克号”(Titanic)数据集则是其中的经典之作。这个数据集源于一场真实的历史悲剧,1912年,豪华邮轮泰坦尼克号在首航中撞冰山沉没,导致...
kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。 kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、...
Dogs vs. Cats Kaggle猫狗大战数据集
5. **建模**:使用各种机器学习算法,如逻辑回归、决策树、随机森林、支持向量机、XGBoost等,训练模型并调整参数。 6. **模型评估**:在验证集上评估模型性能,常用指标有准确率、查准率、查全率、F1分数、AUC-ROC...
在Kaggle的泰坦尼克挑战中,常见的算法包括逻辑回归、决策树、随机森林和梯度提升机等。每个模型都有其优势和局限性,比如逻辑回归简单快速,但可能无法捕捉复杂的非线性关系;而随机森林和梯度提升机则能较好地处理...
KAGGLE竞赛官方网站上下载下来的数据集,最全kaggle泰坦尼克数据集。欢迎下载。