之前就看過很多文章教學,一直想練習一次。但是沒啥執行力,剛好趁這次機會逼迫自己放棄耍費的時間。
實驗環境、語言 : Ubuntu 18.04、Python3
在安裝環境就遇到了許多問題 = ='
簡單說就是為了避免一堆東西沒升級,所以就無腦下
sudo apt-get update
sudo apt-get upgrade
結果造成某些process因為某些原因pending在系統上,並且在update & upgrade 過程中,會將/var/lib/dpkg/lock-fronted 這資料夾lock住(我猜是避免有deadlock的產生)
這資料夾被lock住,有許多cmd就沒辦法做事拉,像是pip
這問題要怎麼解呢?
- sudo lsof /var/lib/dpkg/lock-fronted
- 找出是哪個process正在使用這個資料夾
- sudo kill process_ID
- 重下 sudo apt-get install -f
好以上都不是重點。
這題主要是要預估乘客生存率
所以資料及有
- PassengerId 乘客編號
- Survived 是否倖存
- Pclass 船票等級
- Name 乘客姓名
- Sex 乘客性別
- Age 年齡
- SibSp 堂兄弟妹
- Parch 父母與小孩
- Ticket 船票號碼
- Fare 船票價格
- Cabin 船艙
- Embarked 登入港口
嘗試透過各個資料去找出其中的關連性
首先就是將各個module import近來
import pandas as pd
import numpy as np
import seaborn as seab
import matplotlib.pyplot as plt
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
submit = pd.read_csv('gender_submisson.csv')
先看看train / test 有什麼樣的東西
從info()可以看的出來,資料大概有891比,其中某些欄位有缺少幾筆data,像是Age、Cabin。
接下來做整體資料的觀察,因此將train&test合併
data = train.append(test)
data.reset_index(inplace=True,drop=True)
接下來就可以透過整體的資料看點東西了。
整體存活率
存活率與船艙的關係(橫軸船艙等級)
性別與存活率的關係(橫軸性別等級)
出發港口與存活率的關係(橫軸性別等級)
由上述可以得到結論為
- 生存率 : 女生>男生
- 船艙越好的生存率越高
- 從港口S出發的生存率較低是因為票價較便宜(同第二點)
決策樹 (Decision Tree)
好 這邊先歪個樓
來介紹 決策樹 (Decision Tree)
決策樹簡而言之就是一種樹狀結構。
最上面是 Root 最下面的 leaf 則是分類結果。
透過樹狀結構來處理分類問題。
選出最能夠分類的屬性來當作每一個節點,這樣才能從根走到葉的過程中有效的分類。
至於甚麼樣的分類屬性是好的呢?
目前常用 Information Gain 與 Gini Index
Information Gain 資訊獲利 (Entropy)
Entropy : 熵(亂度)
熵是對某個系統之不確定性或混亂程度的度量方法
Entropy = -p log2 p – q log2q
當機率月平均,就代表這個事件機率越均勻,Entropy則越高。
越不好進行預測。
變數的不確定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。
該事件的機率p x log2(p)
因此在決策樹中的應用,應該是要選小的Entropy(變數不確定性越小)才是好的判斷方式。
Gini Impurity
同理也是選大的
當機率越不平均,越能夠表現出是不是好的判斷方式。
當我們建出樹後,就可透過每一個節點去判斷屬於哪個分類了。
這個就是決策樹原理。
而Random forest 就是合併很多顆決策樹XD
剩下的債明天補 XD