动手学数据分析(五)- 模型建立和评估
1 初心
本系列筆記用于記錄自己第一次參加Datawhale的組隊學習。自己馬上開啟研究生學習生涯,因此熟練掌握數據分析這一重要技能對未來的學習能夠提供很大的幫助,Datawhale團隊在項目初衷里說數據分析是一個要從一堆數字中看到真相的過程。學會操作數據只是數據分析的一半功力,剩下的另一半要用我們的大腦,多多思考,多多總結,更要多動手,實打實的的敲代碼。所以也希望在學習這門課時,多去推理,多去問問為什么;多多練習,確保理論實踐結合起來,在課程結束的時候一定會有大收獲。
因此希望自己再接下來的11天里面能夠實事求是、腳踏實地完成各項任務,提高自己的硬實力。
特別喜歡一句話:也許不負光陰就是最好的努力,而努力就是最好的自己。
學習內容: 經過前面的兩章的知識點的學習,我可以對數數據的本身進行處理,比如數據本身的增刪查補,還可以做必要的清洗工作。那么下面我們就要開始使用我們前面處理好的數據了。這一章我們要做的就是使用數據,我們做數據分析的目的也就是,運用我們的數據以及結合我的業務來得到某些我們需要知道的結果。那么分析的第一步就是建模,搭建一個預測模型或者其他模型;我們從這個模型的到結果之后,我們要分析我的模型是不是足夠的可靠,那我就需要評估這個模型。今天我們學習建模,下一節我們學習評估。
我們擁有的泰坦尼克號的數據集,那么我們這次的目的就是,完成泰坦尼克號存活預測這個任務。
首先,我們載入這些庫
讀取訓練數集
train = pd.read_csv('train.csv') train.shape train.head()2 特征工程
2.1 缺失值填充
對分類變量缺失值:填充某個缺失值字符(NA)、用最多類別的進行填充
對連續變量缺失值:填充均值、中位數、眾數
對分類變量進行填充
train['Cabin'] = train['Cabin'].fillna('NA') train['Embarked'] = train['Embarked'].fillna('S')對連續變量進行填充
train['Age'] = train['Age'].fillna(train['Age'].mean())檢查缺失值比例
train.isnull().sum().sort_values(ascending=False)2.2 編碼分類變量
取出所有的輸入特征
data = train[['Pclass','Sex','Age','SibSp','Parch','Fare', 'Embarked']]進行虛擬變量轉換
data = pd.get_dummies(data) data.head()3 模型搭建
- 處理完前面的數據我們就得到建模數據,下一步是選擇合適模型
- 在進行模型選擇之前我們需要先知道數據集最終是進行監督學習還是無監督學習
- 除了根據我們任務來選擇模型外,還可以根據數據樣本量以及特征的稀疏性來決定
- 剛開始我們總是先嘗試使用一個基本的模型來作為其baseline,進而再訓練其他模型做對比,最終選擇泛化能力或性能比較好的模型
sklearn模型算法選擇路徑圖
3.1 測試集和訓練集的劃分
- 按比例切割訓練集和測試集(一般測試集的比例有30%、25%、20%、15%和10%)
- 按目標變量分層進行等比切割
- 設置隨機種子以便結果能復現
提示:
- 切割數據集是為了后續能評估模型泛化能力
- sklearn中切割數據集的方法為train_test_split
- 查看函數文檔可以在jupyter noteboo里面使用train_test_split?后回車即可看到
- 分層和隨機種子在參數里尋找
一般先取出X和y后再切割,有些情況會使用到未切割的,這時候X和y就可以用
X = data y = train['Survived']對數據集進行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)查看數據形狀
X_train.shape, X_test.shape3.2 模型創建
- 創建基于線性模型的分類模型(邏輯回歸)
- 創建基于樹的分類模型(決策樹、隨機森林)
- 查看模型的參數,并更改參數值,觀察模型變化
提示
- 邏輯回歸不是回歸模型而是分類模型,不要與LinearRegression混淆
- 隨機森林其實是決策樹集成為了降低決策樹過擬合的情況
- 線性模型所在的模塊為sklearn.linear_model
- 樹模型所在的模塊為sklearn.ensemble
3.2.1 默認參數邏輯回歸模型
lr = LogisticRegression() lr.fit(X_train, y_train)
查看訓練集和測試集score值
調整參數后的邏輯回歸模型
3.2.2 默認參數的隨機森林分類模型
rfc = RandomForestClassifier() rfc.fit(X_train, y_train) print("Training set score: {:.2f}".format(rfc.score(X_train, y_train))) print("Testing set score: {:.2f}".format(rfc.score(X_test, y_test)))
調整參數后的隨機森林分類模型
3.3 輸出模型預測結果
- 輸出模型預測分類標簽
- 輸出不通分類標簽的預測概率
提示:
- 一般監督模型在sklearn里面有個predict能輸出預測標簽,predict_proba則可以輸出標簽概率
預測標簽
pred = lr.predict(X_train)此時我們可以看到0和1的數組
pred[:10]
預測標簽概率
4 模型評估
- 模型評估是為了知道模型的泛化能力。
- 交叉驗證(cross-validation)是一種評估泛化性能的統計學方法,它比單次劃分訓練集和測試集的方法更加穩定、全面。
- 在交叉驗證中,數據被多次劃分,并且需要訓練多個模型。
- 最常用的交叉驗證是 k 折交叉驗證(k-fold cross-validation),其中 k 是由用戶指定的數字,通常取 5 或 10。
- 準確率(precision)度量的是被預測為正例的樣本中有多少是真正的正例
- 召回率(recall)度量的是正類樣本中有多少被預測為正類
- f-分數是準確率與召回率的調和平均
4.1 交叉驗證
- 用10折交叉驗證來評估邏輯回歸模型
- 計算交叉驗證精度的平均值
交叉驗證在sklearn中的模塊為sklearn.model_selection
k折交叉驗證分數
scores
平均交叉驗證分數
4.2 混淆矩陣
- 計算二分類問題的混淆矩陣
- 計算精確率、召回率以及f-分數
提示:
- 混淆矩陣的方法在sklearn中的sklearn.metrics模塊
- 混淆矩陣需要輸入真實標簽和預測標簽
訓練模型
lr = LogisticRegression(C=100) lr.fit(X_train, y_train)模型預測結果
pred = lr.predict(X_train)混淆矩陣
confusion_matrix(y_train, pred) from sklearn.metrics import classification_report精確率、召回率以及f1-score
print(classification_report(y_train, pred))4.3 ROC曲線
繪制ROC曲線
提示:
- ROC曲線在sklearn中的模塊為sklearn.metrics
- ROC曲線下面所包圍的面積越大越好
總結
以上是生活随笔為你收集整理的动手学数据分析(五)- 模型建立和评估的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机软件实习项目三 —— 超级玛丽闯迷
- 下一篇: beyond compare 用法