2021-07-19

模型搭建和評估

1經(jīng)過前面的探索性數(shù)據(jù)分析我們可以很清楚的了解到數(shù)據(jù)集的情況

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from IPython.display import Image
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用來正常顯示中文標(biāo)簽
plt.rcParams['axes.unicode_minus'] = False  # 用來正常顯示負(fù)號
plt.rcParams['figure.figsize'] = (10, 6)  # 設(shè)置輸出圖片大小
# 讀取訓(xùn)練數(shù)集
train = pd.read_csv('train.csv')
train.shape
image.png
train.head()
image.png

2.特征工程

(1)缺失值填充

  • 對分類變量缺失值:填充某個(gè)缺失值字符(NA)证逻、用最多類別的進(jìn)行填充
  • 對連續(xù)變量缺失值:填充均值、中位數(shù)男公、眾數(shù)
# 對分類變量進(jìn)行填充
train['Cabin'] = train['Cabin'].fillna('NA')
train['Embarked'] = train['Embarked'].fillna('S')
# 對連續(xù)變量進(jìn)行填充
train['Age'] = train['Age'].fillna(train['Age'].mean())
# 檢查缺失值比例
train.isnull().sum().sort_values(ascending=False)
image.png

(2)編碼分類變量

# 取出所有的輸入特征
data = train[['Pclass','Sex','Age','SibSp','Parch','Fare', 'Embarked']]
# 進(jìn)行虛擬變量轉(zhuǎn)換
data = pd.get_dummies(data)
data.head()

image.png

3.模型搭建

處理完前面的數(shù)據(jù)我們就得到建模數(shù)據(jù)车摄,下一步是選擇合適模型
在進(jìn)行模型選擇之前我們需要先知道數(shù)據(jù)集最終是進(jìn)行監(jiān)督學(xué)習(xí)還是無監(jiān)督學(xué)習(xí)
除了根據(jù)我們?nèi)蝿?wù)來選擇模型外,還可以根據(jù)數(shù)據(jù)樣本量以及特征的稀疏性來決定
剛開始我們總是先嘗試使用一個(gè)基本的模型來作為其baseline,進(jìn)而再訓(xùn)練其他模型做對比没宾,最終選擇泛化能力或性能比較好的模型

(1)# sklearn模型算法選擇路徑圖

Image('20170624105439491.png')
image.png

(2)切割訓(xùn)練集和測試集

  • 按比例切割訓(xùn)練集和測試集(一般測試集的比例有30%、25%沸柔、20%循衰、15%和10%)
  • 按目標(biāo)變量分層進(jìn)行等比切割
  • 設(shè)置隨機(jī)種子以便結(jié)果能復(fù)現(xiàn)

提示1

  • 切割數(shù)據(jù)集是為了后續(xù)能評估模型泛化能力
  • sklearn中切割數(shù)據(jù)集的方法為train_test_split
  • 查看函數(shù)文檔可以在jupyter noteboo里面使用train_test_split?后回車即可看到
  • 分層和隨機(jī)種子在參數(shù)里尋找
from sklearn.model_selection import train_test_split
# 一般先取出X和y后再切割,有些情況會使用到未切割的褐澎,這時(shí)候X和y就可以用
X = data
y = train['Survived']
# 對數(shù)據(jù)集進(jìn)行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# 查看數(shù)據(jù)形狀
X_train.shape, X_test.shape
image.png

(3)模型創(chuàng)建

  • 創(chuàng)建基于線性模型的分類模型(邏輯回歸)
  • 創(chuàng)建基于樹的分類模型(決策樹会钝、隨機(jī)森林)
  • 查看模型的參數(shù),并更改參數(shù)值工三,觀察模型變化
    提示2
  • 邏輯回歸不是回歸模型而是分類模型迁酸,不要與LinearRegression混淆
  • 隨機(jī)森林其實(shí)是決策樹集成為了降低決策樹過擬合的情況
  • 線性模型所在的模塊為sklearn.linear_model
  • 樹模型所在的模塊為sklearn.ensemble
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
# 默認(rèn)參數(shù)邏輯回歸模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
image.png
# 查看訓(xùn)練集和測試集score值
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))
image.png
# 調(diào)整參數(shù)后的邏輯回歸模型
lr2 = LogisticRegression(C=100)
lr2.fit(X_train, y_train)
image.png
print("Training set score: {:.2f}".format(lr2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr2.score(X_test, y_test)))
image.png
# 默認(rèn)參數(shù)的隨機(jī)森林分類模型
rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
image.png
print("Training set score: {:.2f}".format(rfc.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc.score(X_test, y_test)))

