入坑kaggle第二天- 详细分析Titanic – Machine Learning from Disaster

kaggle创始人为Anthony毕业于墨尔本大学,于2010年在创立kaggle, 现在被google收购, 现在有100多万活跃用户。

  1. 学习kaggle平台如何参加比赛, 如何提交项目
  2. 练习Titanic – Machine Learning from Disaster

泰坦尼克号项目主要是通过一个train.csv文件提供的基础数据,预测test.csv文件中测试数据集的准确性, 然后把预测结果保存到gender_submission.csv提交。

import pandas as pd
train_data = pd.read_csv('titanic/train.csv')

pandas是数据科学库, 和numpy处理矩阵类似, 主要用于处理表格, 相当于一个可编程的excel, 方便处理数据.

按照惯例缩写为pd
所以一般语法:

import pandas as pd

读取文件:一般pandas读取的文件为csv, 也有excel和text文件, 语法一样。

train_data = pd.read_csv('titanic/train.csv')

train_data变量名用于保存读取的文件内存

type(train_data)
pandas.core.frame.DataFrame

DataFrame是pandas的数据保存方式, 就是一个数据表格

一下语法可以制作表格:

pd.DataFrame({'Yes': [1, 2], 'No': [3, 4]})

入坑kaggle第二天- 详细分析Titanic - Machine Learning from Disaster
可见, pandas可以制作漂亮的表格, DataFrame为制表方法, 字典中的key为column, 代表列的项目名, value用list表示, 代表每一列的具体内容, DataFrame自动加索引。
train_data.head()

入坑kaggle第二天- 详细分析Titanic - Machine Learning from Disaster

1 解题的第一步是读懂表格:

第一列为索引号, 第二列为乘客ID,然后是否生还,根据表格1 代表活着, 0代表死亡, 应为一等舱的旅客大部分生还,另外kaggle文件有说明, 可见Pclass是一个影响很大的feature, 姓名应该影响不大, 但根据我们对泰坦尼克号的了解, 性别和年龄应该影响很大,应该是妇女和儿童优先登上救生艇,下一列是有没有兄弟姐妹或配偶也在船上,另一列是有没有父母小孩, 这些项目也是其中的影响因素。然后再看船票和票价, 可见头等舱几乎是三等的10倍, 应该影响很大。然后舱位和上船地点, 舱位也影响很大, 因为三等的没有, 应该在船的底层, 从电影中我们可以看到, 至于上船地点, 应该影响不大, 那个地方都有穷人和富人。

2 test.csv

import pandas as pd
test_data = pd.read_csv('titanic/test.csv')
test_data.head()

入坑kaggle第二天- 详细分析Titanic - Machine Learning from Disaster
可见test.csv几乎和train.csv一样, 但少了一项survived, 这项需要我们预测。

3 gender_submission.csv

入坑kaggle第二天- 详细分析Titanic - Machine Learning from Disaster
可见, 从892号开始测试, 通过的前面891个数据的feature, 预测后面的数据, 通过提交的submission检验模型的准确性。

; 4 模型的选择

通过对kaggle的基础内容学习, 可以选择决策树模型, 但Random Forest 应该准确性更高, 至于features的选择, 可以先全部选择, 然后尝试是否有必要删除一些featueres来提高精确性。

5 数据清洗

由于表格中的性别影响很大, 应该需要用到, 需要做数据处理。

6 题目要求

The competition is simple: we want you to use the Titanic passenger data (name, age, price of ticket, etc) to try to predict who will survive and who will die.

7 代码IDE

由于本题要求数据量不大, 运算时间不长, 可以用kaggle提供的notebook或者自己的Jupyter notebook, 如果处理计算机视觉和深度学习的一些问题建议使用GPU, 如果没有, 可以用Kaggle免费提供的加快计算时间。

8 关于submission file 原始数据:

原始数据假设所有male挂了, 所有的female活着, 我们需要检验是否正确。

9 计算男女的存活率:

需要学习过pandas或SQL, 这样更容易理解下面的语法:

women = train_data.loc[train_data.Sex == 'female']["Survived"]
rate_women = sum(women)/len(women)
print("% of women who survived:", rate_women)

% of women who survived: 0.7420382165605095

men = train_data.loc[train_data.Sex == 'male']["Survived"]
rate_men = sum(men) / len(men)
print("% of men who survived:", rate_men)

% of men who survived: 0.18890814558058924

语法: women = train_data.loc[train_data.Sex == ‘female’]代表
locate 表中Sex == ‘female’ 的所有项目, 然后再单独取[“Survived”]这一列。
sum()和len()是pandas的方法。

可见男女的存活比例差距很大, 但男人还是有一定的存活比例, 不然都挂了, 人类就该灭绝了。

但是这一数据是相当重要的, 即使我们什么都不做,直接预测所有女人存活, 我们就有了75%的正确率了。

如果我们还用用到其他参数, 比如船票, 舱位,是有有子女父母等,那就需要很大的运算量。

但是是否还有更好的模型可以利用。

10 ML 模型

在机器学习中sklearn, sci-kit-learn中有很多可以直接运用的模型, 这样大量减少了我们的编码与运算时间。

对于同一问题,多种模型都可解决, 不同的模型对于运算结果有很大的影响, 模型中参数的选择对于预测结果也有很大的影响, 而且每个人都有不同的偏好。通过对模型的不断理解可以针对不同问题, 选择合适的模型。

该问题, 我们用到random forest model。

入坑kaggle第二天- 详细分析Titanic - Machine Learning from Disaster
如果只用一颗树, 也就是决策树做模型, 可能会遇到很多问题, 如果树太深, 会造成overfitting, 如果叶子节点太少, 则会underfitting, 为了避免这样的问题, 我们可以用多颗决策树, 也就是random forest model, 通过多棵树(例如100), 然后取平均值, 一般会得到很好的结果。好比参加知识竞赛, 自己不会时, 求助现场观众, 如果多数选A, 那么就选A, 一般会得到正确的答案。至于数学证明, 暂时不会, 应该就是这样理解。

; 11 使用pandas注意事项

和使用SQL一样, 使用前需要保存原始数据, 不然数据经过修改, 无法恢复。

12 sklearn模型学习方法

建议边学machine learning, 边学sklearn, 如果不理解机器学习, 很难理解sklearn.

13 本题模型


import numpy as np
import pandas as pd

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

train_data = pd.read_csv("/kaggle/input/titanic/train.csv")
test_data = pd.read_csv("/kaggle/input/titanic/test.csv")
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)

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

Your submission was successfully saved!

our First Entry
Welcome to the leaderboard!

Your score represents your submission’s accuracy. For example, a score of 0.7 in this competition indicates you predicted Titanic survival correctly for 70% of people.

What next? You’ve got a few options:
💪Learn skills that can improve your score in our Intro to Machine Learning course by Dan Becker.

🔍Check out the discussion forum to find lots of tutorials and insights from other competitors.

🏆Find a new challenge by entering one of our open, active competitions or searching our public datasets.

14 模型优化

需要对年龄, 票价等处理, 明天完成。

Original: https://blog.csdn.net/weixin_43012796/article/details/112891688
Author: JasonDecode
Title: 入坑kaggle第二天- 详细分析Titanic – Machine Learning from Disaster

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/756605/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球