【scikit-learn基礎】--『資料載入』之真實資料集

2023-12-06 12:02:11

上一篇介紹了scikit-learn中的幾個玩具資料集,本篇介紹scikit-learn提供的一些真實的資料集。
玩具資料集:scikit-learn 基礎(01)--『資料載入』之玩具資料集

1. 獲取資料集

與玩具資料集不同,真實的資料集的資料不僅資料特徵多,而且資料量也比較大,
所以沒有直接包含在scikit-learn庫中。

雖然scikit-learn中提供了線上載入資料的函數,不過由於網路方面的原因,線上載入幾乎不可能成功。
我離線下載了所有scikit-learn的真實資料,並且轉換成了快取檔案,經測試可正常離線使用。

已經轉換好的離線資料集:

  1. olivetti:https://url11.ctfile.com/f/45455611-930509718-42d985?p=6872
  2. 20newsgroups:https://url11.ctfile.com/f/45455611-930509625-f32241?p=6872
  3. lfw_home:https://url11.ctfile.com/f/45455611-930509715-c10239?p=6872
  4. covertype:https://url11.ctfile.com/f/45455611-930509631-f5e629?p=6872
  5. RCV1:https://url11.ctfile.com/f/45455611-930509760-30d2a2?p=6872
  6. kddcup99-py3:https://url11.ctfile.com/f/45455611-930509652-4f47ea?p=6872
  7. kddcup99_10-py3:https://url11.ctfile.com/f/45455611-930509637-2f0131?p=6872
  8. cal_housing:https://url11.ctfile.com/f/45455611-930509628-395dab?p=6872

:所有檔案的下載密碼都是:6872

下載上面的 zip 包之後,解壓到本地某個目錄中(下面的範例是:d:\share\sklearn-realdata),
載入離線資料集的方法如下:

import os
# sklearn一共提供了9種載入真實資料的方法
from sklearn.datasets import fetch_olivetti_faces
from sklearn.datasets import fetch_20newsgroups
from sklearn.datasets import fetch_20newsgroups_vectorized
from sklearn.datasets import fetch_lfw_people
from sklearn.datasets import fetch_lfw_pairs
from sklearn.datasets import fetch_covtype
from sklearn.datasets import fetch_rcv1
from sklearn.datasets import fetch_kddcup99
from sklearn.datasets import fetch_california_housing

home_dir = "d:\share\sklearn-realdata"
data = fetch_olivetti_faces(data_home=os.path.join(home_dir, "olivetti"))
print(data)

data = fetch_20newsgroups(data_home=os.path.join(home_dir, "20newsgroups"))
print(data)

data = fetch_20newsgroups_vectorized(data_home=os.path.join(home_dir, "20newsgroups"))
print(data)

data = fetch_lfw_people(data_home=home_dir)
print(data)
data = fetch_lfw_pairs(data_home=home_dir)
print(data)

data = fetch_covtype(data_home=home_dir)
print(data)

data = fetch_rcv1(data_home=home_dir)
print(data)

# 只載入10%的資料
data = fetch_kddcup99(data_home=home_dir)
print(data)
# 載入全部的資料
data = fetch_kddcup99(data_home=home_dir, percent10=False)
print(data)

data = fetch_california_housing(data_home=os.path.join(home_dir, "cal_housing"))
print(data)

載入離線資料集的關鍵在於設定 data_home 引數。

2. 資料集概況

真實資料和之前的玩具資料集相比,它的優勢在於資料取自實際應用之中,更能夠反映實際問題的複雜性。
用它來學習演演算法時,可以提前遇到各種調整模型的問題。

scikit-learn一個提供了9 種載入真實資料集的函數,實際是7 種資料集。

2.1. Olivetti 面部資料集

這個資料集來自從 AT&T,包含40 個不同個體的人臉影象的資料集,每個個體有10 張不同的圖片。
這些影象是在不同的時間拍攝的,並且具有不同的照明和麵部表情(睜開/閉上眼睛,微笑/不微笑)以及面部細節(戴眼鏡/不戴眼鏡)。

所有的影象都採用黑色均勻的背景,並且個體處於直立的正面位置,允許一定的側移。
影象被量化為256 個灰度級並以8 位無符號整數的形式儲存。
這個資料集的目標是從 0 到 39 的整數,代表圖中人物的身份。
由於每一類只有十個樣例,這個相對較小的資料集對無監督學習半監督學習具有有趣的挑戰性。

此資料集的載入函數:fetch_olivetti_faces

2.2. 新聞組資料集

這是一個常用的文字分類資料集,包含大約20,000 篇新聞文章,這些文章均勻分佈在20 個不同的主題中。

這些新聞組資料來源於 1997 年之前的新聞文章,包括各種不同的新聞來源日期
這個資料集的目標是進行文字分類,將每篇文章分配到其對應的主題中。

該資料集通常用於訓練和測試文字分類演演算法,例如樸素貝葉斯分類器、支援向量機或決策樹等。
由於資料集的大小適中,它也適用於較小的機器學習模型。

