| 揚聲器 |
抄本 |
| 拉斯·沃爾芬格 |
好的。大家好。 |
| |
歡迎來到我位於北卡羅來納州霍利斯普林斯的家。 |
| |
在新冠疫情肆虐的當下,線上舉行虛擬會議對我來說是一種全新的體驗,但我很高興今天能與大家交流,並提供有關 JMP Pro 全新插件的教程。 |
| |
實現流行的 XGBoost 功能。 |
| |
今天在本教程中,我將帶大家了解我們現有的內容。我這裡有一個 JMP 日誌 |
| |
這些內容將在會議資料中提供。如果你也想參與其中,我鼓勵你這樣做, |
| |
你可以暫停視頻,直接跳到會議資料,找到這本期刊。你可以在你自己的 JMP Pro 版本中開啟它。 |
| |
還有一個安裝連結。你需要安裝一個插件,如果你安裝了它,你就能在家裡完全複製我在這裡做的所有事情,甚至可以自己做一些嘗試。所以如果可以的話,我鼓勵你這麼做。 |
| |
我的狗狗 Charlie 確實在後台。希望它別做出什麼丟臉的事。現在它看起來不太興奮,但它和我一樣喜歡 XGBoost,所以,讓我們開始吧。 |
| |
XGBoost 是一個非常令人難以置信的開源 C++ 函式庫,已經存在好幾年了。 |
| |
最初的理論實際上是由幾位著名的統計學家在 90 年代提出的,但後來華盛頓大學的團隊採納了這些想法並將其付諸實現。 |
| |
而且它......我認為它真正發揮作用是在一些 Kaggle 競賽的背景下。 |
| |
它的起源...一旦人們開始使用它並且它可用,它實際上就開始贏得過去幾年 Kaggle 舉辦的幾乎所有表格競賽。 |
| |
事實上,現在網路上有幾百個例子,如果你想搜尋一下,你就會找到它們。 |
| |
因此,我認為這可以說是目前世界上最受歡迎、也許是最強大的表格資料預測建模方法。 |
| |
當然還有競爭對手,對於任何一個特定的數據集,你可能會看到一些差異,但總的來說,這是非常令人印象深刻的。 |
| |
事實上,現在市面上有一些功能非常類似的競賽軟體包,例如微軟的 LightGBM 和 Yandex 的 Catboost。我們今天就不深入討論它們了,但它們確實非常類似。 |
| |
呃,既然我們今天時間不多,我就不多說動機了。不過,如果你想更仔細地研究,這本日記倒是可以。 |
| |
我想要做的是向你們介紹這本期刊的亮點,特別是給你們一些現場演示,這樣你們就能了解這裡的內容。 |
| |
然後,隨著時間的推移,你就可以自由地自行探索和嘗試這些功能了。你需要…你需要一套可以正常運作的 JMP Pro 15。 |
| |
最早也要等到明年,也就是 2021 年,才能正式發售。 |
| |
但您現在可以獲得早期試用版本,我們正在對其進行增強。因此,我建議您取得最新的 JMP 16 Pro 早期試用版本。 |
| |
為了獲得此插件的最新功能…這個功能。這…… ... |
| |
為了整合 XGBoost C++ API,我們在 Pro 中編寫了大量 C++ 程式碼。因此,我們大部分的工作都使用 C++ 完成。 |
| |
但是有一個隨附的插件可以安裝動態庫並為您進行一些選單更新,所以您需要...您需要 Pro 並且需要安裝插件才能運行它。 |
| |
因此,如果可以的話,請搶購 JMP 16 pro 早期採用者,以便獲得最新的東西,這就是我今天要展示的內容。 |
| |
我們先來舉個例子。這是我剛剛注意到的一個新例子。它背後有一個非常有趣的故事。 |
| |
這些數據背後的研究者是一位名叫Jaivime Evarito的教授。他是一位環境科學家專家,博士,教授,助理教授 |
| |
他現在在荷蘭烏得勒支大學工作,他慷慨地在獲得許可的情況下提供了這些數據,以及背後的故事,以幫助那些對這些數據感到有點……戲劇性的人。我讓他的同事 Jeffrey McDonnell |
| |
收集了所有這些數據。這些都是數據。目的是研究世界各地森林砍伐地區的水徑流。 |
| |
你可以看到,我們這裡有 163 個地方,大部分在美國,然後是世界各地,當他們能夠收集 |
| |
砍伐樹木的地區,然後他們進行了一些關鍵測量 |
| |
就水徑流發生的情況而言。這類研究對於研究砍伐樹木、毀林以及氣候變遷的環境影響非常重要,所以非常及時。 |
| |
當時讓 Jaivime 感到高興的是,他們能夠在世界頂級科學期刊《自然》上發表論文,這是一篇非常好的 |
| |
他的經驗讓他得以發表論文。不幸的是,接下來發生的事情,儘管有一個競爭實驗室對他們在這篇論文中所做的事情提出了嚴厲的批評。 |
| |
經過多次反覆討論後,這篇論文最終被撤回, |
| |
這對Jaivime來說顯然是一段非常艱難的經歷。我的意思是,他非常慷慨,願意分享我的故事和希望。 |
| |
以避免這種情況發生。事實證明,爭議的根源還有其他幾個原因,但批評者最主要的抱怨是… |
| |
我可能做過提升樹分析。這是一個相當簡單的模型。我們可能只有幾個預測因子,每個都很重要,但他們的主要目標之一是確定哪些是最重要的。 |
| |
他用一個保留驗證集運行了一個提升樹模型,並發布了一個大約 0.7 的驗證保留率。一切看起來都還不錯。 |
| |
但後來批評者出現了,他們用不同的保留集重新分析了數據,並得到了驗證保留 R 平方 |
| |
小於 0.1。所以變化相當大。他們把 0.7 降到了 0.1 以下,而這…批評者對此大肆抨擊,試圖抹黑正在發生的事情。 |
| |
現在,Jaivime,此時此刻,Jaivime,這件事發生在去年,這篇論文在 2020 年初就被撤回了… |
| |
Jaivime 今年夏天和我分享了這些數據,我的想法是進行更嚴格的交叉驗證分析,並進行重複 K 折, |
| |
而不是僅僅針對一個單一的反對者,為了試圖弄清楚兩個不同的反對者之間的差異。我所做的就是,我們制定了一個新的例程 |
| |
這是 XGBoost 插件自帶的,可以建立 K 折列。如果你能看到這裡的資料集,你就會知道我已經創建了這些。為了節省時間,我們不會深入講解如何做到這一點。但是 |
| |
現在有一個名為「製作 K 折列」的新模組可以幫你實現這個功能。我採用的是分層的方式。有趣的是,它在後台調用了 JMP DOE。 |
| |
這樣做的好處是,你實際上可以建立正交折疊,這並不常見。在這裡,我來快速進行一下分佈。 |
| |
這是 Jaivime 最初做的保留集,他確實進行了分層,我認為這是個好主意,因為回饋有點偏差。然後這是評論家使用的保留集, |
| |
這是我最終使用的折疊方式。我做了三種不同的方案。我想強調的是,這些折疊方式非常垂直, |
| |
我們透過對三個正交集進行三次 K 折運算來獲得最大資訊增益。 |
| |
所以,事實證明,因為他已經在使用提升樹,所以下一步要嘗試的是 XGBoost 插件。所以我很高興找到這個數據集並在這裡討論它。 |
| |
現在發生了什麼事……讓我再做一次分析,對驗證集進行單向分析。結果發現我漏掉了這裡所做的回應,也就是水產量修正。 |
| |
我把它和驗證集對比起來。結果顯示,Jaivime 在他的訓練集中, |
| |
前四、五個測量值都出現在他的訓練集中,我認為這就是問題的根源。 |
| |
而在批評者資料集中,他們確實…結果比較平衡,稍微平衡一些,尤其是最糟糕的情況…得分最高的位置在驗證集中。所以這是一個自然的錯誤來源,因為它超出了任何進行訓練的範圍。 |
| |
我認為這確實是一個 K 折疊分析比僅進行單一保留集更引人注目的案例。 |
| |
我認為,這兩個單一保留集都存在一些偏差,最好進行更多折疊,以便分層…分配事物 |
| |
每次都不一樣,然後看看多次擬合後會發生什麼。所以你可以看到我在這裡創建的折疊在分佈方面是什麼樣的,現在讓我們運行 XGBoost。 |
| |
所以這個外掛其實有很多功能,我今天不想讓你感到不知所措,但再次強調,我鼓勵你跟著影片一起看,如果你想自己跟著看,可以暫停影片。 |
| |
確認一下。但我們這裡做的,我只是運行了一個腳本。順便說一下,日誌裡的所有東西都有…JMP 表很棒,你可以保存腳本。所以我在這裡做的就是用那個腳本運行 XGBoost。 |
| |
舉個例子,我將直接從選單重新運行它。這可能是你想要的方式。所以當你安裝插件時, |
| |
你點擊預測模型,然後點擊 XGBoost。所以我們把它加到了預測模型選單中。你的設定方式如下: |
| |
是指定響應。這裡是 Y。這裡有七個預測變量,我們將它們作為 x 放在這裡,然後你再放上它們的折疊列和驗證集。 |
| |
我想在這裡向那些經驗豐富的 JMP Pro 用戶指出一點,XGBoost 處理驗證列的方式與其他 JMP 平台略有不同。 |
| |
目前,它是一種實驗框架,但根據我的經驗,我發現重複 K 折疊是一種非常引人注目的方法,我想設定插件以使其變得簡單。 |
| |
因此,我在這裡再次輸入我們用實用程式建立的這些折疊列,XGBoost 將自動執行重複的 K 折疊,只需像我們在這裡一樣指定它即可。 |
| |
如果你想像原始分析那樣進行單一保留,你可以像平常一樣進行設置,但你必須使列 |
| |
連續的。這很棘手。我知道我們的一些早期採用者對此感到困惑,這與其他慣例不同 |
| |
JMP Pro 中的其他 XGBoost 或其他預測建模程序,但在我看來,這似乎是最簡潔的方法。同樣,推薦的方法是運行 |
| |
像這樣重複 K 折,或至少進行一次 K 折,然後就可以點選「確定」了。你會看到這個初始啟動視窗。 |
| |
XGBoost 的特點是它有很多調整參數。關鍵參數列在這個方框裡,你可以使用它們。 |
| |
然後我們發現還有很多,它們隱藏在高級選項下,而我們今天根本沒有時間去了解它們。 |
| |
但我們已經盡力了……這些是最重要的,你通常……大多數情況下,你只需要擔心它們。那麼…讓我們繼續運行…讓我們再運行一次,從這裡你可以點擊「開始」按鈕,然後 XGBoost 就會運行。 |
| |
現在我只是在一台普通的筆記型電腦上運行。這是一個相對較小的數據集。所以……我們只是重複了五次 |
| |
只需幾秒鐘,就能完成三件不同的事情。 XGBoost 的調優效果非常好,並且能夠很好地處理更大的資料集。但對於這個小例子,我們先來看看發生了什麼事。 |
| |
現在事實證明,這個初始圖表立即引起了警覺。 |
| |
我們在這裡看到的是...經過多次迭代,擬合迭代,我們得到了一條訓練曲線,它基本上就是你想要下降的損失函數。 |
| |
但實線是驗證曲線。你可以看到這裡發生了什麼。幾次迭代之後,這條曲線就觸底了,然後情況變得更糟。 |
| |
所以在這種情況下,你實際上不應該使用這個預設模型。 XGBoost 已經過擬合了。 |
| |
這通常會發生在像這樣的較小的資料集上,並且確實需要進行調整。 |
| |
底部還有很多其他結果,但同樣,它們……我不認為它們值得信賴。此時,你需要…你需要做一些調整。 |
| |
今天,我們只進行一些手動調優,但我鼓勵你這樣做。我們實際上已經實現了一個完整的框架來創建調優設計, |
| |
您可以在其中指定一系列參數並蒐索設計空間,我們實際上再次使用 JMP DOE。 |
| |
所以…我們已經有兩種不同的 DOE 使用方法,這兩種方法都確實增強了功能。現在,我們先根據這張圖進行一些手動調整。 |
| |
你可以看看我們能不能…放大這張圖,我們可以看到曲線已經觸底。我來看一下,在三、四次迭代之後,我們可以做的一件非常簡單的事情就是,在四步驟之後停止訓練。 |
| |
看看會發生什麼事。順便說一下,注意一下我們的過擬合情況,驗證集的R平方實際上是負的,非常糟糕。這絕對不是一個推薦的模型。但是如果我們運行這個新模型,只需要四步…就四步, |
| |
看看會發生什麼事。 |
| |
驗證集的 R 平方值好多了。現在大約是 0.16,實際上,我們先試試三個,看看會發生什麼。 |
| |
稍微差一點。所以你看,這是可以嘗試的事情。我們已經嘗試建立這種對話機制,以便我們能夠接受這種情況。 |
| |
你可以在這張表上進行一些模型比較,這張表一開始會對你有幫助。你可以按不同的列排序,找到最佳模型,然後向下鑽取,查看各種模型細節。 |
| |
讓我們繼續使用模型 2,我們可以做的是... |
| |
我們只保留那一個,然後你就可以清理...你可以清理你不想要的模型,它會刪除隱藏的模型。 |
| |
現在我們回到我們想要深入研究的模型。請注意,我們的驗證集 R 平方大約是 0.17。 |
| |
所以,請記住,這實際上是 Jaivime 最初得到的和評論家得到的之間的差距。 |
| |
我認為這是一個更可靠的 R 平方測量方法,因為它是整體計算的,我們實際上進行了 15 種不同的建模擬合, |
| |
三次不同的五倍。所以這是這些值的平均值。所以我認為這能更清晰、更可靠地衡量模型的表現。 |
| |
如果你向下滾動查看任何擬合的模型,你會看到相當多的輸出。再說一次…JMP 非常擅長…我們總是試圖在統計數據附近製作圖表,以便你能夠 |
| |
兩者都可以看到正在發生的事情並附加數字,並且這些圖表可以正常顯示,並且具有良好的互動性。 |
| |
但你可以看到,我們得到了訓練集的實際值、預測值和驗證集。驗證集的情況幾乎總是會變得更糟,但事實就是如此。 |
| |
你可以再次看到錯誤發生的地方,這就是真正的高點,它經常會到達......這是 45 度線。 |
| |
所以那些高測量值往往…而且所有高測量值往往被低估,這很正常。我認為對於任何類似的方法來說,它都會傾向於縮小 |
| |
降低極值,只是為了保守起見。這樣你就能準確地看到錯誤發生的位置和程度。 |
| |
現在,Jaivime 的主要興趣是…他最感興趣的是看看哪些變數真正推動了 |
| |
這是水校正效果。我們可以看到,最突出的是這個叫做 PET 的。 |
| |
在 XGBoost 中,評估變數重要性的方法有很多種。你可以直接用分割次數作為增益度量,我認為這是 |
| |
也許是最適合入門的指標。它衡量的是每次根據某個變數進行拆分時,模型的改進程度。還有一個指標叫做覆蓋率。 |
| |
在這種情況下,對於這三者中的任何一個,PET 都顯得尤為重要。所以,基本上,這種快速分析似乎就是針對這些數據採取行動的地方。 |
| |
現在有了 JMP,我們實際上可以做更多的事情。您可以看到,在建模紅色三角形下方,我們添加了許多新功能。您可以保存預測值和公式, |
| |
您可以發佈到模型庫或公式庫並在那裡做更多的事情。 |
| |
我們甚至提供了產生 Python 程式碼的例程,它不僅用於評分,實際上還負責完成所有的訓練和擬合工作。這算是個新功能,但它能幫助那些想要從 JMP Pro 過渡到 Python 的使用者。不過,這裡我們先來看刻畫器。 |
| |
我必須在之前的影片中向我的朋友布拉德瓊斯 (Brad Jones) 表示歉意,我忘了承認他是分析器的發明者。 |
| |
所以,這其實是一個案例,某種程度上也歸功於他。我們現在用另一種方式來運用它,也就是評估變數的重要性以及每個變數是如何運作的。所以對我來說,這真的非常引人注目。 |
| |
我們可以……我們可以看看這個框架。查理……我一提到這個,查理就立刻從沙發上站了起來。他現在就在我身邊。 |
| |
那麼,看看會發生什麼…我們可以看到有趣的事情是這個 PET 變量,我們可以看到關鍵時刻,似乎只要 PET |
| |
當數據剛好超過 1200 左右時,事情才真正開始好轉。所以,這很好地說明了分析器的工作原理。 |
| |
據我所知,這是第一次……這是第一個……這是唯一提供 |
| |
像這樣的圖表,它超越了重要的統計指標,向你展示了到底發生了什麼,並幫助你解釋 |
| |
提升樹模型。我認為這確實是一種很好的分析方法,我鼓勵你這樣做……也鼓勵你用你自己的數據嘗試。 |
| |
現在讓我們來看另一個例子並回到我們的日誌。 |
| |
正如你所見,這裡有很多東西。我們當然沒有時間一一講完。 |
| |
不過,為了節省時間,我想先展示一下當我們有一個二元目標時會發生什麼。我們剛才討論的是連續的。 |
| |
為此,我們將使用舊的糖尿病資料集,該資料集已經存在很長時間了,可以在 JMP 範例庫中找到。這個資料集與之前的資料集相同,但我們添加了一些新的腳本。 |
| |
所以如果你下載了期刊,你就會得到這個增強版本,它有 |
| |
XGBoost 運行了相當多的不同的二元序數目標,正如你記得的,這裡我們得到了從原始 Y 變數派生出的低值和高值測量值, |
| |
看看對糖尿病的反應。我們還要更進一步。假設我們處於某種醫療環境中,我們實際上想要使用利潤矩陣。我們的目標是做出決策。我們要預測每個人, |
| |
無論他們是高還是低,但當我思考這個問題時,我們意識到,如果一個人確實很高,那麼風險就會更高。 |
| |
因此,我們的利潤或虧損可能會翻倍,這取決於實際狀態是否較高。當然, |
| |
這是一種通常正確的工作方式...正確的決定在這裡和這裡。 |
| |
然後不正確的是在這裡,那些是......當你設定這樣的矩陣時,你要考慮所有四個單元格。 |
| |
這裡我來做一個簡單的例子。它正在翻倍,我不知道你能不能給它真正的貨幣價值。如果你處於這種情況,這實際上是一件好事。 |
| |
誰知道呢,也許我們可以將它們視為一個比特幣,每個價值大約為 10,000 美元或類似的數字。 |
| |
沒什麼大不了的。更重要的是,我們想根據自己的情況做出最佳決策。 |
| |
我們的預測。所以,我們現在進行分析時,會把這個利潤矩陣考慮進去。實際上,它只是在模型擬合之後才進行,並不會直接用於擬合本身。 |
| |
我們現在要運行 XGBoost,我們有一個二進制目標。如果你注意到 |
| |
目標函數現在已經變成對數損失的邏輯,這就是這裡反映的邏輯對數似然。 |
| |
您可以看到...我們現在可以透過二元目標來查看,我們用來評估它的指標略有不同。 |
| |
但如果你注意到的話,我們確實有利潤列,它們是根據我們剛剛查看的利潤矩陣計算出來的。 |
| |
但如果你處於這樣一種情況,也許你不想擔心利潤矩陣,而只是某種直接的二元回歸,你可以看看常見的指標,例如 |
| |
準確率(與錯誤分類率相反)是衡量準確率的指標。 F1 或 Matthews 相關性值得關注,ROC 分析能幫助你平衡特異性和敏感度。所以,所有這些都是可用的。 |
| |
你可以深入研究。我想展示的一個全新功能是我們仍在努力實現的,那就是我們現在有一個方法可以讓你調整決策閾值。 |
| |
現在你實際上可以以互動方式進行操作。我們有一個新功能…可以按閾值繪製你的利潤圖。 |
| |
因此,這是我們剛開始引入 JMP Pro 的全新圖表,您必須獲得最新的 JMP 16 早期採用者才能獲得它,但它確實適應決策矩陣... |
| |
或者說利潤矩陣。我們正在研究的另一件事是,你可以直接基於這個矩陣推導出一個最佳閾值。 |
| |
我相信,在這種情況下,它實際上仍然是0.5。所以,如果你的真正目標是利潤最大化,這在某種程度上可以讓你更深入地了解你可能想要做的事情。 |
| |
否則,您可能希望根據您的上下文來平衡特異性和敏感性,但您會得到典型的混淆矩陣,如下所示,以及此處顯示的一些用於訓練和驗證的圖表。 |
| |
然後是 ROC 曲線。 |
| |
你也會得到和我們之前看到的變數重要性相同的結果。讓我們繼續使用分析器,因為這確實是一個不錯的選擇… |
| |
在這種情況下,這也很好。我們可以準確地看到每個變數的情況。 |
| |
例如,我們可以看到,LTG 和 BMI 是兩個最重要的變量,而且它們似乎都隨著反應的增加而上升,所以我們可以直接看到這種關係。事實上,有時用樹狀圖,你會得到非線性的結果,例如這裡的 BMI。 |
| |
目前還不清楚這是否是真實存在的事情,我們可能需要做更多分析或研究更多模型來確認,也許這裡確實發生了一些事情。 |
| |
我們看到的凹凸。但這些都是你可以梳理出來的東西,看起來真的很有趣。 |
| |
好了,這就是我們用糖尿病數據集進行實驗的方法。期刊的內容遠不止這些。還有兩個例子,由於時間關係,今天就不展示了,不過 XGBoost 文件裡有詳細的記錄。 |
| |
這是一份PDF文檔,裡面詳細介紹了該插件,並逐步引導您完成這兩個範例。所以,我建議您查看一下。 |
| |
然後,該日誌還包含已完成的幾種不同的比較。 |
| |
你看到了我們研究的這個紫色矩陣。這是賓州大學進行的一項研究, |
| |
他們在一系列不同的資料集上比較一系列機器學習方法,然後比較一種方法比另一種方法表現好多少倍。 XGBoost |
| |
最終成為最佳模型,雖然這次比較並不總是最好的,但平均而言,它的表現往往優於你在這裡看到的所有其他模型。所以,還有一些證據表明 |
| |
這項技術的威力和能力。還有一些其他的事情我就不細說了。 |
| |
這個山谷模型很有趣。在這個例子中,樹木根本沒發揮什麼作用。這有點像是病態的情況,但研究起來很有趣,有助於理解到底發生了什麼事。 |
| |
我們也在 JMP 研發部門內部進行了一些相當廣泛的測試,其中許多結果來自幾個不同的資料集。 |
| |
再次強調,為了節省時間,我就不詳細講了,但我鼓勵大家去看看。確實如此……我們所有的結果都附在了期刊裡,你可以在許多不同的領域和資料規模上進行測試。 |
| |
那就去看看吧。我跟你說個玩笑,我們關於速度的結論總結在這個小表情包裡。我們有兩輛不同的車。 |
| |
實際上,它確實尖叫著,並且它被調整為利用所有...GPU 中的所有線程...在 CPU 中。 |
| |
如果你使用的是 Windows 系統,並且擁有 NVIDIA 顯示卡,你甚至可以充分利用 GPU 的效能,這通常能帶來五倍的運行速度提升。這真的很有趣。 |
| |
好了,本教學就到此結束。再次鼓勵大家去嘗試。我真的很感謝大家的參與。 |
| |
我擔心實際上我可能忽略了一些人,但我至少想感謝這些人。我們有一個很棒的早期採用者群體。 |
| |
他們提供了來自 Marie、Diedrich 的非常好的回饋,而維拉諾瓦大學的這些人實際上已經開始在課堂環境中成功使用 XGBoost。 |
| |
聽到這個消息真是太好了。 JMP 內部的許多人都在提供協助。 |
| |
當然,這是建立在整個 JMP 基礎架構之上的。所以,在某個時候,我幾乎需要列出整個 JMP 部門的幫助,這項工作非常有趣。 |
| |
然後我要感謝我們的生命科學團隊,他們在很多事情上都讓我保持誠實。他們也提供了許多建議,給了我很大的幫助。 |
| |
Luciano 實際上已經實作了一個 XGBoost 插件,這是 JMP Genomics 的一個附加插件,如果你正在使用 JMP Genomics,我建議你也去了解一下。你也可以在 JMP Genomics 的預測模型框架中直接呼叫 XGBoost。 |
| |
所以非常感謝您的關注,希望您可以嘗試 XGBoost。 |