【scikit-learn基礎】--『資料載入』之外部資料集

2023-12-09 12:00:27

這是scikit-learn資料載入系列的最後一篇,本篇介紹如何載入外部的資料集

外部資料集不像之前介紹的幾種型別的資料集那樣,針對每種資料提供對應的介面,每個介面載入的資料都是固定的。
而外部資料集載入之後,資料的欄位和型別是不確定的。

簡單來說,我們在實際的資料分析工作中,用到的是外部資料集載入,
學習資料分析時,更多用到的是前面介紹的資料載入

  1. 玩具資料集【scikit-learn基礎】--『資料載入』之玩具資料集
  2. 真實資料集【scikit-learn基礎】--『資料載入』之真實資料集
  3. 樣本生成器【scikit-learn基礎】--『資料載入』之樣本生成器

1. openml.org 資料集

openml.org網站上提供了豐富的用於機器學習的資料集,目前已經有5300多個各類資料集。

通過scikit-learn載入openml.org的資料集非常簡單,
先在網站上找到自己感興趣的資料集,然後根據其名稱即可載入。
比如,下面的範例程式碼載入了一個關於糖尿病的資料集(diabetes)。

from sklearn.datasets import fetch_openml

data = fetch_openml(name='diabetes', version=1, parser="auto")
data

有的資料集有多個版本,通過 version 引數指定需要載入哪個版本。

2. svmlight / libsvm 格式資料

svmlight/libsvm格式是一種用於儲存訓練好的支援向量機(SVM)模型和資料集。
這種格式的特點是每一行都採用表格形式,以空格或者製表符分隔,適用於稀疏資料集。

scikit-learn中,載入svmlight/libsvm格式的資料使用load_svmlight_file函數。

import requests
import io
from sklearn.datasets import load_svmlight_file

# 一個線上的 svm 資料
url = "https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a"
res = requests.get(url)

# 載入svmlight/libsvm格式的資料檔案
X, y = load_svmlight_file(io.BytesIO(res.content))

# 列印特徵數和樣本數
print("特徵數:", X.shape[1])
print("樣本數:", X.shape[0])

# 執行結果:
特徵數: 119
樣本數: 1605

由於load_svmlight_file不支援直接載入網路檔案,所以先通過 requests 庫獲取資料,
然後將資料轉換為IO資料流,再傳入函數load_svmlight_file中。

3. 對接其他庫

Python中用於資料分析的庫最常用的當屬pandasnumpyscipy
scikit-learn可以直接使用這些庫所載入的資料,這就讓scikit-learn載入資料的能力直接站在了巨人的肩膀上。

比如,scikit-learn可以直接使用通過 pandas.io模組來載入的資料,
也就是支援CSVJSONHTMLXMLEXCELHDF5SQL等等各種格式。

還有通過numpy/routines.io載入的列式資料,
以及通過 scipy.io 模組載入的科學計算環境中經常使用的二進位制格式,如.mat.arff

4. 總結

scikit-learn庫的資料載入系列至此告一段落。
我們在掌握機器學習演演算法的過程中,自然而然的會將注意點放在演演算法的原理和各種引數上,
但是,一份好的資料能夠幫助我們更加直觀的瞭解到機器學習演演算法的執行過程。

scikit-learn提供的各類豐富的資料集絕對是學習演演算法的一大助力。
我覺得庫本身所提供的豐富的資料集也是scikit-learn庫相較於其他機器學習庫的一大特色和優勢。