機器學習實戰(zhàn)--線性回歸建模

image

本文將用“泰坦尼克船員獲救預測”這一案例展示一下使用線性回歸建模的流程苔可。

1.數(shù)據(jù)理解

首先導入原始的數(shù)據(jù)并展示數(shù)據(jù)的前5行焚辅,大致了解一下數(shù)據(jù)的情況。

原始數(shù)據(jù)中分別有以下幾列信息:PassengerId同蜻、Survived、pclass湾蔓、Name、Sex贬循、Age桃序、SibSp、Parch媒熊、Ticket、Fare滤愕、Cabin怜校、Embarked注竿。其中Survived表示是否存活也就是本次建模的目標變量。而顯然PassengerId巩割、Name、Ticket愈犹、Cabin是無意義或無法使用的變量闻丑。

import pandas as pd
titanic = pd.read_csv("train.csv") 
#導入數(shù)據(jù)
titanic.head() 
#展示原始數(shù)據(jù)的前5行,觀察數(shù)據(jù)的概況
image

2.數(shù)據(jù)預處理

輸入變量中性別和上船地點為字符串類型勋锤,需要轉(zhuǎn)化為數(shù)值類型才能用于建模侥祭。

titanic["Sex"].unique() 
#展示“性別”列的所有取值可能性茄厘,只有male和female
titanic["Embarked"].unique() 
#展示“上船地點”列的所有取值可能性谈宛,有S、C吆录、Q、null
titanic.loc[titanic["Sex"]=="male","Sex"]=0
titanic.loc[titanic["Sex"]=="female","Sex"]=1
titanic.loc[titanic["Embarked"]=="S","Embarked"]=0
titanic.loc[titanic["Embarked"]=="C","Embarked"]=1
titanic.loc[titanic["Embarked"]=="Q","Embarked"]=2

剛才我們看到上船地點一列中還有一部分缺失值葛假,可以這一列中取值概率最大的值來填充滋恬。

titanic.groupby("Embarked").size() 
#變量不同取值的分布情況
image

可以看到取值概率最大的為0,即S带斑。使用0對上船地點一列的缺失值進行填充勋拟。

titanic["Embarked"]=titanic["Embarked"].fillna(0)

打印數(shù)據(jù)集的統(tǒng)計信息,繼續(xù)觀察數(shù)據(jù)挂滓⌒ル剩可以發(fā)現(xiàn)年齡一列存在缺失值。

titanic.describe()
image

使用年齡的中位數(shù)對缺失值進行填充贝椿。

titanic["Age"]=titanic["Age"].fillna(titanic["Age"].median())

3.線性回歸建模

在建模這一步需要先對數(shù)據(jù)集進行劃分陷谱,分為訓練集和測試集,這里我們采用k重交叉驗證的方法烟逊。然后只要調(diào)用線性回歸模型,設置相應的參數(shù)然后代入數(shù)據(jù)進行訓練即可图毕。

from sklearn.linear_model import LinearRegression
#引入線性回歸的模型包
from sklearn.model_selection import KFold
#引入K重交叉驗證的模型包
predictors=["pclass","Sex","Age","SibSp","Parch","Fare","Embarked"]
#輸入建模輸入變量
alg=LinearRegression()
#定義一個變量等于線性回歸模型
kf=KFold(n_splits=3,shuffle=False,random_state=1)
#設置交叉驗證的相關(guān)參數(shù)眷唉,n_splits代表k
predictions=[]
#定義一個變量存放預測值
for train,test in kf.split(titanic[predictions]):
 train_predictors = (titanic[predictors].iloc[train,:])
 #取出訓練集中的船員特征屬性
 train_target = titanic["Survived"].iloc[train]
 #取出訓練集中是否獲救的結(jié)果
 #這里使用了3重交叉驗證囤官,所以訓練集數(shù)據(jù)對應就分別有三個數(shù)據(jù)集蛤虐,后續(xù)這三個訓練集會分別代入模型訓練,最終取平均值作為預測結(jié)果
 alg.fit(train_predictors,train_target)
 #將訓練集數(shù)據(jù)代入線性回歸模型進行訓練
 test_predictors = alg.predict(titanic[predictors].iloc[test,:])
 #使用測試集對模型進行測試
 predictions.append(test_predictors)
 #收集結(jié)果

4.模型評估

訓練完成之后就可以通過測試集得到的預測值通過混淆矩陣等方法對模型進行評估刑顺。下面我們可以先對預測值進行處理饲常,然后計算模型的準確率。

import numpy as np
predictions = np.concatenate(predictions,axis=0)
#將測試集得到的預測值連接起來放到一個變量中柒竞。在測試時由于是多重交叉驗證播聪,所以得到的結(jié)果實際上是存在三個數(shù)組中的
predictions[predictions >.5] = 1
predictions[predictions <=.5] = 0
predictions.dtype = "float64"
#將預測值大于0.5的定義為存活,預測值小于等于0.5的定義為未存活

print("測試數(shù)據(jù)總數(shù)量",len(predictions))
print("正確的數(shù)量:",sum(predictions == titanic["Survived"]))
accuracy = sum(predictions == titanic["Survived"]) / len(predictions)
print("準確率為:",accuracy)
image

可以看到此次建模的準確率約為78%稼虎,并不是特別高招刨。對于這種情況,我們可以從數(shù)據(jù)處理技巧沉眶、建模算法、參數(shù)調(diào)節(jié)等方面繼續(xù)深入探索,以得到更優(yōu)的模型淘衙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彤守,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子具垫,更是在濱河造成了極大的恐慌,老刑警劉巖卦碾,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異济榨,居然都是意外死亡绿映,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門叉弦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人库车,你說我怎么就攤上這事榄棵。” “怎么了疹鳄?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵瘪弓,是天一觀的道長。 經(jīng)常有香客問我腺怯,道長,這世上最難降的妖魔是什么虑乖? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任晾虑,我火速辦了婚禮,結(jié)果婚禮上糙捺,老公的妹妹穿的比我還像新娘笙隙。我一直安慰自己,他們只是感情好竟痰,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著边臼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柠并。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天鸣戴,我揣著相機與錄音粘拾,去河邊找鬼。 笑死入偷,一個胖子當著我的面吹牛械哟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暇咆,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼爸业,長吁一口氣:“原來是場噩夢啊……” “哼其骄!你這毒婦竟也來了扯旷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤某抓,失蹤者是張志新(化名)和其女友劉穎惰瓜,沒想到半個月后汉矿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡奈揍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年男翰,在試婚紗的時候發(fā)現(xiàn)自己被綠了另患。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛾绎。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡租冠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顽爹,到底是詐尸還是另有隱情,我是刑警寧澤镜粤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布肉渴,位于F島的核電站,受9級特大地震影響黄虱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捻浦,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望朱灿。 院中可真熱鬧,春花似錦跪楞、人聲如沸侣灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至校焦,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寨典,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工报亩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留墓猎,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓骗卜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寇仓。 傳聞我的和親對象是個殘疾皇子烤宙,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容