【阿旭机器学习实战】【13】决策树分类模型实战:泰坦尼克号生存预测

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 【阿旭机器学习实战】【13】决策树分类模型实战:泰坦尼克号生存预测

决策树分类模型实战:泰坦尼克号生存预测

导入数据集并查看基本信息


import pandas as pd
titanic = pd.read_csv("../data/titanic.txt")
titanic.head()


image.png


# 打印数据集表头
titanic.columns
Index(['row.names', 'pclass', 'survived', 'name', 'age', 'embarked',
       'home.dest', 'room', 'ticket', 'boat', 'sex'],
      dtype='object')

数据字段的含义:


数据集中有12 个字段,每一个字段的名称和含义如下

PassengerId:乘客 ID

Survived:是否生存

Pclass:客舱等级

Name:乘客姓名

Sex:性别

Age:年龄

SibSp:在船兄弟姐妹数/配偶数

Parch:在船父母数/子女数

Ticket:船票编号

Fare:船票价格

Cabin:客舱号

Embarked:登船港口


选择属性:通过分析发现某些属性(如:name)和是否生还没有关系



选择特征并进行特征处理


# 我们选择"pclass","age","sex"这三个主要特征进行模型训练
x = titanic[["pclass","age","sex"]]
y = titanic[["survived"]]
• 1
• 2
• 3


补全缺失值


x.isnull().any()
• 1
pclass    False
age        True
sex       False
dtype: bool
# 查看缺失
x.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1313 entries, 0 to 1312
Data columns (total 3 columns):
pclass    1313 non-null object
age       633 non-null float64
sex       1313 non-null object
dtypes: float64(1), object(2)
memory usage: 30.9+ KB
# 分析发现年龄缺失了一半,如果全都丢弃,数据损失过多
# 丢弃不行需要填补,用所有年龄的平均值来填补
x["age"].fillna(x["age"].mean(),inplace=True)
D:\anaconda3\lib\site-packages\pandas\core\generic.py:5430: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self._update_inplace(new_data)
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
• 1
x_train[:10]


image.png


特征处理:对特征进行向量化


from sklearn.feature_extraction import DictVectorizer
• 1
vec = DictVectorizer(sparse=False)#sparse=False意思是不产生稀疏矩阵
# 非数字类型的特征向量化
x_train = vec.fit_transform(x_train.to_dict(orient="record"))
x_train[:5]
array([[31.19418104,  0.        ,  0.        ,  1.        ,  1.        ,
         0.        ],
       [46.        ,  1.        ,  0.        ,  0.        ,  0.        ,
         1.        ],
       [35.        ,  1.        ,  0.        ,  0.        ,  1.        ,
         0.        ],
       [46.        ,  1.        ,  0.        ,  0.        ,  0.        ,
         1.        ],
       [18.        ,  0.        ,  1.        ,  0.        ,  0.        ,
         1.        ]])
x_train.shape
• 1
(984, 6)
• 1
x_test = vec.fit_transform(x_test.to_dict(orient="record"))

x_test.shape
• 1
(329, 6)
• 1


创建决策树模型,训练预测


dt = DecisionTreeClassifier()
• 1
dt.fit(x_train,y_train)
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
            max_features=None, max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, presort=False, random_state=None,
            splitter='best')
y_pre = dt.predict(x_test)
• 1
y_pre[:10],y_test[:10]


(array([0, 0, 1, 0, 1, 0, 0, 0, 0, 0], dtype=int64),       survived
 908          0
 822          0
 657          1
 856          0
 212          1
 641          1
 305          0
 778          1
 818          1
 1179         0)
dt.score(x_test,y_test)
# score也成为准确性,只能从宏观上查看到一个模型的准确程度
• 1
• 2
0.7872340425531915


性能评测报告


from sklearn.metrics import classification_report
• 1
print(classification_report(y_pre,y_test,target_names=["died","servived"]))
             precision    recall  f1-score   support
       died       0.92      0.78      0.84       244
   servived       0.56      0.81      0.66        85
avg / total       0.83      0.79      0.80       329


性能评测报告的相关指标:


比如两个类别A和B,预测的情况会有四种:True A、True B、False A、False B
1、准确率(score):模型预测的正确的概率:score = (True A+True B)/(True A + True B + False A +False B)
2、精确率:表示的是每一个类别预测准确的数量占所有预测为该类别的数量的比例:precision_a = True A / (True A + False A)
3、召回率:表示的每一个类别预测正确的数量占这里类别真正数量的比例:recall_a = True A / (True A + False B)
4、F1指标:F1_a = 2/(1/precision_a + 1/recall_a) = 2*(precision_a*recall_a)/(precision_a+recall_a) 调和平均数,F1指标指的就是精确率和召回率的调和平均数,除了把精确率和召回率平均,还可以给两个指标相近的模型以较高的评分;
【注意】如果精确率和召回率差距太大,模型就不具备参考价值
相关文章
|
机器学习/深度学习 数据采集 算法
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
【阿旭机器学习实战】【35】员工离职率预测---决策树与随机森林预测
|
机器学习/深度学习 数据可视化 算法
决策树VS世界:掌握Python机器学习中的这棵树,决策从此不再迷茫
【8月更文挑战第2天】在数据驱动时代,决策树作为一种直观且易于解释的机器学习方法,因其强大的分类与回归能力备受青睐。本文介绍决策树的基础概念:通过属性测试划分数据,优化选择以提高预测准确度。使用Python的scikit-learn库,我们演示了如何加载鸢尾花数据集,构建并训练决策树模型,评估其准确性,以及利用`plot_tree`函数可视化决策过程,从而更好地理解模型的工作原理。掌握这些技能,你将在面对复杂决策时更加自信。
171 2
|
机器学习/深度学习 搜索推荐 算法
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
|
机器学习/深度学习 数据可视化 算法
【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化
【阿旭机器学习实战】【36】糖尿病预测---决策树建模及其可视化
|
机器学习/深度学习 算法 Windows
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机
【阿旭机器学习实战】【34】使用SVM检测蘑菇是否有毒--支持向量机
|
机器学习/深度学习 算法 数据处理
【阿旭机器学习实战】【33】中文文本分类之情感分析--朴素贝叶斯、KNN、逻辑回归
【阿旭机器学习实战】【33】中文文本分类之情感分析--朴素贝叶斯、KNN、逻辑回归
|
机器学习/深度学习 算法 数据挖掘
【阿旭机器学习实战】【32】预测银行客户是否会开设定期存款账户--逻辑回归
【阿旭机器学习实战】【32】预测银行客户是否会开设定期存款账户--逻辑回归
|
1月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1152 6
|
6月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。

热门文章

最新文章

相关产品

  • 人工智能平台 PAI