最近陆续准备熟悉一下sklearn库,在此做一下记录。
这篇文章是简短的对于decision tree的kaggle上的实战记录,详细的请见github
一.数据集:
是一个二分类问题,给你每个人的一些feature,判断最后是否会Survive。
二.数据处理:
参考here
1.丢弃无用的'PassengerId','Name','Ticket'特征
2.Embarked,one-hot编码,缺失值填众数'S'
3.Fare,缺失值用中位数填充
4.Age,缺失值用(mean-std,mean+std)的随机数填充,
5.Cabin,缺失值过多,直接删掉
6.将SibSp 和 Parch合并成一个feature——family
7.通过分析,儿童(Age<16) Survival的概率很大,因此sex分为males,females,child
8.对Pclass进行one-hot编码
三.sklearn.tree.DecisionTreeClassifier
主要是利用sklearn.tree.DecisionTreeClassifier来进行测验
参数介绍:
1.criterion : 衡量特征选择的标准,默认是基尼指数:gini
2.splitter : 划分节点时,划分的方式,默认是最优划分:best
3.max_features : 建树时最大的特征数,即中间节点的个数,默认是:None 即max_features=n_features。一定程度上缓解过拟合
4.max_depth : 树的最大深度,默认是None,即正常的根据特征建树直到所有节点只含一个样本或者含有的样本数量少于最小的数量(min_samples_split)为止。
5.min_samples_split :当当前节点的样本数大于min_samples时,继续划分,默认min_samples_split =2
6.min_samples_leaf : 每个叶子节点所含的最少的样本数量,默认是1
7.min_weight_fraction_leaf : 对于每一个叶子节点而言,所有样本数据到达这个叶子节点所需的权重之和的最小值,默认是0.
8.max_leaf_nodes :以BFS方式生成树,树的最大叶子节点数,即BFS到叶子节点时,要是树的叶子节点总数=max_leaf_nodes时,就结束。默认None,即没有限制。
9.class_weight : 对于多分类任务而言,输出有n类,则需要用class_weight来设置每一类所占的权重,默认:None,即所有类权重均为1。
10.random_state : 随机状态,不太清楚作用是什么,splitter=‘random’时起作用??默认是None,即np.random生成
11.min_impurity_split :用来做early-stop的,当节点的impurity(纯度??混乱度??)值小于min_impurity_split 时,不再进行继续划分。默认是1e-7
12.presort : 对于数据集进行排序,目的是更加快速的建树,当数据集过大的时候不可取,因为排序所需的时间成本过大。默认:False,即不进行排序。
四.代码实现
更详细的代码见github
decisionTree1 = DecisionTreeClassifier()
decisionTree1.fit(X_train, Y_train)
Y_decisionTree_pred1 = decisionTree1.predict(X_test)
decisionTree1.score(X_train, Y_train)