數據清洗與多個特徵提取-Kaggle和泰坦尼克號預測 雲計算 大數據 機器學習 雲計算可以通過機器學習演算法來處理大數據,機器學習演算法指把人的決策思想轉換成計算機可以理解的代碼和模型,並可以通過數據的讀入來優化自己的模型和決策,最終完成了一個機器大腦的構建,沒有演算法就不能處理大數據,沒有大數據就不能優化演算法的結果舉一個例子,谷歌搜索是如何與海量的用戶互動的 在搜索框中輸入關鍵詞,進行搜索後會出現搜索結果頁面,這個頁面以一個列表顯示,這個列表裡的結果已經按照相關性大小進行排序,用戶點擊結果頁面中的某一結果就完成了一次搜索這2個極為簡單的產品頁面完成了客戶反饋,一般好的搜索引擎搜索出的第一個結果即為最好的結果,是按照相關性大小進行降序排序的,用戶越往下點擊說明結果的相關性不夠好。(用戶點擊搜索這個行為數據可以使機器學習演算法得到優化) 所以機器學習的反饋閉環,必須是業務的天然有機部分,通過這個循環來優化學習演算法的決策過程。 使用Python實現泰坦尼克號項目 首先回顧一下機器學習的具體步驟 1、提出問題泰坦尼克號的故事中,導致這麼多人遇難的原因之一就是乘客和船員沒有足夠的救生艇。在上船前,露絲 就像船長提出救生艇不夠的問題。雖然倖存下來的人運氣有一些因素,但一些人比其他人更有可能生存,比如婦女,兒童和上層階級。 翻船前,除了傑克與露絲的愛情,泰坦尼克號還經歷了什麼?所以我們研究的問題是:什麼樣的人在泰坦尼克號中更容易存活?2、理解數據理解數據分為三部分: 1)採集數據:這一部分,根據研究問題,採集數據2)導入數據:你要分析的數據可能在excel文件,或者資料庫中,首先,你需要將數據導入到Python中的數據結構中。3)查看數據集信息2.1 採集數據關於這次這個項目的數據,來自kaggle的泰坦尼克號項目,對於kaggle的瞭解和學習請看kaggle這個項目的地址為https://www.kaggle.com/c/titanic#tutorials點擊Data即可進入數據下載頁面,這裡有三種文件,把文件下載 訓練文件:用於建立模型測試文件:使用模型對生產率進行預測,將預測結果提交給kaggle,kaggle會對模型正確率進行評估提交結果案例文件:給參與者提供的參考結果 2.2 導入數據下載好數據後導入pandas的數據框 可以看到測試數據比訓練數據少一個變數,即生存率預測。這就是建立模型後要預測的值,使用測試數據裏沒有這個變數的值 查看這個數據 下圖是列名的解析 查看這個數據集的描述統計信息,使用describe命令 發現年齡這一列比其他列的少,說明文件中存在缺失值,所以後面的數據處理階段需要將缺失值處理此外,船票價為0,可能是缺失的數值造成空值用0來代替,所以後面也要對這些值進行處理注意describe只能看到數值類型的統計信息,其他類型的數據不顯示所以我們可以用下圖的方法來查看數據 用info()方法查看每列的數據類型和總數從返回的結果,行數為1309條,而年齡和船艙號有極大的數據缺失,登船港口和船票價格也分別有2個和1個數據缺失,這為下一步數據清洗指明方向,知道哪些列需要處理,我們纔能有針對性的處理3、數據清洗 數據清醒也是上一個內容 數據分析的基本過程 中的內容1)、缺失數據處理這裡根據上一步用info()方法查看每列的數據類型和總數看出哪列需要對缺失值進行處理 數據類型缺失值處理 很多機器學習演算法為了訓練模型,要求所傳入的特徵中不能有空值。 對於數據類型,處理缺失值最簡單的方法就是用平均數來填充缺失值。 字元串類型缺失值處理 對於登船港口Embarked只有2個缺失數據,則用出現最頻繁的值來填充這2個缺失值即可 缺失量過大缺失值處理 對於客艙號Cabin,缺失了1014條數據,缺失量過大,沒有辦法處理所以填充為U,未知unknown,把它標出來 #查看最終缺失值處理情況,記住生成情況(Survived)這裡一列是我們的標籤,用來做機器學習預測的,不需要處理這一列 就這樣我們的數據清洗完畢,接下來用特徵工程選取與生存率相關性較大的特徵2)、特徵工程 什麼是特徵工程? 特徵工程處理方法 如何獲取哪些特徵是比較重要的,並通過業務邏輯來提取特徵,這需要和熟悉業務的業務員溝通,並將這些特徵反映到代碼中,通過實踐和經驗不斷嘗試產生新特徵以下是常用的三種提取特徵方法 對於分類數據,會用會用數值來代替類別,例如性別1代表男性、0代表女性,對於超過2個類別,會進行One-hot編碼什麼是One-hot編碼,如下圖 登船港口Embarked這一列裡面的3種數值S、C、Q,通過One-hot編碼,會為每一種類型別生成一個新特徵,這個新特徵稱為虛擬變數或者啞變數,每一記錄每一類別的值,某行的列值1表示乘客從這個港口上船,0則沒有從這個港口上船所以One-hot編碼指若原始數據有n種類別,那麼將這個特徵擴展為n種特徵,併當原始特徵值為第i種定性值時,對應的第i個類別擴展屬性為1,其他為0。One-hot編碼方式相比直接指定類別方式更為方便機器學習,不需要過多的調試下面把各特徵按照數據類型分類 3.2.1 分類數據:有直接類別的 乘客性別(Sex): 男性male,女性female 登船港口(Embarked):出發地點S=英國南安普頓Southampton,途徑地點1:C=法國 瑟堡市Cherbourg,出發地點2:Q=愛爾蘭 昆士敦Queenstown 客艙等級(Pclass):1=1等艙,2=2等艙,3=3等艙 性別(1)乘客性別(Sex): 男性male,女性female將性別的值映射為數值,男(male)對應數值1,女(female)對應數值0 登船港口(多種分類,是的為數值1,不是即標為數值0。使用one-hot編碼,產生虛擬模塊) 多種分類,是的為數值1,不是即標為數值0。使用one-hot編碼,產生虛擬模塊。embarkedDf = pd.DataFrame() embarkedDf = pd.get_dummies( full[Embarked] , prefix=Embarked ) embarkedDf.head() 先添加one-hot編碼產生的虛擬變數(dummy variables)到泰坦尼克號數據集fullfull = pd.concat([full,embarkedDf],axis=1) 然後因為已經使用登船港口(Embarked)進行了one-hot編碼產生了它的虛擬變數(dummy variables),所以這裡把登船港口(Embarked)刪掉。full.drop(Embarked,axis=1,inplace=True) full.head() 客艙等級(Pclass) 3.2.2分類數據:字元串姓名從姓名中提取頭銜,先將姓名列印出來看有什麼特徵 注意到在乘客名字(Name)中,有一個非常顯著的特點:乘客頭銜每個名字當中都包含了具體的稱謂或者說是頭銜,將這部分信息提取出來後可以作為非常有用一個新變數,可以幫助我們進行預測。如Braund, Mr. Owen Harris姓名的字元串格式: 名,頭銜. 姓這裡我們可以做一個練習,看提取頭銜的套路是什麼 首先定義函數從姓名中獲取頭銜。用到split函數和strip(用於移除字元串頭尾指定的字元,默認為空格 這是網上的頭銜對應的含義 Officer政府官員 Royalty王室(皇室) Mr已婚男士 Mrs已婚婦女 Miss年輕未婚女子 Master有技能的人/教師 可客號客艙號的首字母為其類別,可提取首字母進行分類使用下面使用Python的lambda來創建匿名函數,有的函數比較簡單,所以使用匿名函數比較簡便匿名函數指不使用def語句來標準定義一個函數,而使用 lambda 參數1,參數2:函數體 形式來定義函數,使用如下圖 接下來使用匿名函數來獲取客艙號的首字母作為類別 家庭類別家庭人數=同代直系親屬數(Parch)+不同代直系親屬數(SibSp)+乘客自己(因為乘客自己也是家庭成員的一個,所以這裡加1)家庭類別:小家庭Family_Single:家庭人數=1中等家庭Family_Small: 2<=家庭人數<=4大家庭Family_Large: 家庭人數>=5 就這樣我們提取了需要對數據進行處理的特徵3.3特徵選擇下面我們用相關係數進行特徵選擇我們先獲得數據集的相關係數矩陣,到目前總共有26個特徵 再查看各個特徵與生成情況(Survived)的相關係數,可以看出哪些特徵與生存情況有較高的相關性 正線性相關情況: 負線性相關情況: 根據各個特徵與生成情況(Survived)的相關係數大小,我們選擇這幾個特徵作為模型的輸入:頭銜(前面所在的數據集titleDf)、客艙等級(pclassDf)、家庭大小(familyDf)、船票價格(Fare)、船艙號(cabinDf)、登船港口(embarkedDf)、性別(Sex) 4、構建模型 坦尼克號測試數據集因為是我們最後要提交給Kaggle的,裡面沒有生存情況的值,所以不能用於評估模型。 我們將Kaggle泰坦尼克號項目給我們的測試數據,叫做預測數據集(記為pred,也就是預測英文單詞predict的縮寫)。 也就是我們使用機器學習模型來對其生存情況就那些預測。 我們使用Kaggle泰坦尼克號項目給的訓練數據集,做為我們的原始數據集(記為source), 從這個原始數據集中拆分出訓練數據集(記為train:用於模型訓練)和測試數據集(記為test:用於模型評估)。 4.1建立訓練數據集和測試數據集 從原始數據集中拆分出訓練數據集(記為train:用於模型訓練)和測試數據集(記為test:用於模型評估)。 接下來訓練模型預測泰坦尼克號上的人們生存或死亡是二分類問題,能進行分類的演算法很多,需要選擇一個合適的演算法進行訓練模型,我們從最簡單的邏輯回歸演算法開始,不像之前要去改變shape,使用sklearn的邏輯回歸三行代碼就可以搞定。 第1步,我們先導入這個包裏的邏輯回歸函數 第2步,我們創建邏輯回歸模型,並給模型命名為model 第3步,我們使用訓練數據來訓練模型,使用模型的fit函數就可以,傳入的第1個參數是訓練數據的特徵,第2個參數是訓練數據的標籤。 5、評估模型評估模型使用的是測試數據。因為我們這裡使用的是分類機器學習演算法,所以模型的score方法計算出的就是模型的準確率。 6、方案實施使用預測數據集得到預測結果,並保存到csv文件中,上傳到Kaggle中,就可以看到排名 這樣就完成了自己第一個數據分析+機器學習項目了,經常去挑戰Kaggle中的各種實踐案例,相信數據分析的能力會越來越強。 推薦閱讀: 相關文章 {{#data}} {{title}} {{/data}}