回覆列表
  • 1 # 機器之心Pro

    測試資料集是小型的設計資料集,它可以讓你測試一個機器學習演算法或測試工具。

    資料集中的資料有完整的定義(例如線性或非線性)使你可以探索特定的演算法行為。scikit-learn Python 庫提供一套函式,用於從可配置測試問題中生成樣本來進行迴歸和分類。

    在本教程中,你將學習測試問題及如何在 Python 中使用 scikit-learn 進行測試。

    完成本教程後,你將知道:

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

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

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

    讓我們開始吧。

    教程概述

    本教程被分成了 3 個部分,他們分別是:

    1. 測試資料集

    2. 分類測試問題

    3. 迴歸測試問題

    測試資料集

    開發和實現機器學習演算法時的一個問題是如何知道你是否已經正確實現了他們。他們似乎在有錯誤時也能工作。

    測試資料集是小型設計問題,它能讓你測試、除錯演算法和測試工具。它們對於更好地理解演算法響應超引數變化的行為方面也很有用。

    下面是測試資料集的一些理想特性:

    它們可以快速、容易地生成。

    它們包含「已知」或「理解」的結果來和預測進行比較。

    它們是隨機的,每次生成時都允許在同一個問題上隨機變化。

    它們很小、容易在而二維中實現視覺化。

    它們可以被增大。

    我建議在開始一個新的機器學習演算法或開發一個新的測試工具時使用測試資料集。

    scikit-learn 是一個用於機器學習的 Python 庫,它提供了生成一組測試問題的函式。

    在本教程中,我們將看一些為分類和迴歸演算法生成測試問題的例子。

    分類測試問題

    分類是將標籤分配給資料的問題。

    在本節中,我們將看三個分類問題:blobs,moons,和 circles。

    Blobs 分類問題

    make_blobs() (http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html) 函式可被用於生成具有高斯分佈的 blobs 點。

    你可以控制生成 blobs 的數量,生成樣本的數量以及一系列其他屬性。

    考慮到 blobs 的線性可分性質,該問題也適用於線性分類問題。

    下面的例子是一個多類分類預測問題,它生成了一個具有三個 blobs 的 2D 樣本資料集。

    每個資料有兩個輸入和 0,1 或 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() function (http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_moons.html) 用於二進位制分類並且將生成一個漩渦模式,或者兩個 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()

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

    Monns 測試分類問題的散點圖

    Circles 分類問題

    make_circles() function (http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_circles.html) 函式生成一個數據集落入同心圓的二進位制分類問題。

    再一次地,與 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() (http://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_regression.html) 函式將建立一個輸入和輸出具有線性關係的資料集。

    你可以配置樣本數量,輸入特徵數量,噪聲級別等等。

    該資料集適用於可以學習線性迴歸函式的演算法。

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

    # generate regression dataset

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

    完整例子如下所示。

    from sklearn.datasets import make_regression

    from matplotlib import pyplot

    # generate regression dataset

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

    # plot regression dataset

    pyplot.scatter(X,y)

    pyplot.show()

    執行該示例將生成資料並繪製 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 中使用他們。

    具體來說,你學習了:

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

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

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

  • 中秋節和大豐收的關聯?
  • 塞爾比打球,這麼愛摩?那麼規則當中,沒有什麼限制嗎?這樣贏得比賽,道德嗎?