[譯] 使用谷歌 FACETS 可視化機器學習數據集

使用谷歌 FACETS 可視化機器學習數據集html

FACETS 是谷歌的一個開源工具,能夠輕鬆的從大量數據中學習模式前端

攝影:[Franki Chamaki](https://unsplash.com/@franki?utm_source=medium&utm_medium=referral),出自[Unsplash](https://unsplash.com?utm_source=medium&utm_medium=referral)

大量數據比好的算法更有用,但好的數據比大量數據更有用:Peter Norvigpython

關於大量的訓練數據如何對機器學習模型的結果產生巨大的影響,已經有不少的討論。然而,隨着數據量的增長,要構建一個強大且健壯的機器學習系統,數據質量也很是關鍵。畢竟「輸入糟粕,輸出糟粕」,也就是說,你從系統中獲得的東西會體現出你提供給系統的東西。android

一個機器學習數據集有時包含數千到數百萬的數據點,而它們可能包含成百上千個特徵。此外,現實世界的數據很混亂,會有缺失值、不均衡數據、異常值等。所以,在進行模型構建以前,咱們必須清理數據。可視化數據有助於找到這些離羣點並定位須要清理的數據。數據可視化提供了總體數據概覽(不管數據量多大),有助於快速準確的進行 EDA(探索性數據分析)。ios


FACETS

在字典裏 facet 意爲某種特殊方面或某物的特徵。一樣,FACETS 工具讓咱們無需明確編碼便可理解並探索數據的各項特徵。git

Facets 是谷歌爲了支持 PAIR (People + AI Research) 項目而發佈的一個開源可視化工具,能夠幫助咱們理解和分析機器學習數據集。Facets 包括兩個可視化部分,這兩部分都可深刻挖掘數據並帶來好的洞察,而無需在用戶端進行大量工做。github

  • Facets Overview

顧名思義,此可視化部分提供了整個數據集的概覽和數據每項特徵的分佈狀況。Facets Overview 總結了每項特徵的統計量並比較了訓練和測試數據集。算法

  • Facets Dive

此功能可幫助用戶深刻理解數據的單個特徵,並經過觀察單個特徵獲取更多信息。它有助於一次性交互式地探索大量數據點。typescript

這些可視化由 Typescript 編寫的 Polymer Web 組件實現,可以輕易嵌入 Jupyter Notebook 或是 Web 頁面中。json


使用 & 安裝

使用 FACETS 處理數據有兩種方式:

Web 應用

它能夠直接在下面連接裏的演示頁面中使用:

Facets —— 機器學習數據集的可視化

該網站容許任何人直接在瀏覽器中可視化他們本身的數據集,而無需安裝或設置任何軟件,而且你的數據不會被上傳。

在 Jupyter Notebooks/Colaboratory 中

FACETS 也能夠在 Jupyter Notebook 或 Colaboratoty 中使用。這能夠更靈活的在同一個 notebook 中完成整個 EDA 和建模。有關安裝的完整細節,請參閱官方 Github 倉庫。不過,在下文中咱們將介紹如何在 colab 中使用 FACETS。


數據

雖然你能夠用演示頁面上提供的數據,但我打算用另外一組數據。我將用 FACETS 對貸款預測數據集進行 EDA。 問題陳述是預測一個已得到公司貸款的申請人是否會償還貸款。這是機器學習社區中的一個很是知名的例子。

這裏是已經分爲訓練集和測試集的數據集。讓咱們將數據加載到 Colab 中。

import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
複製代碼

如今讓咱們來了解如何將 Facets Overview 用於此數據。

FACETS Overview

Overview 自動的讓用戶快速瞭解數據各項特徵值的分佈狀況。也能夠馬上在訓練集和測試集中比較分佈狀況。若是數據中存在某些異常,它便會從異常數據的位置彈出。

經過此功能能夠輕鬆獲得的一些信息以下:

  • 統計數據如均值、中位數和標準差
  • 列的最小值和最大值
  • 缺失數據
  • 有零值的值
  • 因爲還能夠查看測試數據集的分佈,咱們能夠輕鬆確認訓練數據和測試數據是否遵循相同的分佈。

有人會說咱們能夠輕鬆地用 Pandas 來完成這些任務,爲何要投入到另外一個工具呢?沒錯,當咱們只有少許的特徵不多的數據點時,可能不須要這樣作。然而,狀況在咱們面對大型數據集時會有所不一樣,很難用 Pandas 分析多列中的每個數據點。

Google Colaboaratory 將 FACETS 變得易於使用,由於咱們不須要額外的安裝,只用編寫幾行代碼就好。

# Clone the facets github repo to get access to the python feature stats generation code
!git clone https://github.com/pair-code/facets.git
複製代碼

要計算出特徵的統計量,咱們須要用 Python 腳本中的函數 GenericFeatureStatisticsGenerator()。

# Add the path to the feature stats generation code.
import sys
sys.path.insert(0, '/content/facets/facets_overview/python/')

# Create the feature stats for the datasets and stringify it.
import base64
from generic_feature_statistics_generator import GenericFeatureStatisticsGenerator

gfsg = GenericFeatureStatisticsGenerator()
proto = gfsg.ProtoFromDataFrames([{'name': 'train', 'table': train},
                                  {'name': 'test', 'table': test}])
protostr = base64.b64encode(proto.SerializeToString()).decode("utf-8")
複製代碼

如今用下面的代碼,咱們能夠輕鬆的在 notebook 中顯示出可視化。

# Display the facets overview visualization for this data
from IPython.core.display import display, HTML

HTML_TEMPLATE = """<link rel="import" href="https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html" > <facets-overview id="elem"></facets-overview> <script> document.querySelector("#elem").protoInput = "{protostr}"; </script>"""
html = HTML_TEMPLATE.format(protostr=protostr)
display(HTML(html))
複製代碼

當你按下「Shift + Enter」,你就能看到一個漂亮的交互式可視化:

在圖中,咱們能看到 Facets Overview 對貸款預測數據集的五個數值特徵進行了可視化。這些特徵按非均勻性排序,分佈最不均勻的特徵排在頂部。紅色數字表示可能的異常點,在這裏,數值特徵爲 0 有很高的百分比。用右側的柱狀圖你能夠比較訓練數據(藍色)和測試數據(橙色)的分佈狀況。

上面的可視化顯示了數據集的八個分類特徵之一。這些特徵按分佈距離排序。訓練數據集(藍色)和測試數據集(橙色)間誤差最大的特徵排在頂部。

FACETS Dive

Facets Dive 提供了一個直觀的可定製界面,用於探索數據集內不一樣特徵的數據點之間的關係。使用 Facets Dive,你能夠根據每一個數據點的特徵值來控制它的位置、顏色和視覺效果。若是數據點有相關聯的圖像,此圖像也可用在可視化中。

必須將數據轉換爲 JSON 格式纔可以使用 Dive 可視化。

# Display the Dive visualization for the training data.
from IPython.core.display import display, HTML

jsonstr = train.to_json(orient='records')
HTML_TEMPLATE = """<link rel="import" href="https://raw.githubusercontent.com/PAIR-code/facets/master/facets-dist/facets-jupyter.html"> <facets-dive id="elem" height="600"></facets-dive> <script> var data = {jsonstr}; document.querySelector("#elem").data = data; </script>"""
html = HTML_TEMPLATE.format(jsonstr=jsonstr)
display(HTML(html))
複製代碼

運行代碼後,你應該能看到:

Facets Dive 可視化

如今咱們能夠輕鬆進行單變量和雙變量分析,讓咱們來看看一些得到的結果:

單變量分析

這裏咱們將分別地查看目標變量,即 Loan_Status 和其它的分類特徵如性別、婚姻情況、就業情況和信用記錄。一樣的,你也能夠看看其它特徵。

推論:

  • 數據集中的大多數申請人都是男性。
  • 一樣的,數據集中的大多數申請人都已婚且償還了債務。
  • 此外,大多數申請人沒有家眷,大學畢業,來自城郊地區。

如今讓咱們可視化有序變量,即家眷、教育和房產地區。

如下推論能夠從上面的條形圖中得出:

  • 大多數申請人沒有任何家眷。
  • 大多數申請人是大學畢業生。
  • 大多數申請人來自城郊。

如今你能夠接着使用數值數據進行分析。

雙變量分析

咱們來找找目標變量和分類自變量之間的關係。

從上面的條形圖中能夠推斷出:

  • 已批准貸款中已婚申請人的比例較高。
  • 在 Loan_Status 的兩個類別中,有 1 個或 3 個以上家眷的申請人具備類似的分佈狀況。
  • 信用記錄爲 1 的人彷佛更有可能得到貸款批准。
  • 與農村或城市地區相比,在城郊得到貸款批准的比例較高。

結論

FACETS 爲數據集進行 EDA 提供了一個簡單直觀的環境,幫助咱們得到有意義的結果。惟一的問題是目前它只適用於 Chrome

在結束本文以前,讓咱們看一個有趣的事實:下圖體現出如何用 FACETS Dive 揪出 CIFAR-10 數據集中一個小小的人爲標記錯誤。在分析數據集時,發現一個青蛙的圖像被錯誤地標記爲貓。這確實是一些成就,由於對人眼來講這是一項不可能完成的任務。

原始資料

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索