如何在Python中用scikit-learn生成測試資料集

李澤南發表於2018-02-07


在本教程中,你將學習測試問題及如何在 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 個類的值。

  1. # generate 2d classification dataset

  2. X, y = make_blobs(n_samples=100, centers=3, n_features=2)

完整的例子如下所示。

  1. from sklearn.datasets.samples_generator import make_blobs

  2. from matplotlib import pyplot

  3. from pandas import DataFrame

  4. # generate 2d classification dataset

  5. X, y = make_blobs(n_samples=100, centers=3, n_features=2)

  6. # scatter plot, dots colored by class value

  7. df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

  8. colors = {0:'red', 1:'blue', 2:'green'}

  9. fig, ax = pyplot.subplots()

  10. grouped = df.groupby('label')

  11. for key, group in grouped:

  12.    group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

  13. pyplot.show()

執行該示例將生成該問題的輸入和輸出,然後建立一個方便的 2D 圖,用不同的顏色顯示不同類的點。注意,考慮到問題生成器的隨機特性,你的特定資料集和結果圖會有所不同。這是一個特點,而不是一個錯誤。

如何在Python中用scikit-learn生成測試資料集如何在Python中用scikit-learn生成測試資料集

Blobs 測試分類問題的散點圖


我們將會在下面的例子中使用相同的示例結構。

Moons 分類問題


make_moons() 函式用於二進位制分類並且將生成一個漩渦模式,或者兩個 moons。你可以控制 moon 形狀中的噪聲量,以及要生產的樣本數量。

這個測試問題適用於能夠學習非線性類邊界的演算法。下面的例子生成了一箇中等噪音的 moon 資料集。

  1. # generate 2d classification dataset

  2. X, y = make_moons(n_samples=100, noise=0.1)

完整的例子如下所示。

  1. from sklearn.datasets import make_moons

  2. from matplotlib import pyplot

  3. from pandas import DataFrame

  4. # generate 2d classification dataset

  5. X, y = make_moons(n_samples=100, noise=0.1)

  6. # scatter plot, dots colored by class value

  7. df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

  8. colors = {0:'red', 1:'blue'}

  9. fig, ax = pyplot.subplots()

  10. grouped = df.groupby('label')

  11. for key, group in grouped:

  12.    group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

  13. pyplot.show()

執行該示例會生成並繪製資料集以供查閱,然後再按照指定的類對樣本著色。

如何在Python中用scikit-learn生成測試資料集如何在Python中用scikit-learn生成測試資料集

Moons 測試分類問題的散點圖


Circles 分類問題

make_circles() 函式生成一個資料集落入同心圓的二進位制分類問題。再一次地,與 moons 測試問題一樣,你可以控制形狀中的噪聲量。該測試問題適用於可以學習複雜的非線性流行的演算法。下面的例子中生成了一個具有一定噪音的 circles 資料集。

  1. # generate 2d classification dataset

  2. X, y = make_circles(n_samples=100, noise=0.05)

完整例子如下所示。

  1. from sklearn.datasets import make_circles

  2. from matplotlib import pyplot

  3. from pandas import DataFrame

  4. # generate 2d classification dataset

  5. X, y = make_circles(n_samples=100, noise=0.05)

  6. # scatter plot, dots colored by class value

  7. df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))

  8. colors = {0:'red', 1:'blue'}

  9. fig, ax = pyplot.subplots()

  10. grouped = df.groupby('label')

  11. for key, group in grouped:

  12.    group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])

  13. pyplot.show()

執行該示例並繪製資料集以供查閱。

如何在Python中用scikit-learn生成測試資料集如何在Python中用scikit-learn生成測試資料集

Circles 測試分類問題的散點圖


迴歸測試問題


迴歸是根據觀察資料預測數量的問題。make_regression() 函式將建立一個輸入和輸出具有線性關係的資料集。你可以配置樣本數量,輸入特徵數量,噪聲級別等等。該資料集適用於可以學習線性迴歸函式的演算法。

下面的例子將生成 100 個示例,他們具有適度的噪聲,都有一個輸入特徵和一個輸出特徵。

  1. # generate regression dataset

  2. X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

完整例子如下所示。

  1. from sklearn.datasets import make_regression

  2. from matplotlib import pyplot

  3. # generate regression dataset

  4. X, y = make_regression(n_samples=100, n_features=1, noise=0.1)

  5. # plot regression dataset

  6. pyplot.scatter(X,y)

  7. pyplot.show()

執行該示例將生成資料並繪製 x 和 y 的關係,考慮到它是線性的,所以結果是很簡單的。

如何在Python中用scikit-learn生成測試資料集

如何在Python中用scikit-learn生成測試資料集迴歸測試問題的散點圖


擴充套件


本節列出了一些你可能想要探討的擴充套件該教程的想法。

  • 比較演算法。選擇一個測試問題,並比較該問題的一系列演算法並彙報效能。

  • 放大問題。選擇一個測試問題並探索將其放大,用級數法來視覺化結果,也可以探索一個特定演算法模型技能和問題規模。

  • 其他問題。庫提供了一套其他測試問題;為每個問題編寫了一個程式碼示例來展示它們是如何工作的。

擴充閱讀


如果你想要更深入的瞭解,本節提供了關於該課題更多的資源。

  • 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 中使用他們。

具體來說,其中包括:

  • 如何生成多類分類預測測試問題;

  • 如何生成二進位制分類預測測試問題;

  • 如何生成線性迴歸預測測試問題。

相關文章