当前位置:   article > 正文

python机器学习之决策树案例——泰坦尼克号幸存者的预测_机器学习泰坦尼克号论文

机器学习泰坦尼克号论文

决策树(Decision Tree)是一种非参数的有监督学习方法,它能够从一系列有特征和标签的数据中总结出决策规则,并用树状图的结构来呈现这些规则,以解决分类和回归问题。决策树算法容易理解,适用各种数据,在解决各种问题时都有良好表现,尤其是以树模型为核心的各种集成算法,在各个行业和领域都有广泛的应用。

泰坦尼克号幸存者的预测

数据点击这里可以下载——>点击这里下载。也可以在评论区留下你的邮箱,我发送给您。

首先导入所用到的库:


import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

将数据导入:

 data = pd.read_csv('taitannikehao.csv')
  • 1

查看数据前五行:

data.head()
  • 1

在这里插入图片描述

查看数据状况:

data.info()
  • 1

在这里插入图片描述
将"Cabin",“Name”,"Ticket"这三个列删除,对预测影响没有影响。


data.drop(["Cabin","Name","Ticket"],inplace=True,axis=1)#inplace  表示是否覆盖原表
  • 1
  • 2

再次查看数据:

data.info()
  • 1

在这里插入图片描述
发现"Age"列有200多缺失值,这里我们选择用平均值填充。

data["Age"] = data["Age"].fillna(data['Age'].mean())
  • 1

在这里插入图片描述
“Age”列缺失值已经处理完毕,“Embarke”有两个缺失值,直接将这两个含有缺失值的行删除掉即可,因为影响并不大。

data = data.dropna()
  • 1

在这里插入图片描述
现在已经将没用的列和缺失值进行处理完毕 ,查看一下数据。

data.head()
  • 1

在这里插入图片描述
接下来要把object类型转换成数字类型:

labels =data["Embarked"].unique().tolist()
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))
  • 1
  • 2

在这里插入图片描述

现在发现"Embarked“列已经从S,C,Q,转变成了0,1,2.在这里插入图片描述
将性别转换成0,1:

data["Sex"] = (data["Sex"] == "male").astype("int")#利用先判断是否为male,然后将T和F转换成数字0,1
data.head()
  • 1
  • 2

在这里插入图片描述
进行数据集划分,训练集和测试集。

x = data.iloc[:,data.columns != "Survived"]  #除了Survived列都提取
y = data.iloc[:,data.columns == "Survived"]# 只提取Survived列
from sklearn.model_selection import train_test_split  #导入划分训练集和测试集的库
x_train,x_test,y_train,y_test =  train_test_split(x,y,test_size=0.3)#划分数据
  • 1
  • 2
  • 3
  • 4

将划分好的数据集,重置索引:

for i in [x_train,x_test,y_train,y_test]:
    i.index = range(i.shape[0])#对四个数据集都进行划分
  • 1
  • 2

实例化

clf = DecisionTreeClassifier(random_state=25)
  • 1

对数据进行训练

clf=clf.fit(x_train,y_train)
  • 1

求出训练评分

score = clf.score(x_test,y_test)
score
  • 1
  • 2

在这里插入图片描述
查看使用交叉验证的效果如何

from sklearn.model_selection import cross_val_score
clf = DecisionTreeClassifier(random_state=25)
#使用交叉验证
score = cross_val_score(clf,x,y,cv = 10).mean()
score
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
发现结果还不如上面的评分高,所以某种模式不一定适合。

画出图像

tr = []
te = []

for i in range(10):
    clf = DecisionTreeClassifier(random_state=25
                                ,max_depth = i + 1
                                ,criterion = "entropy" )
    clf = clf.fit(x_train,y_train)
    score_tr = clf.score(x_train,y_train)
    score_te = cross_val_score(clf,x,y,cv = 10).mean()
    tr.append(score_tr)
    te.append(score_te)


print(max(te))#查看最大值

plt.plot(range(1,11),tr,color = "red",label = "train")
plt.plot(range(1,11),te,color = "b",label = "test")
plt.legend()
plt.show()



  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

使用网格搜索查看最适合的参数选项:

import numpy as np
parameters = {
    "criterion":("gini","entropy")
    ,"splitter":("best","random")
    ,"max_depth":[*range(3,10)]
    ,"min_samples_leaf":[*range(1,50,5)]
    ,"min_impurity_decrease":[*np.linspace(0,0.5,20)]#这个20的值不宜设置过大,不然运行时间太长,我这里设置的20运行了三分钟多
}

clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf,parameters,cv = 10)
GS = GS.fit(x_train,y_train)

GS.best_params_      #从我们输入的参数和参数取值的列表中,返回最佳组合

GS.best_score_    #网格搜索后的模型的评判标准
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

在这里插入图片描述
这个返回的参数最合适的为:{‘criterion’: ‘gini’,
‘max_depth’: 7,
‘min_impurity_decrease’: 0.0,
‘min_samples_leaf’: 1,
‘splitter’: ‘best’}
但是这并不一定是最适合这个模型的,有可能它不需要某个参数,但是因为设定的时候给他加了这个参数,他必须要选择这个参数,所以要对这个有取有舍,参数测试这去添加。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/166242
推荐阅读
相关标签
  

闽ICP备14008679号