最近陸續準備熟悉一下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)