題目
以泰坦尼克號的人員名單為草料,從多個維度值決定一個人是否會遇難。目前我們手上有一份真實的泰坦尼克號的所有人員名單,其中有一列是 Survived, 也就是此人是否遇難。現在的要求是,根據 Pclass
,Fare
,Age
,Sex
列的值來訓練模型。
正文
引入資料
import pandas as pd
df = pd.read_csv('/Users/rachel/Sites/pandas/py/ML/9_decision_tree/Exercise/titanic.csv')
df.head()
輸出
去掉對是否生還結果沒有影響的欄位
df = df.drop(['PassengerId', 'Name', 'SibSp', 'Parch', 'Ticket','Cabin','Embarked'], axis = 'columns')
df.head()
輸出:
把非數字列的值轉為數字
from sklearn.preprocessing import LabelEncoder
le_sex = LabelEncoder()
df.Sex = le_sex.fit_transform(df.Sex)
df.head()
輸出:
取出用於訓練的 X 列
input = df.drop('Survived', axis = 'columns')
input[:10]
輸出:
用平均值填充 NAN
input = input.fillna(input.Age.median())
input[:10]
輸出:
劃分訓練資料和測試資料
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(input, target, test_size = 0.2)
訓練模型
from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(X_train, y_train)
model.score(X_test, y_test) // 輸出: 0.7821229050279329