我們在訓(xùn)練我們的算法時要么必須排除這些非數(shù)值列( Name , Sex , Cabin , Embarked , Ticket ),要么就要找到一種方法將他們轉(zhuǎn)換成數(shù)值列。
我們將忽略 Ticket , Cabin , Name 這三行。因為我們不能從他們中提取出太多有用的信息。 Cabin 列大多數(shù)值都是缺失的(891行中只有204行數(shù)值),而且起初看起來好像也不是特別有用的列。如果沒有一些關(guān)于船票號碼意義的專業(yè)領(lǐng)域知識和哪些名字的特點像大戶或者有錢家庭,那么 Ticket 和 Name 列也不太可能會告訴我們太多的信息。
5:轉(zhuǎn)換性別 Sex 列
性別列是非數(shù)值的,但是我們想把它保留——他可能非常有用。我們將每一個性別用數(shù)值碼替換將其轉(zhuǎn)換成一個數(shù)值列。之后機器學(xué)習(xí)算法能夠使用這些類別去做預(yù)測。
為了完成這個目的,我們首先要找出列中所有的唯一性別(我們知道有male男和female女,但是有沒有可能誰在數(shù)據(jù)集用的是其他缺失值代碼呢?)。我們將0賦值給male,將1賦值給female。
我們可以選擇 Sex 列的所有值為male的行并且用0替換male:
titanic.loc[titanic['Sex']=='male','Sex'] = 0
titanic.loc[titanic['Sex']=='female','Sex'] = 1
# 有一個問題就是我自己測試的時候,describe()方法還是不顯示性別。
6:轉(zhuǎn)換登船 Embarked 列
我們現(xiàn)在可以用和轉(zhuǎn)換 Sex 列相同的方法將 Embarked 列轉(zhuǎn)換成數(shù)值碼。 Embarked 列的唯一值是 S,C,Q 和缺失值 nan 。每個字母是一個登船港口名字的縮寫。
第一步是替換列中的缺失值。大部分共同的登船港口都是 S ,所以我們假設(shè)每個人都是從那兒上船的。將 Embarked 列的缺失值全都替換成 S 。
我們分別將 0 賦值給 S ,將 1 賦值給 C ,將 2 賦值給 Q ,替換每個值相應(yīng)的代碼:
# Find all the unique values for "Embarked".
print(titanic["Embarked"].unique())
titanic['Embarked'] = titanic['Embarked'].fillna('S')
titanic.loc[titanic['Embarked'] == 'S', 'Embarked'] = 0
titanic.loc[titanic['Embarked'] == 'C', 'Embarked'] = 1
titanic.loc[titanic['Embarked'] == 'Q', 'Embarked'] = 2
7:交給機器學(xué)習(xí)
現(xiàn)在我們的數(shù)據(jù)已經(jīng)清洗得干凈了一點了,我們準(zhǔn)備開始探索一些機器學(xué)習(xí)。我們開始的一些行數(shù)據(jù)看起來像這樣:
Age |Sex |Survived
----|----|--------
10 | 0 |0
5 | 1 |1
30 | 0 |0
如果我們想利用 Age 列的數(shù)據(jù)來預(yù)測是否有人幸存或者沒有幸存,我們可以使用一種叫做線性回歸的方法。線性回歸的等式如下:(y=mx+b), y 的值是我們設(shè)法預(yù)測的, m 是一個叫做斜率的系數(shù), x 是一列的值, b 是一個叫做截距的常數(shù)。
我們可以通過賦值 -2 給 m ,賦值 20 給 b 做一個預(yù)測。我們得到這樣的結(jié)果:
AgeSexSurvivedPredictions1000-2*10+20=0511-2*5+20=103000-2*30+20=-40如果我們將得到的預(yù)測結(jié)果中任何大于0的值轉(zhuǎn)換成1,任何小于等于0的值換成0,我們將得到這樣的結(jié)果:
AgeSexSurvivedPredictions10000511130000這個簡單的模型預(yù)測幸存者相當(dāng)好。線性模型可以是一個非常強大的算法,但是也有一些缺點:
如果一個列和一個結(jié)果不是線性相關(guān),這就不會有好的效果。例如:如果除了80歲以上的老年女性也不幸存,那么線性回歸將不會有好效果。
它不能給你幸存率,只有具體的數(shù)值來表明某人是否幸存。
我們之后會討論如何處理這兩個問題?,F(xiàn)在,我們將學(xué)習(xí)如何自動的計算線性回歸的回歸系數(shù),如何用多列數(shù)據(jù)來預(yù)測一個結(jié)果。
8:交叉驗證
我們現(xiàn)在使用線性回歸在我們的訓(xùn)練數(shù)據(jù)集上做預(yù)測。
我們想用除我們做預(yù)測之外的不同的數(shù)據(jù)來訓(xùn)練算法。如果我們想避免過擬合這是非常關(guān)鍵的。過擬合是當(dāng)一個模型擬合它本身過于復(fù)雜,不顯著。每個數(shù)據(jù)都有其獨有的特點且不存在于全集。例如:如果我要求你利用一輛車的馬力和其他特征,并且給你一個隨機的非常高的最高速度數(shù)據(jù)集,來預(yù)測一輛車的最高速度,你將會建立一個速度過高的模型。解決的辦法就是用你沒有用來訓(xùn)練模型的數(shù)據(jù)去測試性能。
每一個機器學(xué)習(xí)算法都可以過擬合,即使有的(像線性回歸)非常不容易。如果你測試(評估)你的算法和你訓(xùn)練算法是用的同一個數(shù)據(jù)集,那么你很可能不知道它的性能好到底是算法很好還是因為過擬合它自己的噪聲。