數(shù)據(jù)分析機器學(xué)習(xí)的泰坦尼克案例-牛刀小試
我是51CTO學(xué)院講師唐宇迪,在51CTO學(xué)院“4.20 IT充電節(jié)”(4月19~20日)到來之際,和大家分享一下機器學(xué)習(xí)實戰(zhàn)案例經(jīng)驗。正文來啦~~~
數(shù)據(jù)分析太火爆,怎奈機器學(xué)習(xí)太難懂!隨著人工智能的浪潮襲來,機器學(xué)習(xí)已經(jīng)越來越火爆啦。數(shù)據(jù)分析與機器學(xué)習(xí)崗位可謂供不應(yīng)求,但是入門的門檻也是蠻高的,究竟是機器學(xué)習(xí)太難學(xué)還是咱們木有挑選到趁手的兵器呢?今天咱們的任務(wù)就是嘗試用Python去開啟一場數(shù)據(jù)分析和機器學(xué)習(xí)建模之旅,用最簡單的方式帶大家邁出機器學(xué)習(xí)的***步!
機器學(xué)習(xí):數(shù)據(jù)分析很好理解,就是挖掘出來我們需要的有價值的信息,那么機器學(xué)習(xí)又是什么呢?剛接觸這個領(lǐng)域的同學(xué)可能有些迷茫,這個詞看起來蠻高端的,我就來通俗的解釋一下,機器學(xué)習(xí)是我們要讓機器(咱們的電腦)在歷史的數(shù)據(jù)中去學(xué)習(xí)到一些數(shù)據(jù)分布的規(guī)則,然后應(yīng)用到新的數(shù)據(jù)中,這樣新的數(shù)據(jù)來了我們就可以做一系列任務(wù)啦,比如銀行根據(jù)歷史數(shù)據(jù)得出什么樣的人我會借給他多少錢,那么一個新來的同學(xué)來借錢,銀行就會得出一個明確值,借給他多少錢!機器學(xué)習(xí)的應(yīng)用已經(jīng)涉及到我們生活中的各個角落,隨著人工智能業(yè)的發(fā)展,相信機器學(xué)習(xí)的力量會使得我們生活的環(huán)境更上一層樓!
故事背景:今天要講的故事是咱們家喻戶曉的泰坦尼克號,那么咱們是要來回顧一下jack和rose的經(jīng)典動作嗎?這些只是咱們故事的開始,我們要做一件非常有意思的事情,去預(yù)測一下泰坦尼克號中,哪些成員能獲救。
挑選兵器:任務(wù)已經(jīng)明確下達,接下來的目的就是挑選幾個合適的兵器去進行預(yù)測的工作啦,咱們的主線是使用Python,因為在數(shù)據(jù)分析與機器學(xué)習(xí)界Python已經(jīng)成為一哥啦!首先介紹下咱們的兵器譜!
Numpy-科學(xué)計算庫 主要用來做矩陣運算,什么?你不知道哪里會用到矩陣,那么這樣想吧,咱們的數(shù)據(jù)就是行(樣本)和列(特征)組成的,那么數(shù)據(jù)本身不就是一個矩陣嘛。
Pandas-數(shù)據(jù)分析處理庫 很多小伙伴都在說用python處理數(shù)據(jù)很容易,那么容易在哪呢?其實有了pandas,很復(fù)雜的操作我們也可以一行代碼去解決掉!
Matplotlib-可視化庫 無論是分析還是建模,光靠好記性可不行,很有必要把結(jié)果和過程可視化的展示出來。
Scikit-Learn-機器學(xué)習(xí)庫 非常實用的機器學(xué)習(xí)算法庫,這里面包含了基本你覺得你能用上的所有機器學(xué)習(xí)算法啦。但還遠不止如此,還有很多預(yù)處理和評估的模塊等你來挖掘!
數(shù)據(jù)簡介:拿上這些趁手的兵器,我們趕緊干活吧,首先來看一下咱們的數(shù)據(jù)是長什么樣子的!接下來我們就用這些武器來應(yīng)對問題!
Pandas首先登場,我們用它來進行數(shù)據(jù)處理和分析是灰常方便的,首先讀取了.csv文件,又顯示了它的前5行數(shù)據(jù)。來簡單介紹一下數(shù)據(jù)中每一列都是什么意思。
PassengerId:一個乘客的ID號,這對我們來說好像沒啥大用呢,獲不獲救跟ID貌似沒啥大關(guān)系,暫且不用它!
Survived:這個就很重要了,它就是咱們的標(biāo)簽(LABEL)標(biāo)志著這個人到底是獲救了,還是沒獲救。
Pclass:乘客的船艙等級,是貴族還是平民呢?有3個船艙的等級。
Name:乘客的姓名,老外的名字真長啊~
Sex:只有二種~
Age:各個年齡段都有的
SibSp:與該船員一起登船的兄弟姐妹個數(shù)
Parch:老人和孩子個數(shù)
Ticket:船票~貌似咱們用不上這個編碼
Fare:船票的價格,貴族票還是蠻貴的
Cabin:太多的缺失值了,直接給它pass掉不用了
Embarked:登船的碼頭,只有3個地點
觀察可以發(fā)現(xiàn),對于Age這一列來說,只有714個值,而其他列都是891個值,這說明了什么呢?粗大事了,有缺失值,那怎么辦呢?這可以用很多種方法啦,用均值,眾數(shù),中位數(shù)都可以進行填充嘛。在這里,我們使用中位數(shù)來對缺失值進行了填充。這個不是個別現(xiàn)象,對于一份真實的數(shù)據(jù)來說,缺失值是灰常常見的現(xiàn)象!
再觀察一下數(shù)據(jù),數(shù)據(jù)中很多列的屬性值都是字符型的,這對我們有什么影響呢?咱們?nèi)祟惪梢哉J識這些male和female,但是計算機就不認識啦,它只認識數(shù)值,所以我們需要把字符值轉(zhuǎn)換成數(shù)值類型的。
核武器登場啦,使用scikit-learn可以輕松建立一個機器學(xué)習(xí)模型,這里我們使用邏輯回歸(經(jīng)典的二分類)完成這個案例,首先還是先來介紹下邏輯回歸是什么吧!
假設(shè)現(xiàn)在有兩個特征,工資和年齡。我們要根據(jù)這兩個指標(biāo)來預(yù)測一下銀行會借給這個人多少錢。那么,我們就可以建立出來這樣一個方程式!也就是說要找到最合適的一組參數(shù)使得我們最終預(yù)測的值和真實值越接近越好!但是我們現(xiàn)在要做的是一個分類任務(wù)呀!也就是說要得到一個類別值究竟是獲救了還是沒獲救,那么還需要往下再走一步。
這個函數(shù)可厲害了,我們來觀察一下,首先這個sigmoid函數(shù)的自變量取值范圍是負無窮到正無窮的,值域是在0到1區(qū)間上,也就是說任何一個數(shù)值進入sigmoid函數(shù)之后都會得到一個(0,1)區(qū)間上的值,相當(dāng)于是一個概率值了,那么我們就可以設(shè)置這樣一個閾值。比如一個概率值>0.5,我們把它當(dāng)成1這個類別(獲救啦);概率值<0.5,我們把它當(dāng)成0這個類別(很遺憾~)。在木有調(diào)節(jié)任何參數(shù)的情況下,精度已經(jīng)接近百分之八十啦!
特征選擇:現(xiàn)在我們要好好想一想啦,我們最終的預(yù)測結(jié)果的準(zhǔn)確程度和什么有關(guān)呢?一方面是我們選擇的機器學(xué)習(xí)模型,另一方面還有我們輸入的特征數(shù)據(jù),所以我們還得動動腦筋什么樣的特征更適合預(yù)測呢。腦洞大開時間到啦,這回我們把一個成員的家庭數(shù)量也統(tǒng)計了出來,就是兄弟姐妹+老人孩子,還有名字的長度(玄學(xué))以及稱謂Mr,Miss,Master等。加入這些的目的就是讓我們的特征更豐富一些,要想模型建立的好,特征的選擇很關(guān)鍵,在起步階段,我們需要盡可能多的提供有價值的特征。
建立好模型還木有結(jié)束呀,對于一個分析任務(wù)來說,我們也需要知道這些特征對***的結(jié)果產(chǎn)生了怎樣的影響,例如是性別對結(jié)果影響比較大還是年齡呢?這回我們也可以通過預(yù)測的結(jié)果和真實值之間進行對比來分析不同特征的重要程度!下圖中可以分析得出不同特征的重要程度的差異還是蠻大的,我們還可以進行取舍以及進一步分析啦!
使用Matplotlib來畫一個最簡單的條形圖,只需指定條形位置以及柱的高度即可,要進行可視化展示我們得長和它打交道啦!
這樣咱們完成了一個灰常簡單的預(yù)測任務(wù),首先通過數(shù)據(jù)預(yù)處理把我們的數(shù)據(jù)做的純凈一些,然后把這些字符值轉(zhuǎn)換成機器認識的數(shù)值,接下來讓機器通過這批歷史數(shù)據(jù)去學(xué)習(xí)一下什么樣的參數(shù)能夠***的擬合咱們的數(shù)據(jù),最終輸出來一個預(yù)測結(jié)果就完成這個簡單的任務(wù)啦!
51CTO學(xué)院 4.20 IT充電節(jié)
(19-20號兩天,100門視頻課程免單搶,更有視頻課程會員享6折,非會員享7折,套餐折上8折,微職位立減2000元鉅惠)
活動鏈接:http://edu.51cto.com/activity/lists/id-47.html?wenzhang
相關(guān)直播教程:





























