机器学习数据集的获取和测试集的构建方法
這是機器學(xué)習(xí)入門系列(2)–如何構(gòu)建一個完整的機器學(xué)習(xí)項目的第二篇
上一篇機器學(xué)習(xí)入門系列(2)–如何構(gòu)建一個完整的機器學(xué)習(xí)項目(一)介紹了開始一個機器學(xué)習(xí)項目需要明確的問題,比如當(dāng)前任務(wù)屬于有監(jiān)督還是無監(jiān)督學(xué)習(xí)問題,然后性能指標(biāo)需要選擇什么,常用的分類和回歸損失函數(shù)有哪些,以及實際開發(fā)中需要明確系統(tǒng)的輸入輸出接口問題。
第二篇,會介紹下如何獲取數(shù)據(jù)集和構(gòu)建測試集的方法。前者,對于機器學(xué)習(xí)來說,數(shù)據(jù)集的好壞對模型性能有很大的影響。而后者,主要是避免兩個偏差–數(shù)據(jù)透視偏差和采樣偏差。
2. 獲取數(shù)據(jù)
2.1 常用數(shù)據(jù)集
在我們學(xué)習(xí)機器學(xué)習(xí)的時候,最好使用真實數(shù)據(jù),即符合真實場景的數(shù)據(jù)集,而不是人工數(shù)據(jù)集,采用這種人工數(shù)據(jù)集在實際應(yīng)用中會讓系統(tǒng)表現(xiàn)很糟糕,因為人工數(shù)據(jù)集一般都和真實場景下的數(shù)據(jù)有較大的差異。幸運的是,現(xiàn)在有非常多的開源數(shù)據(jù)集,并且涵蓋了多個領(lǐng)域,這里介紹幾個常用的可以查找數(shù)據(jù)集的網(wǎng)站以及一些在計算機視覺常用的圖像數(shù)據(jù)集:
常用的部分圖像數(shù)據(jù)集:
2.2 準(zhǔn)備開發(fā)環(huán)境
在找到數(shù)據(jù)集,并下載后,我們就需要開始準(zhǔn)備開發(fā)環(huán)境,也就是需要采用的編程語言和相應(yīng)的框架。
現(xiàn)在機器學(xué)習(xí),一般都是采用 Python 語言,因為它簡單易學(xué),對程序員非常友好,而且也有相應(yīng)很多應(yīng)用于機器學(xué)習(xí)和深度學(xué)習(xí)方面的框架,比如 scikit-learn,opencv,深度學(xué)習(xí)方面的TensorFlow, Pytorch, Keras等。
而為了方便可視化數(shù)據(jù),查看代碼運行效果,通常會選擇采用 Jupyter 這個模塊。其他必要的 Python 模塊有:
- Numpy:一個運行速度非??斓臄?shù)學(xué)庫,主要用于數(shù)組計算,支持大量的維度數(shù)據(jù)和矩陣運算
- Pandas:快速處理數(shù)據(jù)和分析數(shù)據(jù)
- Matplotlib: 繪圖,可視化數(shù)據(jù)
此外,python 比較不友好的問題就是 2.7 版本和 3.+ 版本的不兼容問題,所以我們需要有一個包管理工具,可以單獨配置不同的開發(fā)環(huán)境,這里推薦使用的是 Anaconda。
這些模塊的安裝,網(wǎng)上都有非常多詳細(xì)的教程,這里就不花時間介紹了。
2.3 創(chuàng)建測試集
在下載數(shù)據(jù)后,首先要做的是創(chuàng)建測試集,這是在分析數(shù)據(jù)前先排除測試集的數(shù)據(jù),不會引入測試數(shù)據(jù)的規(guī)律,從而影響算法的選擇,保證采用測試集進行測試的結(jié)果是客觀可信的,而不會出現(xiàn)數(shù)據(jù)透視偏差的問題。
數(shù)據(jù)透視偏差:即由于選擇模型時候參考了測試集的規(guī)律,導(dǎo)致在測試集上準(zhǔn)確率很好,但實際應(yīng)用的時候,系統(tǒng)表現(xiàn)很糟糕的情況。
一般我們會按照 8:2 的比例劃分訓(xùn)練集和測試集,可以采用如下代碼,隨機劃分出測試集:
import numpy as npdef split_train_test(data, test_ratio):shuffled_indices = np.random.permutation(len(data))test_set_size = int(len(data) * test_ratio)test_indices = shuffled_indices[:test_set_size]train_indices = shuffled_indices[test_set_size:]return data.iloc[train_indices], data.iloc[test_indices]train_set, test_set = split_train_test(housing, 0.2)當(dāng)然,這個方法存在一個缺陷:每次運行會得到不同的測試集!
解決的辦法有以下幾種:
劃分?jǐn)?shù)據(jù)集也可以采用Scikit-Learn庫的一些函數(shù),最簡單也是最常用的就是 train_test_split函數(shù),它和上述split_train_test函數(shù)作用相似,但增加了更多的功能:
- random_state參數(shù)可以實現(xiàn)設(shè)置隨機生成器種子的作用;
- 可以將種子傳遞給多個行數(shù)相同的數(shù)據(jù)集,可以在相同的索引上分割數(shù)據(jù)集。
簡單使用例子如下:
from sklearn.model_selection import train_test_splittrain_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)這里需要注意的是,我們采用的都是隨機采樣方法,對于大數(shù)據(jù)集,這方法通常可行。
但對于不大的數(shù)據(jù)集,這會出現(xiàn)采樣偏差的風(fēng)險。簡單說,就是樣本代表性不夠,可能隨機選擇的都是同種類型的數(shù)據(jù)。
比如,當(dāng)一個調(diào)查公司想要對 1000 個人進行調(diào)查,需要保證這 1000 個人對人群整體有代表性,例如,美國人口有 51.3% 是女性,48.7% 是男性。那么,在美國做這個調(diào)查,就需要保證樣本也是這個比例,即選擇 513 名女性,487 名男性。
這種采樣稱為分層采樣:將人群分層均勻的子分組,稱為分層,從每個分層去取合適數(shù)量的實例,以保證測試集對總?cè)藬?shù)有代表性。
所以上述調(diào)查公司的例子,就是先將人群按照性別劃分兩個子分組,然后分別再按照如年齡、職業(yè)等標(biāo)準(zhǔn)繼續(xù)劃分子分組。
分層采樣的操作可以使用Scikit-Learn的StratifiedShuffleSplit函數(shù),指定數(shù)據(jù)中指定的類別,代碼例子如下:
from sklearn.model_selection import StratifiedShuffleSplitsplit = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42) for train_index, test_index in split.split(housing, housing["income_cat"]):strat_train_set = housing.loc[train_index]strat_test_set = housing.loc[test_index]這里是給定一個房子信息數(shù)據(jù)housing,然后指定收入分類housing["income_cat"],保證采樣的數(shù)據(jù)集中包含根據(jù)收入分類的比例。
小結(jié)
第二篇,先介紹了幾個尋找數(shù)據(jù)集的網(wǎng)站,和計算機視覺常用的圖像數(shù)據(jù)集,然后介紹如何劃分測試集,避免數(shù)據(jù)透視偏差和采樣偏差的問題。
參考:
- 《hands-on-ml-with-sklearn-and-tf》第二節(jié)
- https://towardsdatascience.com/top-sources-for-machine-learning-datasets-bb6d0dc3378b
歡迎關(guān)注我的微信公眾號–機器學(xué)習(xí)與計算機視覺,或者掃描下方的二維碼,大家一起交流,學(xué)習(xí)和進步!
往期精彩推薦
學(xué)習(xí)筆記
- 機器學(xué)習(xí)入門系列(1)–機器學(xué)習(xí)概覽
- [GAN學(xué)習(xí)系列] 初識GAN
- [GAN學(xué)習(xí)系列2] GAN的起源
- [GAN學(xué)習(xí)系列3]采用深度學(xué)習(xí)和 TensorFlow 實現(xiàn)圖片修復(fù)(上)
數(shù)學(xué)學(xué)習(xí)筆記
- 程序員的數(shù)學(xué)筆記1–進制轉(zhuǎn)換
- 程序員的數(shù)學(xué)筆記2–余數(shù)
- 程序員的數(shù)學(xué)筆記3–迭代法
Github項目 & 資源教程推薦
- [Github 項目推薦] 一個更好閱讀和查找論文的網(wǎng)站
- [資源分享] TensorFlow 官方中文版教程來了
- 必讀的AI和深度學(xué)習(xí)博客
- [教程]一份簡單易懂的 TensorFlow 教程
- [資源]推薦一些Python書籍和教程,入門和進階的都有!
總結(jié)
以上是生活随笔為你收集整理的机器学习数据集的获取和测试集的构建方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生成验证码
- 下一篇: 网页中打开msn窗口方法