此資料集的載入函數:fetch_20newsgroupsfetch_20newsgroups_vectorized
這兩個函數的主要區別在於:

  • fetch_20newsgroups返回的是一個原始的文字列表,每個新聞組的資料都以字串形式給出
  • fetch_20newsgroups_vectorized返回的是一個可以直接用於機器學習或評估的向量資料集,它已經為文字資料進行了特徵提取,返回的是一個稀疏矩陣

2.3. 人臉資料集

這個資料集是一個包含13233 張人臉影象的資料集,用於測試臉部辨識演演算法。
這些影象均來自網際網路,包含不同的人臉角度、表情和光照條件。
每張影象都給出了對應的人名,共有5749 個個體,其中大部分人只有一張影象,部分人有多張影象。

此資料集的目標是測試臉部辨識演演算法的準確率,通常用於評估演演算法的準確性召回率交叉驗證等。
由於資料集包含大量的人臉影象和個體,因此也適用於訓練和測試深度學習模型。

此資料集的載入函數:fetch_lfw_peoplefetch_lfw_pairs
這兩個函數的主要區別在於:

  • fetch_lfw_people資料集中每個人至少有一張圖片,每張圖片都對應不同的人。這個資料集的目標是訓練一個分類器來識別不同的人
  • fetch_lfw_pairs資料集中每個人有兩張不同圖片。這些圖片是在不同的時間、不同的光照條件下拍攝的。這個資料集的目標是訓練一個分類器來識別同一個人在不同條件下的圖片

2.4. 森林覆蓋資料集

這個資料集是一個包含森林覆蓋型別資訊的植被覆蓋型別資料集。
該資料集包含581,012 個樣本,每個樣本是一個30m x 30m 區域的森林覆蓋型別,
包括 7 種型別:雲杉/冷杉、洛奇波爾鬆、黃鬆、三葉楊/柳樹、阿斯彭、花旗鬆和克魯姆霍爾茨。

除了前 10 個特徵是浮點數外,其餘特徵都是one-hot 變數。這個資料集的目標是預測給定區域的森林覆蓋型別。
適用於分類相關的機器學習演演算法的測試。

此資料集的載入函數:fetch_covtype

2.5. RCV1 多標籤資料集

這個資料集是一個包含1063389 個樣本的大規模文字分類資料集。
該資料集由英國廣播公司(BBC)和英國郵報(The Guardian)的新聞文章組成,每篇文章都被標記為其中一個類別(例如體育、娛樂、政治等)。

RCV1資料集的目標是訓練和測試文字分類演演算法。由於資料集規模較大,它適合用於評估大型電腦器學習模型和分散式計算系統的效能。
RCV1資料集包含多個屬性,如文字內容、類別標籤和樣本權重等,可以用於訓練多種不同型別的文字分類模型,例如樸素貝葉斯分類器、支援向量機或深度學習模型等。

此資料集的載入函數:fetch_rcv1

2.6. kddcup99 資料集

這個資料集是一個網路入侵檢測的資料集,源自DARPA入侵檢測評估專案。
該資料集包含了 9 個星期的網路連線資料,分為訓練集測試集兩部分。

訓練集包含了4920917條連線記錄,測試集包含了4555136條連線記錄。
這些連線記錄涵蓋了多種網路協定和攻擊型別,例如 TCP、UDP、ICMP 等以及 DoS、U2R、R2L 等攻擊型別。
資料集中的每個連線記錄包含41 個固定的特徵屬性,包括源 IP 地址、目的 IP 地址、協定型別、位元組數等,以及一個類識別符號表示該連線是否屬於攻擊型別。

kddcup99資料集是網路入侵檢測領域廣泛使用的事實基準資料集,可用於評估和比較不同入侵檢測演演算法的效能。

此資料集的載入函數:fetch_kddcup99
由於此資料集資料量很大,所以預設只載入 10%的資料,若要載入全部資料設定引數percent10=False
本文第一節載入離線資料的範例中也載入範例。

2.7. 加州住房資料集

這個資料集包含了加利福尼亞州 1990 年所有城市的房價資訊。
資料集中的每個樣本都包含 8 個變數的值:

  1. MedianHouseValue(中位數房價):以 1000 美元為單位。
  2. MedianIncome(中位數收入):以年為單位,以美元為單位。
  3. HouseAge(房齡):以年為單位。
  4. Rooms(房間數):整數。
  5. Bedrooms(臥室數):整數。
  6. Population(人口):以 1000 人為單位。
  7. HousingUnits(房屋數量):以千為單位。
  8. SquareMiles(平方英里):以平方英里為單位。

該資料集被廣泛用於房價預測相關的機器學習演演算法的學習中。
此資料集的載入函數:fetch_california_housing

3. 總結

當機器學習的演演算法掌握到一定程度的時候,一定會想嘗試用真實的資料集來訓練模型。
這些經典的真實資料集不僅資料量豐富,而且涵蓋的範圍廣,用來練手和提高自己的能力再好不過。