日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习数据集的获取和测试集的构建方法

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习数据集的获取和测试集的构建方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是機器學(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ù)集:

  • Kaggle 數(shù)據(jù)集:每個數(shù)據(jù)集都是一個小型社區(qū),用戶可以在其中討論數(shù)據(jù)、查找公共代碼或在內(nèi)核中創(chuàng)建自己的項目。包含各式各樣的真實數(shù)據(jù)集。
  • Amazon 數(shù)據(jù)集:該數(shù)據(jù)源包含多個不同領(lǐng)域的數(shù)據(jù)集,如:公共交通、生態(tài)資源、衛(wèi)星圖像等。網(wǎng)頁中也有一個搜索框來幫助用戶尋找想要的數(shù)據(jù)集,還有所有數(shù)據(jù)集的描述和使用示例,這些數(shù)據(jù)集信息豐富且易于使用!
  • UCI機器學(xué)習(xí)資源庫:來自加州大學(xué)信息與計算機科學(xué)學(xué)院的大型資源庫,包含100多個數(shù)據(jù)集。用戶可以找到單變量和多變量時間序列數(shù)據(jù)集,分類、回歸或推薦系統(tǒng)的數(shù)據(jù)集。
  • 谷歌數(shù)據(jù)集搜索引擎:這是一個可以按名稱搜索數(shù)據(jù)集的工具箱。
  • 微軟數(shù)據(jù)集:2018年7月,微軟與外部研究社區(qū)共同宣布推出“Microsoft Research Open Data”。它在云中包含一個數(shù)據(jù)存儲庫,用于促進全球研究社區(qū)之間的協(xié)作。它提供了一系列用于已發(fā)表研究的、經(jīng)過處理的數(shù)據(jù)集。
  • Awesome Public Datasets Collection:Github 上的一個按“主題”組織的數(shù)據(jù)集,比如生物學(xué)、經(jīng)濟學(xué)、教育學(xué)等。大多數(shù)數(shù)據(jù)集都是免費的,但是在使用任何數(shù)據(jù)集之前,用戶需要檢查一下許可要求。
  • 計算機視覺數(shù)據(jù)集:Visual Data包含一些可以用來構(gòu)建計算機視覺(CV)模型的大型數(shù)據(jù)集。用戶可以通過特定的CV主題查找特定的數(shù)據(jù)集,如語義分割、圖像標(biāo)題、圖像生成,甚至可以通過解決方案(自動駕駛汽車數(shù)據(jù)集)查找特定的數(shù)據(jù)集。
  • 常用的部分圖像數(shù)據(jù)集:

  • Mnist: 手寫數(shù)字?jǐn)?shù)據(jù)集,包含 60000 張訓(xùn)練集和 10000 張測試集。(但該數(shù)據(jù)集通常只是作為簡單 demo 使用,如果要驗證算法模型的性能,最好在更大數(shù)據(jù)集上進行測試,實驗結(jié)果才有足夠的可信度)
  • Cifar:分為 Cifar10 和 Cifar100。前者包含 60000 張圖片,總共10個類別,每類 6000 張圖片。后者是 100 個類別,每個類別 600 張圖片。類別包括貓狗鳥等動物、飛機汽車船等交通工具。
  • Imagenet:應(yīng)該是目前最大的開源圖像數(shù)據(jù)集,包含 1500 萬張圖片,2.2 萬個類別。
  • LFW:人臉數(shù)據(jù)集,包含13000+張圖片和1680個不同的人。
  • CelebA:人臉數(shù)據(jù)集,包含大約 20w 張圖片,總共 10177個不同的人,以及每張圖片都有 5 個位置標(biāo)注點,40 個屬性信息
  • 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)然,這個方法存在一個缺陷:每次運行會得到不同的測試集!

    解決的辦法有以下幾種:

  • 第一次運行該函數(shù)后就保存測試集,隨后載入測試集;
  • 調(diào)用函數(shù)np.random.permutation()前,設(shè)置隨機數(shù)生成器的種子,比如np.random.seed(42),以產(chǎn)生相同的洗牌指數(shù)(shuffled indices).
  • 上述兩個方法對于數(shù)據(jù)集不變的情況是有效的,但更新數(shù)據(jù)集后,都會失效。第三個解決方法就是根據(jù)每個實例的 ID來判斷其是否應(yīng)該放入測試集,比如,對于圖片數(shù)據(jù)集,就可以根據(jù)圖片的名字(保證更新訓(xùn)練集不會更新圖片名字)來確定其屬于訓(xùn)練集還是測試集。
  • 劃分?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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。