參考了 https://www.itread01.com/content/1541158743.html 的資料
import pandas as pd
titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
數據資料可以用的大概就是 age年紀, sex性別, 可以看到有很多NaN
Features=titanic[['age','sex']]
Ans=titanic['survived']
所以我們取這三個做為輸入, 存活與否作為Ans
首先把sex裡面female, male數值化
Features['sex'].replace(['female','male'],[0,1], inplace=True)
然後可以把年齡缺失的值補上
Features['age'].fillna(Features['age'].mean(),inplace=True)
把NaN填入年齡平均
可以看到很多地方都填入31.194........
性別的部分也可以看到轉成0和1
from sklearn.model_selection import train_test_split
train_test_split(Features,Ans,test_size=0.1)
然後我們import入train_test_split, 喜歡九一切, 所以test_size選擇0.1, 代表一成是test資料
得到四個list, 細看就可以發現是train, test個別的資料, 所以改成
x_train,x_test,y_train,y_test = train_test_split(Features,Ans,test_size=0.1)
分別賦值給x_train等四個變數
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(x_train, y_train)
把我們的訓練資料套進去, 會顯示很多參數
clf.predict(x_test)
然後拿x_test來做預測, 會得到下面這堆0101的東西
這些是什麼的0101呢? 其實是survived的預測
那我們怎麼看到底預測正不正確?
參考 https://blog.csdn.net/CherDW/article/details/55813071
from sklearn.metrics import accuracy_score
pre = clf.predict(x_test)
accuracy_score(pre,y_test)
準確率大約73%, 好像沒有很厲害~
那怎麼把她畫出來
import graphviz
from sklearn.tree import export_graphviz
g=export_graphviz(clf, feature_names=['age','sex'], class_names='survived', filled= True)
graphviz.Source(g)
就會得出一個超大的圖, 我就不放了
那再加一個pclass也就是船艙等級看看呢? 這次我想把1st直接換成1, 2nd改成2, 3rd是3
完整程式碼如下 :
import pandas as pd
titanic=pd.read_csv('http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic.txt')
Features=titanic[['pclass','age','sex']]
Ans=titanic['survived']
Features['sex'].replace(['female','male'],[0,1], inplace=True)
Features['pclass'].replace(['1st','2nd','3rd'],[1,2,3], inplace=True)
from sklearn.model_selection import train_test_split
train_test_split(Features,Ans,test_size=0.1)
x_train,x_test,y_train,y_test = train_test_split(Features,Ans,test_size=0.1)
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()
clf.fit(x_train, y_train)
clf.predict(x_test)
from sklearn.metrics import accuracy_score
pre = clf.predict(x_test)
accuracy_score(pre,y_test)
八十五趴是不是感覺有點準呀???
留言列表