機器學習入門 4-3 訓練數據集,測試數據
- 2019 年 11 月 13 日
- 筆記
本系列是《玩轉機器學習教程》一個整理的影片筆記。本小節主要介紹如何判斷機器學習的性能,train_test_split方法。
判斷機器學習演算法的性能
對於一個機器學習演算法,我們如何來判斷機器學習演算法的性能呢?

當前我們將全部數據集作為訓練集,使用訓練集訓練得到一個模型。具體在kNN演算法中,每當來了一個新數據的時候,新數據要和我們訓練集中所有數據計算他們之間的距離,然後選出前k個距離小的訓練集,然後統計這些被選出來的訓練集對應標籤,選擇標籤數最多的標籤作為新數據的預測標籤。
換句話我們用全部數據集作為訓練集得到的模型來預測新的數據所屬的類別,但是我們最終需要模型在真實的環境中使用,但是現在這樣做有很大的問題:
- 我們使用全部的數據集作為訓練集訓練模型,得到的模型只能拿到真實的環境中使用,但是如果我們訓練得到的模型很差的話,沒有機會去調整他,這樣帶來真實的損失;
- 在很多真實的場景中,其實很難得到相應的label標籤,因此即使直接拿到真實場景中使用,我們也沒有辦法知道我們的模型是好是壞;
綜上,如果我們使用全部的數據集當做訓練集訓練的模型投入到真實的環境中,這樣的做法是不可取的。解決這個問題最簡單的辦法,是將數據集劃分為訓練集和測試集。

全部數據集抽取70%或者80%當做訓練集,剩下的數據集作為測試集,這樣我們使用藍色的訓練集訓練出模型(此時需要注意測試集不能夠參與到訓練過程中),得到模型後,將測試集放到訓練好的模型中,讓模型進行預測,此時由於我們的測試集本身包含了真實的label值,這樣我們就可以通過將真實的label值與模型預測得到的label值進行比較,就可以知道模型的性能怎麼樣了。
因此,可以通過測試集來判斷模型的好壞。此時如果模型在測試集上結果不夠理想的話,說明模型不夠好,如果將這樣的模型放入真實環境中會帶來真實的損失,所以我們需要繼續改進我們的模型,想辦法得到更好模型,直到模型在測試集上得到的結果相對較好,此時可以相對有信心說明此時模型是比較好的。
這樣的方式叫做train_test_split。其實這種方式在判斷機器學習演算法性能的時候也會存在相應的問題,具體的後面會介紹。
程式碼實現




將train_test_split封裝成一個函數,將文件命名為"model_selection.py",存放到playML這個包下(含有__init__.py)。


在jupyter中調用封裝好的函數:



sklearn中的train_test_split
