泰坦尼克号生存预测python毕设_Python机器学习决策树案例——泰坦尼克号幸存者预测,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

将数据导入:

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

查看数据前五行:

data.head()

查看数据状况:

data.info()

将"Cabin",“Name”,"Ticket"这三个列删除,对预测影响没有影响。

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

再次查看数据:

data.info()

发现"Age"列有200多缺失值,这里我们选择用平均值填充。

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

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

data = data.dropna()

现在已经将没用的列和缺失值进行处理完毕 ,查看一下数据。

data.head()

接下来要把object类型转换成数字类型:

labels =data["Embarked"].unique().tolist()

data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))

现在发现"Embarked“列已经从S,C,Q,转变成了0,1,2.

将性别转换成0,1:

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

data.head()

进行数据集划分,训练集和测试集。

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)#划分数据

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

for i in [x_train,x_test,y_train,y_test]:

i.index = range(i.shape[0])#对四个数据集都进行划分

实例化

clf = DecisionTreeClassifier(random_state=25)

对数据进行训练

clf=clf.fit(x_train,y_train)

求出训练评分

score = clf.score(x_test,y_test)

score

查看使用交叉验证的效果如何

from sklearn.model_selection import cross_val_score

clf = DecisionTreeClassifier(random_state=25)

#使用交叉验证

score = cross_val_score(clf,x,y,cv = 10).mean()

score

发现结果还不如上面的评分高,所以某种模式不一定适合。

画出图像

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()

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

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_ #网格搜索后的模型的评判标准

这个返回的参数最合适的为:{‘criterion’: ‘gini’,

‘max_depth’: 7,

‘min_impurity_decrease’: 0.0,

‘min_samples_leaf’: 1,

‘splitter’: ‘best’}

但是这并不一定是最适合这个模型的,有可能它不需要某个参数,但是因为设定的时候给他加了这个参数,他必须要选择这个参数,所以要对这个有取有舍,参数测试这去添加。

你可能感兴趣的:(泰坦尼克号生存预测python毕设_Python机器学习决策树案例——泰坦尼克号幸存者预测,python,之,的...)