手把手教你可視化交叉驗證代碼,提高模型預測能力
選自KDNuggets
機器之心編譯
參與:劉曉坤、路雪
本文介紹了如何使用K折交叉驗證提高模型預測能力,並對代碼進行了可視化。
我們試著利用代碼可視化來提高模型預測能力。
比如說,你正在編寫一個漂亮清晰的機器學習代碼(例如線性回歸)。你的代碼還不錯,首先按照往常一樣用 train_test_split 這樣的函數將數據集分成「訓練集和測試集」兩個部分,並加入一些隨機因素。你的預測可能稍微欠擬合或過擬合,如下圖所示。
圖:欠擬合和過擬合情況下的預測結果
這些結果沒有變化。這個時候我們能做什麼呢?
正如題目所建議的,在學習了線性回歸之後,下一件有趣的事情就是交叉驗證了,因為它可以使用 K 折策略(K-Fold strategy)提高模型的預測能力。那 K 折究竟是什麼呢?下面我們將用代碼對此進行解釋。
完整的代碼如下:
圖:交叉驗證的可視化
代碼解析:
以上代碼可分為 4 個步驟。
1. 載入並分割目標數據集。
圖:載入數據集
將該數據集中的目標複製到 y 變數中。如果想看到數據集,請將 print 行的注釋符「#」刪除。
2. 模型選擇
圖:模型選擇(LinearRegression())
為簡化過程,我們將選擇使用線性回歸。如果想了解更多,請查看文章《Linear Regression: The Easier Way》。
3. 交叉驗證
圖:在 sklearn 中進行交叉驗證
這是 sklearn 中的流程,也是一個函數:
cross_val_predict(model, data, target, cv)
其中,
model 是我們選來要進行交叉驗證的模型。
data 是數據。
target 是數據的目標值。
cv(可選項)是數據摺疊的總次數(K 折)。
在這個流程中,我們不像往常一樣將數據集分成訓練集和測試集兩部分,如下圖所示。
圖:訓練集(藍色)和測試集(紅色)
我們將數據集平均分成 K 個部分(K 折或者 cv)。為了提高預測精度並實現更好地泛化,我們會在較大的數據集中進行模型訓練,在較小的數據集上測試。這裡,我們把 cv 設置成 6。
圖:6 個相同的部分
現在,模型分割的第一次迭代如下圖所示,其中紅色的是測試集,藍色的是訓練集。
圖:交叉驗證的第一次迭代
第二次迭代如下圖所示:
圖:交叉驗證的第二次迭代
以此類推,直到最後一次迭代,如下圖所示:
圖:交叉驗證的第六次迭代
4. 使用 Matplotlib 進行數據可視化
圖:使用 Matplotlib 進行可視化
為了將結果可視化,我們導入了 matplotlib 庫,然後創建一個 subplot(子圖)。
創建採用黑色(即 (0,0,0))邊框的散點。
使用 ax.plot 計算兩個軸的最大最小值,k-- 代表線型,lw=4 代表寬度。然後,給 x 軸和 y 軸加上標籤。最後,用 plt.show() 展示圖像。
結果如下:
圖:預測結果
這張圖展示了使用線性回歸模型對 Boston 數據集進行 K 折交叉驗證的結果。
我知道其實還有很多種交叉驗證方法,但 K 折交叉驗證是一個很好、很簡單的起點。
※這位被阿里挖來的亞馬遜最高級別華人科學家,聊了聊AI給新零售帶來的想像空間
※這3個85後技術男,代表了中國科技圈的新生力量
※伯克利提出強化學習新方法,可讓智能體同時學習多個解決方案
※人工智慧如何幫你找到好歌:探秘Spotify神奇的每周歌單
TAG:機器之心 |