數據分析面試、筆試題彙總+解析(四)

今天解決最後一道題👉:把數據集隨機劃分爲訓練集和測試集,按8:2的比例。(本來應該週六就更新的,因爲臨時接了朋友一個自動下單程序的需求就耽擱了😂)

一般情況都會用傳統定比隨機劃分(掌櫃自己取得名字。。。也有人叫留出法?)法,即使用sklearn庫裏面的model_selection模塊的train_test_split方法。這裏掌櫃就直接拿官方的鳶尾花數據集示例來演示一下:
在這裏插入圖片描述
在這裏插入圖片描述
這👆也正是此題的考點。到這裏就把之前面試的Python數據分析題全部解答完畢😁。

------------------------------------我是一條無感情的分割線-------------------------------------------

下面掌櫃開始拓展一下 。上面的隨機劃分法若後面進行機器學習模型調參的話,就會存在一定的缺點,即測試集上面仍有 過擬合 情況的發生。 於是掌櫃去看官方文檔後發現,爲了解決這種風險的發生,引入了驗證集的方法,即先把訓練後的模型放在驗證集上面進行評估,若評估實驗是成功的,再放入測試集上面進行最後的模型評估。

但是這個方法還是有弊端,因爲它減小了模型訓練集的樣本量,這就會導致最後的結果是依賴子集(驗證集、測試集)的隨機選擇。

所以爲了解決這個問題,下面就引出第二種劃分數據集的方法-- 交叉驗證法👈。那麼問題來了,什麼是交叉驗證? 通俗的講就是一種驗證分類模型準確率的方法。作用是爲了解決數據集不多的情況下的過擬合問題。

交叉驗證法中最基本的就是K折交叉驗證法(即 k-fold CV),這裏簡單說一下K折交叉驗證法的過程

  • 首先把訓練集分爲K個等份;
  • 接着對每一份子集進行再劃分,其中把K-1份當此份子集的訓練集
  • 剩餘的那份數據則被拿來驗證前面訓練子集的結果(比如模型的準確率);
  • 然後經過上面的K次循環,再把得到的K份數據結果求平均。
  • 最後得到的這個均值就可以作爲該數據集的性能指標

後面就是通過該指標和 Grid Search 方法來找到最優參數,再放到測試集上做最後的模型預測和性能評估。

可以看下面這兩圖更易理解上面的整個過程:
在這裏插入圖片描述
(上圖👆是K折交叉驗證圖發生的過程)
在這裏插入圖片描述
(此圖則是模型訓練中的交叉驗證流程圖👆)

K折交叉驗證法的優點

  1. 樣本數據集數量較少(如處理逆向推斷問題時)是一個極大的優勢,因爲數據不會被浪費很多(正如它固定了任意驗證集);
  2. 在一定程度上減少了過擬合。

缺點:

此方法計算成本很大,即費時!所以數據量很大的時候並不會常用此方法。

那麼K折交叉驗證法適用場景也在👆的優點裏面,通常K值選的是10。

最後來看如何使用交叉驗證,最簡單的方法就是調用 cross_val_score 輔助函數。可以看官方這個示例,這裏用的K值是5:

from sklearn.model_selection import cross_val_score

clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, X, y, cv=5)
scores

>>> array([0.96..., 1.  ..., 0.96..., 0.96..., 1.        ])

參考資料:sklearn官方文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章