sklearn 相关性分析_用sklearn机器学习预测泰坦尼克号生存概率
前言
- 本文為練手記錄,適用于剛入門的朋友參照閱讀練習,大神請繞道,謝謝!
- 閱讀大約需要10分鐘。
一、理解項目概況并提出問題
1.1 登陸官網查看項目概況
Titanic: Machine Learning from Disaster?www.kaggle.com變量解釋:
下載三個數據集,測試數據,訓練數據和預測數據。
1.2 整體思路
1.3 提出問題
1)有沒有可能一些特定的人群如婦女兒童會比大多數人更容易存貨?
2)不同等第倉存貨概率是不是不同?
3)生存概率和年齡有關系嗎?
4)生存概率會不會收到家庭成員多少的影響?
二、數據理解、準備
2.1 數據查看、合并
首先我們通過pandas的read_.csv函數來導入兩個csv然后用shape函數看看行列。
通過train.append()來合并數據集。
合并的原因是因為訓練數據特征要和測試數據特征一致。
我們發現測試數據集比訓練數據集少一行是因為少了survive,這個參數是最后需要和預測數據集比對查看正確率的,所以會缺失。合并時忽略在appen參數加上ignore_index=True用NaN填充。
合并成功
我們通過describe()來查看數據類型的描述統計信息
用info函數查看所有列的行,可以查看缺失情況,為進一步數據清洗做準備。
2.2 通過可視化理解數據
我們對所有人的年齡進行可視化,發現年齡差距比較大。
我們對相關系數進行可視化,可以明顯的看出一些參數的正相關和負相關性大小,方便我們選取變量。
我們也可以通過散點圖發現年齡和生存率關系不是很大,和上圖相關系數所呈現的信息保持一致。
三、數據清洗,準備
3.1 處理float64缺失值:Age,Fare
對于數值型數據我們直接用平均值填充
full['Age']=full['Age'].fillna(full['Age'.mean()]) full['Fare']=full['Fare'].fillna(full['Fare'.mean()])3.2 處理object缺失:Cabin,Embarked
用value_counts()函數來查看每個屬性總和發現S最多,我們就用S填充
發現還存在控制,我們用U來表示未知。
用http://full.info()查看發現所有數據已經填充完畢
四、特征工程
數據分析當中核心就是提取數據特征,因為數據特征代表了和數據結果的聯系。
4.1 對各個變量進行分類
而具體提取數據特征的步驟大致為:
4.2 分類數據特征提取
分類數據主要有Sex,Cabin,Embarked,Pclass,Parch,SibSp,下面逐個清理。
1、性別
我們發現這里的性別是用male和female,我們要將其轉換成0,1.
首先定義映射的字典,
sex_mapDic={'male':1,
'female':0}
通過map函數讓每個數據進行自定義函數計算
full['Sex']=full['Sex'].map(sex_mapDict)
2、登陸港口Embarked
我們首先用創建DataFrame()二維數據表,之后用get_dummies(full['Embarked',prefix='Embarked'])來進行one-hot編碼存入二維表中。
(3)船艙等級Pclass
客艙等級也是一樣的步驟。
(4)船艙號Cabin
這里有一個知識點是lambda函數
直接定義:landba c:c[0]
代表輸入c輸出c[0] 非常簡單粗暴
(5)Parch,SibSp數據
接下來處理Parch,SibSp數據,先理解下這兩個數據是什么意思。
SibSp:表示船上兄弟姐妹數和配偶數量,理解為同代直系親屬數量,
Parch:表示船上父母數和子女數,理解為不同代直系親屬數量。
所以FamilySize等于=本人+sibsp+parch
這里和前面不同的是,前面可以直接1 2 3 等倉用特征提取函數,這里要進行范圍劃分所以要自己產生列,然后用map函數映射修改。
且這里的lambda函數有所不同用到了一個if判斷,寫法是if為真結果放前面,為假else結果放后面。
lambda s :1 if s==1 else 0
合并后發現已經有33個特征了
4.3 字符串數據提取特征
提取姓名的時候逗號前面是名字,逗號后面句號前面的是稱謂所以我們要用split函數提取兩次。
定義一個函數同樣用map映射批量修改。
發現老外的稱謂真的很多
定義數據字典,轉換onehot,重復的工作挺多。
五、獲取特征相關性
5.1 獲取corr矩陣
因為我們最終結果要知道是否生存,所以看survived這一列的相關性即可。
發現方框內幾列呈現正負相關性非常的強
于是乎我們組合這幾列27個影響因子。
六、準備數據
這里要清楚特征是我們提取的影響生存數的因素,標簽是生存數。
預測數據集在891行之后要進行區分。
七、模型建立、訓練
用sklearn的linear_model的邏輯回歸算法建立模型,并開始用拆分好的數據進行訓練:
可以看到我們把原始數據以28分,分成訓練數據和測試數據。
通過model.fit(train_x,train_y)進行訓練
八、模型的評估、預測
8.1 模型正確率評估
輸入model.score(test_x,test_y) 輸入測試特征和標簽進行評估分數
8.2 用模型進行預測,并按要求輸出
將前面準備的預測數據特征pre_x,用模型的predict方法預測生存數據pre_y,并整理成整數型int數據
8.3 提交
提交后我們就會看到我們的排名和成績
泰坦尼克號這個competition很適合機器學習的入門,大家可以自己動手實操起來,看著鴨哥剛開始給的思維導圖操練起來吧!
總結
以上是生活随笔為你收集整理的sklearn 相关性分析_用sklearn机器学习预测泰坦尼克号生存概率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python判断对错题_python 初
- 下一篇: python程序控制结构_python程