image.png
# 調(diào)整參數(shù)后的隨機(jī)森林分類模型
rfc2 = RandomForestClassifier(n_estimators=100, max_depth=5)
rfc2.fit(X_train, y_train)
image.png
print("Training set score: {:.2f}".format(rfc2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc2.score(X_test, y_test)))
image.png

(4)輸出模型預(yù)測結(jié)果

  • 輸出模型預(yù)測分類標(biāo)簽
  • 輸出不通分類標(biāo)簽的預(yù)測概率

提示

  • 一般監(jiān)督模型在sklearn里面有個(gè)predict能輸出預(yù)測標(biāo)簽,predict_proba則可以輸出標(biāo)簽概率
    image.png

(5)模型評估

  • 模型評估是為了知道模型的泛化能力俭正。
  • 交叉驗(yàn)證(cross-validation)是一種評估泛化性能的統(tǒng)計(jì)學(xué)方法奸鬓,它比單次劃分訓(xùn)練集和測試集的方法更加穩(wěn)定、全面掸读。
  • 在交叉驗(yàn)證中串远,數(shù)據(jù)被多次劃分宏多,并且需要訓(xùn)練多個(gè)模型。
  • 最常用的交叉驗(yàn)證是 k 折交叉驗(yàn)證(k-fold cross-validation)抑淫,其中 k 是由用戶指定的數(shù)字绷落,通常取 5 或 10。
  • 準(zhǔn)確率(precision)度量的是被預(yù)測為正例的樣本中有多少是真正的正例
  • 召回率(recall)度量的是正類樣本中有多少被預(yù)測為正類
  • f-分?jǐn)?shù)是準(zhǔn)確率與召回率的調(diào)和平均


    image.png

    image.png

    image.png
image.png

image.png

image.png
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末始苇,一起剝皮案震驚了整個(gè)濱河市砌烁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌催式,老刑警劉巖函喉,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異荣月,居然都是意外死亡管呵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進(jìn)店門哺窄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捐下,“玉大人,你說我怎么就攤上這事萌业】澜螅” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵生年,是天一觀的道長婴程。 經(jīng)常有香客問我,道長抱婉,這世上最難降的妖魔是什么档叔? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮蒸绩,結(jié)果婚禮上衙四,老公的妹妹穿的比我還像新娘。我一直安慰自己患亿,他們只是感情好传蹈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窍育,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宴胧。 梳的紋絲不亂的頭發(fā)上漱抓,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機(jī)與錄音恕齐,去河邊找鬼乞娄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仪或。 我是一名探鬼主播确镊,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼范删!你這毒婦竟也來了蕾域?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤到旦,失蹤者是張志新(化名)和其女友劉穎旨巷,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體添忘,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡采呐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搁骑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斧吐。...
    茶點(diǎn)故事閱讀 38,683評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仲器,靈堂內(nèi)的尸體忽然破棺而出煤率,到底是詐尸還是另有隱情,我是刑警寧澤娄周,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布涕侈,位于F島的核電站,受9級特大地震影響煤辨,放射性物質(zhì)發(fā)生泄漏裳涛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一众辨、第九天 我趴在偏房一處隱蔽的房頂上張望端三。 院中可真熱鬧,春花似錦鹃彻、人聲如沸郊闯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽团赁。三九已至,卻和暖如春谨履,著一層夾襖步出監(jiān)牢的瞬間欢摄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工笋粟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怀挠,地道東北人析蝴。 一個(gè)月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绿淋,于是被迫代替她去往敵國和親闷畸。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評論 2 349

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