Python功能不夠多?來看看如何生成測試數據集吧!
測試數據集是小型的專用數據集,它可以讓你測試一個機器學習演算法或測試工具。數據集中的數據有完整的定義(例如線性或非線性)使你可以探索特定的演算法行為。scikit-learn Python 庫提供一套函數,用於從可配置測試問題中生成樣本來進行回歸和分類。
在本教程中,你將學習測試問題及如何在 Python 中使用 scikit-learn 進行測試。
完成本教程後,你將知道:
如何生成多類分類預測測試問題
如何生成二進位分類預測測試問題
如何生成線性回歸預測測試問題
讓我們開始吧。
教程概述
本教程被分成了 3 個部分,他們分別是:
1. 測試數據集
2. 分類測試問題
3. 回歸測試問題
測試數據集
開發和實現機器學習演算法時的一個問題是如何知道你是否已經正確實現了他們——它們似乎在有 bug 時也能工作。
測試數據集是小型設計問題,它能讓你測試、調試演算法和測試工具。它們對於更好地理解演算法響應超參數變化的行為方面也很有用。
下面是測試數據集的一些理想特性:
它們可以快速、容易地生成。
它們包含「已知」或「理解」的結果來和預測進行比較。
它們是隨機的,每次生成時都允許在同一個問題上隨機變化。
它們很小、容易在而二維中實現可視化。
它們可以被增大。
我建議在開始一個新的機器學習演算法或開發一個新的測試工具時使用測試數據集。scikit-learn 是一個用於機器學習的 Python 庫,它提供了生成一組測試問題的函數。
在本教程中,我們將看一些為分類和回歸演算法生成測試問題的例子。
分類測試問題
分類是將標籤分配給數據的問題。在本節中,我們將看三個分類問題:blobs、moons 和 circles。
Blobs 分類問題
make_blobs() 函數可被用於生成具有高斯分布的 blobs 點。你可以控制生成 blobs 的數量,生成樣本的數量以及一系列其他屬性。考慮到 blobs 的線性可分性質,該問題也適用於線性分類問題。
下面的例子是一個多類分類預測問題,它生成了一個具有三個 blobs 的 2D 樣本數據集。每個數據有兩個輸入和 0、1 或 2 個類的值。
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=3, n_features=2)
完整的例子如下所示。
from sklearn.datasets.samples_generator import make_blobs
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=3, n_features=2)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:"red", 1:"blue", 2:"green"}
fig, ax = pyplot.subplots()grouped = df.
groupby("label")
for key, group in grouped:
group.plot(ax=ax, kind="scatter", x="x", y="y", label=key, color=colors[key])
pyplot.show()
運行該示例將生成該問題的輸入和輸出,然後創建一個方便的 2D 圖,用不同的顏色顯示不同類的點。注意,考慮到問題生成器的隨機特性,你的特定數據集和結果圖會有所不同。這是一個特點,而不是一個錯誤。
Blobs 測試分類問題的散點圖
我們將會在下面的例子中使用相同的示例結構。
Moons 分類問題
make_moons() 函數用於二進位分類並且將生成一個漩渦模式,或者兩個 moons。你可以控制 moon 形狀中的雜訊量,以及要生產的樣本數量。
這個測試問題適用於能夠學習非線性類邊界的演算法。下面的例子生成了一個中等噪音的 moon 數據集。
# generate 2d classification dataset
X, y = make_moons(n_samples=100, noise=0.1)
完整的例子如下所示。
from sklearn.datasets import make_moons
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_moons(n_samples=100, noise=0.1)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:"red", 1:"blue"}
fig, ax = pyplot.subplots()grouped = df.
groupby("label")for key, group in grouped:
group.plot(ax=ax, kind="scatter", x="x", y="y", label=key, color=colors[key])
pyplot.show()
運行該示例會生成並繪製數據集以供查閱,然後再按照指定的類對樣本著色。
Moons 測試分類問題的散點圖
Circles 分類問題
make_circles() 函數生成一個數據集落入同心圓的二進位分類問題。再一次地,與 moons 測試問題一樣,你可以控制形狀中的雜訊量。該測試問題適用於可以學習複雜的非線性流行的演算法。下面的例子中生成了一個具有一定噪音的 circles 數據集。
# generate 2d classification dataset
X, y = make_circles(n_samples=100, noise=0.05)
完整例子如下所示。
from sklearn.datasets import make_circles
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_circles(n_samples=100, noise=0.05)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:"red", 1:"blue"}
fig, ax = pyplot.subplots()
grouped = df.groupby("label")
for key, group in grouped:
group.plot(ax=ax, kind="scatter", x="x", y="y", label=key, color=colors[key])
pyplot.show()
運行該示例並繪製數據集以供查閱。
Circles 測試分類問題的散點圖
回歸測試問題
回歸是根據觀察數據預測數量的問題。make_regression() 函數將創建一個輸入和輸出具有線性關係的數據集。你可以配置樣本數量,輸入特徵數量,雜訊級別等等。該數據集適用於可以學習線性回歸函數的演算法。
下面的例子將生成 100 個示例,他們具有適度的雜訊,都有一個輸入特徵和一個輸出特徵。
運行該示例將生成數據並繪製 x 和 y 的關係,考慮到它是線性的,所以結果是很簡單的。
回歸測試問題的散點圖
擴展
本節列出了一些你可能想要探討的擴展該教程的想法。
比較演算法。選擇一個測試問題,並比較該問題的一系列演算法並彙報性能。
放大問題。選擇一個測試問題並探索將其放大,用級數法來可視化結果,也可以探索一個特定演算法模型技能和問題規模。
其他問題。庫提供了一套其他測試問題;為每個問題編寫了一個代碼示例來展示它們是如何工作的。
拓展閱讀
如果你想要更深入的了解,本節提供了關於該課題更多的資源。
scikit-learn 用戶指南: Dataset loading utilities (http://scikit-learn.org/stable/datasets/index.html)
scikit-learn API: sklearn.datasets: Datasets (http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets)
總結
在本教程中,我們學習了測試問題及如何用 scikit-learn 在 Python 中使用他們。
具體來說,其中包括:
如何生成多類分類預測測試問題;
如何生成二進位分類預測測試問題;
如何生成線性回歸預測測試問題。
※深度學習即將非法?歐盟《一般數據保護條例》五月生效
※別說只看到了中國來客,CES仍在預言2018年AI加持下的科技圈走勢
TAG:機器之心 |