Tetanic幸存者预测—详细代码解释

一、导入数据库:

        参考文献:Python中os.walk函数的用法(遍历文件夹下文件并获得路径)_python os.walk 用法-CSDN博客

        在本次案例中应该导入数据库numpy, pandas, os,numpy用于线性函数的计算,pandas用于导入csv等数据,os用于形成获得数据的路径。

        对于os.walk,完整定义为os.walk(top, topdown=True, οnerrοr=None, followlinks=False)。其中top为需要遍历目录的地址,topdown为True,则有限遍历top目录,否则优先遍历子目录(默认为topdown = True)。

        os.walk是个生成器,需要遍历实现对三元组返回(root,dirs,files),但注意,os.walk中所采用的top可以是基于根目录的相对路径,也可以通过'F:\os_test'的方式调用电脑中的绝对路径

        os.path.join可以获得所有子文件路径,由于os.walk获得的并不是路径,所以需要将其内容进行连接得到路径,python自带的函数os.path.join [path1[, path2[, ...]]],其中嵌套再前面的是高级目录,后面是低级目录。

        使用嵌套的遍历for循环实现和os.path.join函数对文件中所读取的文件和路径名进行存储,并保留在变量filename中。

import numpy as np 
import pandas as pd 
import os
for dirname, _, filenames in os.walk('../1-Day-Titanic-Random-Forest'):
    for filename in filenames:
        print(os.path.join(dirname, filename)

得到如下结果:

二、使用pandas库语言pd实现对csv表格的读取:

         使用pandas库中的var = pd.read_csv('../1-Day-Titanic-Random-Forest/train.csv')语句实现对相对路径中的csv文件进行存储,还可以使用print(var.head())函数实现表格前几行的输出,代码如下所示:

train_data = pd.read_csv('../1-Day-Titanic-Random-Forest/train.csv')
print(train_data.head())

test_data =pd.read_csv('../1-Day-Titanic-Random-Forest/test.csv')
print(test_data.head())

得到如下结果: 

三、男性、女性生存率的求解以及输出(Pandas中df.loc通过索引行和列的条件筛选出数据):

参考文献:Pandas 数据中的loc与iloc含义以及操作_df.iloc-CSDN博客

        1.df.loc的操作基础:

            在上述的pd.read_csv中我们实现了对两个csv文件的读取并存储,df.loc对上述读取的csv文件进行操作。

        2. .loc的基本操作:

            我们需要使用train_data.loc实现对条件为Sex和Survived条件的数据分层次筛选出来(先分性别,再分存活,Sex优先),在使用rate_women = sum(women)/len(women)实现对存活率的计算,最后再输出。

代码实现: 

women = train_data.loc[train_data.Sex == 'female']['Survived']
rate_women = sum(women)/len(women)

print("% of women who survived:", rate_women)

men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men)/len(men)

print("% of men who survived:", rate_men)

        我们使用Pycharm在'women = train_data.loc[train_data.Sex == 'female']['Survived']'这一行之前设置断点然后观察其数据类型,可以在dtype那一行看到当前存储的数据类型为int,我们通过len()可以将women这个int型数据转化为数字便于求解比率。

        我们再对sum()和len()这两个函数进行回顾。sum(iterable[,start]),其中iterable为可迭代的对象,在本案例中women作为可迭代对象是列表,start为指定相加的数字。len(tuple)作为统计元组的个数的函数,统计了所有女性的个数。

        我们可以在women那一行代码下面先测试一下sum(women)和len(women)之间的差异。 

四、使用SKlearn库中Random Forest Classifier建模: 

参考文献:sklearn库学习----随机森林(RandomForestClassifier,RandomForestRegressor)_from sklearn.ensemble import randomforestclassifie-CSDN博客

机器学习-随机森林(RandomForest)详解-CSDN博客 

sklearn.ensemble.RandomForestClassifier — scikit-learn 1.4.1 documentation 

pandas - 数据离散化之 get_dummies - 知乎 (zhihu.com)

        1.RandomForestClassifier模型的运用: 

          RF是一种常见的集成评估器模型,集成评估器中的每个模型叫做基评估器,通常由三类集成算法Bagging、Boosting、 Stacking,其中RF是Bagging的代表模型,所有的基评估器为决策树。Bagging中的每一个基决策其=器是平行的,最后的结果是采用均值或者少数服从多数的原则。

            其中①n_estimators :树的数量,默认是10,这个很好理解就是你准备在你的森林里种多少树。(分类器)这个参数的大小决定了最后的准确性,但是也会让你的运行速度变的很慢,所以需要不断的测试去决定。② max_depth:树的最大深度。如果为None,则将节点展开,直到所有叶子都是纯净的(只有一个类),或者直到所有叶子都包含少于min_samples_split个样本。默认是None

        2.Pandas库中函数pd.get_dummies()的应用:

        pd.get_dummies()中第一项data可以为数组,列表,数据框架(array-like, serire, dataframe),get_dummies是pandas实现one hot encode的方式,将离散型特征的每一种取值看成一种状态,我们在data_train[feature]中看到数据存在Pclass、Sex、SibSp、Parch四种离散特征,one-hot保证了每个特征只有一种状态处于“激活态”,处于“激活态”的状态特征值为1。

 

        3.代码实现:

        首先导入模块RandomForestClassifier,再通过y函数将train_data[‘Survived’]种Survived一行的数据赋值给y。再设置列表features,使用pd.get_dummies函数将离散的特征值转化为0,1的特征值并且以列表的形式赋值给X,X_test。等待数值准备完毕之后采用RandomForestClassfier对X,y之间分类形成模型,最后使用model.predict()对测试数据集进行预测

from sklearn.ensemble import RandomForestClassifier

y = train_data["Survived"]

features = ['Pclass', 'Sex', 'SibSp', 'Parch']
X = pd.get_dummies(train_data[features])
X_test = pd.get_dummies(test_data[features])

model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
predictions = model.predict(X_test)

五、数据的输出: 

        通过随机森林算法,我们实现了对test_data中的幸存者进行了预测,并将预测的结果通过幸存者id和幸存概率输出为my_submission.csv。

output = pd.DataFrame({'PassengerId': test_data.PassengerId, 'Survived': predictions})
output.to_csv('my_submission.csv', index=False)
print("Your submission was successfully saved!")

         

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值