2019/04/10 10:10

# 背景

Titanic: Machine Learning from Disaster - Kaggle

2 年前就被推荐照着这个比赛做一下，结果我打开这个页面便蒙了，完全不知道该如何下手。

## Target

use machine learning to create a model that predicts which passengers survived the Titanic shipwreck

## Data

Titanic: Machine Learning from Disaster - Kaggle

• train.csv
• Survived: 1=yes, 0=No
• test.csv
• gender_submission.csv: for prediction
• PassengerId: those from test.csv
• Survived: final result

## Guide to help start and follow

Titanic Tutorial - Kaggle

## Learning Model

• random forest model
• constructed of several "trees"
• that will individually consider each passenger's data
• and vote on whether the individual survived.
• Then, the random forest model makes a democratic decision:
• the outcome with the most votes wins!

## sklearn.ensemble.RandomForestClassifier

Titanic比赛中用到的是 RandomForestClassifier 算法，在了解这个算法前，我注意到 sklearn 中这个算法类是在 ensemble 模块中，英文不好，不知道 ensemble 是什么意思？所以想先了解一下 ensemble

### ensemble

API Reference — scikit-learn 0.22.1 documentation中也能看出来这几种框架都有相应的算法。

Random Forestbagging 框架中的一个算法。这里就单先试着理解这个，其他框架等以后遇到了再说。但是了解这个之前，还是得先清楚 Ensemble Learning 到底是什么？

In statistics and machine learning, ensemble methods use multiple learning algorithms to obtain better predictive performance than could be obtained from any of the constituent learning algorithms alone.

### bagging 框架

sklearn.ensemble.BaggingClassifier — scikit-learn 0.22.1 documentation

A Bagging classifier is an ensemble meta-estimator that fits base classifiers each on random subsets of the original dataset and then aggregate their individual predictions (either by voting or by averaging) to form a final prediction.

• 从源数据集中随机抽样一部分子集样本
• 在这个子集样本上训练分类器
• 重复多次上述步骤
• 然后将各分类器的预测结果整合 （求平均或投票）
• 形成最终的预测

• 抽取多少次子集样本，即要做多少分类器？
• 随机抽取的算法用什么？
• 整合各分类器结果的时候，求平均和投票各有什么优劣势？
• 如何训练各个分类器？

### Random Forest 算法

1.11. Ensemble methods — scikit-learn 0.22.1 documentation

The prediction of the ensemble is given as the averaged prediction of the individual classifiers.

random forest builds multiple decision trees and merges them together to get a more accurate and stable prediction.

Random forest对每个分类器都建一个决策树，然后再合并。

from sklearn.ensemble import RandomForestClassifier

y = train_data["Survived"]

features = ["Pclass", "Sex", "SibSp", "Parch"]
X = pd.get_dummies(train_data[features])
model = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
model.fit(X, y)
• y：是训练集中灾难中存活的人的集合
• features: 是这些人的特征值，如性别，几等舱等
• X ：生成 dummy 数据，为什么要用 get_dummies而不是直接用train_data[features]呢？

Pclass     Sex  SibSp  Parch
0         3    male      1      0
1         1  female      1      0

ValueError: could not convert string to float: 'male'

get_dummies() 的作用也清楚了，就是将这些 string 类型的字段转化成 float 类型。从下面的打印结果也可以看出，Sex 字段被分成了两个字段，Sex_male, Sex_female, 其值分别是 0 和 1.

Pclass  SibSp  Parch  Sex_female  Sex_male
0         3      1      0           0         1
1         1      1      0           1         0
2         3      0      0           1         0
3         1      1      0           1         0
4         3      0      0           0         1
..      ...    ...    ...         ...       ...
886       2      0      0           0         1
887       1      0      0           1         0
888       3      1      2           1         0
889       1      0      0           0         1
890       3      0      0           0         1
• RandomForestClassifier(n_estimators=100, max_depth=5, random_state=1)
• 这几个参数分别是什么意思？
• n_estimators ： 决策树的数量
• max_depths：决策树的最大深度
• random_state: 控制随机数生成器的，（实际没太明白，这个随机是不是指随机抽样？），可能要和其他参数配合用比如 shuffle。另外还提到，这个数用了控制随机算法，使得运行多次每次都还是产生相同结果？
• To make a randomized algorithm deterministic (i.e. running it multiple times will produce the same result), an arbitrary integer random_state can be used

## Random Forest的应用场景

• 你在决定去哪儿旅行，去询问你的朋友
• 朋友问，你以前的旅行中喜欢和不喜欢的方面都哪些
• 在这个基础上给出了一些建议
• 这为你的决策提供了素材
• 同样的步骤，你又去询问另一个朋友
• 以及另另一个朋友
• ...

## 学到的几个之前不熟悉的代码

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

0
0 收藏

0 评论
0 收藏
0