1. 程式人生 > >泰坦尼克生存概率分析,決策樹的應用

泰坦尼克生存概率分析,決策樹的應用

決策樹(decision tree)是一個樹結構(可以是二叉樹非二叉樹)。其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作為決策結果。

可以看到,決策樹的決策過程非常直觀,容易被人理解。目前決策樹已經成功運用於醫學,製造產業,天文學,分支生物學以及商業等諸多領域

import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.tree import DecisionTreeClassifier


def decision():
	# 載入檔案,得到資料
    # 決策樹對泰坦尼克號進行預測生死
    tian = pd.read_csv('Titanic.csv')
    # 處理資料,找出特徵值和目標值
    x = tian[['Pclass','Age','Sex']]
    y = tian['Survived']
    # print(x)
    # 缺失值處理
    x['Age'].fillna(x['Age'].mean(),inplace=True)
    # 分割資料集到訓練集和測試集
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
    dict = DictVectorizer(sparse=False)
    x_train = dict.fit_transform(x_train.to_dict(orient="records"))

    print(x_train)
    x_test = dict.transform(x_test.to_dict(orient="records"))
    # 用決策樹進行預測
    dec = DecisionTreeClassifier()
    dec.fit(x_train,y_train)
    # 預測準確率
    print(dec.predict(x_test))
    print("預測的準確率:",dec.score(x_test,y_test))

    rf = RandomForestClassifier(n_jobs=-1)
    param = {"n_estimators":[120,200,300,500,800,1200],"max_depth":[5,8,15,25,30]}
    # 網路搜尋與交叉驗證
    gc = GridSearchCV(rf,param_grid=param,cv=2)
    gc.fit(x_train,y_train)
    print("準確率:",gc.score(x_test,y_test))

    return None

if __name__ == '__main__':
    decision()