本文主要是介绍kaggle | 泰坦尼克号幸存者预测 - 分类树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
# 1. 导入所需要的库
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 train_test_split
# 2. 导入数据集,探索数据
data = pd.read_csv("C:\\Users\\luo11\\titanic\\train.csv")
# 3. 对数据集进行预处理# 筛选特征,缺失值太多的,无关的特征删掉
# inplace=True 意味着用删除完毕的表覆盖原表
# axis=1 对列操作;axis=0,对行操作
data.drop(['Cabin','Name','Ticket'],inplace=True,axis=1)# 处理缺失值
# 用fillna()填补缺的不多的值
data["Age"] = data["Age"].fillna(data["Age"].mean())# 缺很少的值,删除缺失值数据
data = data.dropna()# 看一下缺失值处理结果
data.info()# unique()取出所有的值,压缩,删除重复值,得出到底有多少取值
# 用tolist()变成列表
labels = data["Embarked"].unique().tolist()# 用这个列表将"Embarked"列换成数字
# 匿名函数:lambda x指 Embarked中的每一行数据,将"S" --> labels.index("S")
data["Embarked"] = data["Embarked"].apply(lambda x: labels.index(x))# 二分类问题转化成数字
# astype()将布尔值转换成另一个类型,astype("int")转换成int型
data["Sex"] = (data["Sex"] == "male").astype("int")# 看看数据预处理的结果
data.head()
# 4. 把特征和标签提取出来
X = data.iloc[:,data.columns != "Survived"]
y = data.iloc[:,data.columns == "Survived"]
# 5. 训练集测试集划分
Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3)# 恢复索引的顺序
for i in [Xtrain, Xtest, Ytrain, Ytest]:i.index = range(i.shape[0])
# 开始建模
clf = DecisionTreeClassifier(random_state=25)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest)
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(Xtrain, Ytrain)score_tr = clf.score(Xtrain, Ytrain)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="blue",label="test")
plt.xticks(range(1,11)) # 修改坐标标尺
plt.legend()
plt.show()
用网格搜索来帮助调参
import numpy as np
gini_threshold = np.linspace(0,0.5,20) # 在给定的数据范围内取出指定的数# 一串参数,和这些参数对应的我们希望网格搜索来搜索的参数的取值范围
parameters = {"criterion":("gini","entropy"),"splitter":("best","random"),"max_depth":[*range(1,10)],"min_samples_leaf":[*range(1,50,5)],"min_impurity_decrease":[*np.linspace(0,0.5,20)]}clf = DecisionTreeClassifier(random_state=25)
GS = GridSearchCV(clf, parameters, cv=10)
GS = GS.fit(Xtrain, Ytrain)
# 网格搜索的两个重要属性
GS.best_params_ # 从我们输入的参数和参数取值的列表中,返回最佳组合
GS.best_score_ # 网格搜索后的模型的评判标准
结果好了点,但还有上升空间,说明分类树在titanic上表现不够
这篇关于kaggle | 泰坦尼克号幸存者预测 - 分类树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!