用决策树或随机森林解决泰坦尼克号乘客生存预测(内附数据集百度网盘)

发布时间 2023-07-28 20:03:47作者: Zrold

 实现该模型的训练要用到的主要算法和实现思路是

"""
项目:泰坦尼克号乘客生存预测

主要算法:决策树\随机森林

实现思路:
    1、导包
    2、读取数据
    3、对数据进行基本处理
    4、特征工程
    5、决策树预估器流程
    6、模型评估
"""

 

首先的首先当然是导包啦

# 1、导包

import pandas as pd # 读取文件用的 from sklearn.feature_extraction import DictVectorizer # 用来进行字典特征抽取 from sklearn.tree import DecisionTreeClassifier #决策树 from sklearn.model_selection import GridSearchCV # 网格搜索和CV(交叉验证) from sklearn.ensemble import RandomForestClassifier # 随机森林

 

然后就是读取文件里面的数据进来了

# 2、读取数据

train = pd.read_csv('train.csv') test = pd.read_csv('test.csv') y_test = pd.read_csv('gender_submission.csv')

数据集下载:百度网盘

  链接:https://pan.baidu.com/s/1slaouE4Es37U8u0U-kDJnw
  提取码:ss5o

 

接着是进行对数据进行基本的处理了,以下是作者的处理方法:

第一步是把多余的特征去除,选取出有用的特征,作者认为,在数据集里面有用的有"Pclass","Age","Sex"三个,所以我对它进行提取出来

# 3、对数据进行基本处理


# 1)选取有用的数据 x_train = train[["Pclass","Age","Sex"]] y_train = train["Survived"] x_test = test[["Pclass","Age","Sex"]]

第二步是把缺失值给填充为平均值。对于缺失值有两种处理方式,一是如果该特征不重要,直接删除便是,二是填充平均值或众数

# 2)缺失值处理:用平均值填充
x_train["Age"].fillna(x_train["Age"].mean(),inplace=True)
x_test["Age"].fillna(x_train["Age"].mean(),inplace=True)

# .fillna()是用来把括号里的值填充进空值里,里面的inplace是决定是否要在自身进行修改
# .mean()是取到其平均值

第三步是把数据转化成字典类型

# 3)转换成字典
x_train = x_train.to_dict(orient="records")
x_test = x_test.to_dict(orient="records")

“““
orient 控制的是转换成的字典的形式 orient
=‘dict’,是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值) )}}; orient =‘list’ ,转化后的字典形式:{column(列名) :{[ values ](值)}}; orient =‘series’ ,转化后的字典形式:{column(列名) : Series (values) (值)}; orient =‘split’ ,转化后的字典形式:{‘index’ : [index],‘columns’ :[columns],’data‘ : [values]}; orient =‘records’ ,转化后是 list形式:[{column(列名) : value(值)}…{column:value}]; orient =‘index’ ,转化后的字典形式:{index(值) : {column(列名) : value(值)}}; ”””

 

下一步是进行特征工程,把数据处理成计算机能看懂的鸭子

# 4、特征工程

# 1)实例化两个转换器 transfer = DictVectorizer()
# 2)使用转换器
x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) “““ 注:以上x_test是用transform方法,是应为fit_transform方法实际上可以分为两个方法,   一个是fit,一个是transform,fit是用来计算数据的标准差和平均数,transform是用来   转化数据的,在第一次使用fit_transform时,transfer里面已经通过fit得到了x_train   的标准差和平均值了,为了数据标准化更加真实,所以x_test也要用一样的标准差和平均值,   这就是x_test使用transform的原因 ”””

 

最后就是使用决策树算法了

# 5、决策树预估器流程


# 实例化预估器
es = DecisionTreeClassifier(criterion="entropy")

# 添加网格搜索和CV
es = GridSearchCV(es,param_grid={"max_depth":[1,2,3,4,5,6,7,8,9]},cv=3)


# 6、模型评估



# 使用预估器
es.fit(x_train, y_train)


# 查看准确率
print(es.score(x_test, y_test["Survived"]))

# 查看最佳数据
print("最佳深度:",es.best_params_)
print("最佳成绩:",es.best_score)

 

 

另外一个就是也可以用随机森林的算法

# 5、随机森林预估器流程


# 使用随机森林进行解决
est = RandomForestClassifier()

# 添加网格搜索和CV
est = GridSearchCV(est,param_grid={"n_estimators":[10,20,40,80,160,320,640,1280]},cv=3)

# 使用
est.fit(x_train, y_train)


# 6、模型评估




# 查看准确率
print(est.score(x_test, y_test["Survived"]))

# 查看最好参数
print("最好的树数量:",est.best_params_)
print("最佳成绩:",est.best_score_)