浪費在Excel上的時間:如何開始專家式機器學習實驗追蹤?

2021-01-09 讀芯術

全文共4873字,預計學習時長13分鐘

圖源:unsplash

實話說,筆者花在管理和追蹤機器學習實驗上的時間,比花在開發機器學習模型上的時間要多得多。筆者最開始用Excel工作表標出正在試驗的所有參數和指標、用不同顏色來編碼、手動輸入結果,等等。筆者知道自己需要一次性調整工作流程。

本文首先將介紹追蹤實驗的重要性,然後將概述MLFlow如何讓生活變得簡單,最後通過一個常見的代碼示例來解釋如何自己進行整合。在此之後,保證你可以像個專家一樣整合機器學習流(ML flow)和優化工作流!

為什麼要追蹤實驗

不論你是老手還是新手,都不可能一次性開發出性能最好的模型。最佳性能模型的關鍵是對手頭業務的指標優化進行迭代。在數據科學的生命周期中,進行實驗只是模型開發環節中一個必要的步驟。

當涉及到產品研發時,實驗是數據科學生命周期中最關鍵的一步。在這類研究任務繁重的問題中,僅僅找到最佳解決方案是不夠的,還需要概述如何獲得最佳性能解決方案,並確保該解決方案的可複製性。

這一切都是以實驗階段為底線。我們只能建立有效高效的工作流來創建實驗、追蹤實驗、評估結果、存儲模型,最後重複這一過程。

用MLflow來擺脫困境

當筆者請教經驗豐富的專家時,他們只推薦了寥寥幾個工具以供嘗試。筆者的基本要求是:

· 幾乎不更改對現有代碼。

· 開源且免費。

· 不限制平臺,可以選擇最適合當前問題的平臺。

MLflow滿足了所有這些要求,並且還要更加強大。

一個用於機器學習生命周期的開源平臺。| 圖源:MLflow

MLflow是一個管理機器學習生命周期的開源平臺,包括實驗、可重複性、部署和中央模型註冊。沒錯,它所提供的不僅僅是實驗跟蹤,而是覆蓋了完整的機器學習生命周期。它包含以下功能:

· MLflow 追蹤——實驗追蹤,來記錄和比較參數和結果。

· MLflow 項目——以可重用、可複製的形式打包機器學習代碼,以便與其他數據科學家共享或用於生產中。

· MLFlow 模型——管理和部署模型,從各種機器學習庫到各種模型服務和推理平臺。

· MLFlow 模型存儲——中央模型存儲,協同管理MLflow模型的整個生命周期,包括模型版本控制、階段轉換和注釋。

雖然MLflow具有所有這些高級功能,但本文將重點討論MLflow追蹤以及它如何幫助我們有序地追蹤機器學習實驗。

理解典型工作流

還有什麼比通過一個著名的示例進行演練更有助於理解典型工作流的呢?這裡將使用著名的安德森鳶尾花數據集,並構建一個分類算法來預測該鳶尾植物的種類。選擇這個數據集沒有什麼特別的原因,只是因為它很容易從scikit-learn庫中獲得,並且可以立即嘗試。

fromsklearn.datasetsimport load_irisfromsklearn import metricsfromsklearn.model_selection importtrain_test_splitfromsklearn.tree importDecisionTreeClassifierdefload_iris_data():data = load_iris()X = data.datay = data.targetX_train,X_test, y_train, y_test = train_test_split(X,y, test_size =0.25, random_state = 10)input_data = (X_train, X_test, y_train, y_test)returninput_datadeftrain_predict_evaluate_dtree(input_data,params):X_train,X_test, y_train, y_test = input_dataclf = DecisionTreeClassifier(random_state=42,max_leaf_nodes=params['leaf_nodes'],max_depth=params['max_depth'])clf.fit(X_train,y_train)y_pred = clf.predict(X_test)test_accuracy = metrics.accuracy_score(y_test, y_pred)test_f1_score = metrics.f1_score(y_test, y_pred, average='weighted')test_metrics = (test_accuracy, test_f1_score)returnclf, test_metricsinput_data = load_iris_data()params = {'leaf_nodes': 3, 'max_depth' :2}model,test_metrics =train_predict_evaluate_dtree(input_data, params)

圖源:unsplash

分解該分類問題的簡單代碼如下:

· 1–4行:導入全部所需庫。

· 6–12行: 定義一個函數,加載鳶尾花數據,拆分得到訓練集和測試集,然後返回這兩個數據集。

· 14–24行:定義一個函數,輸入數據和模型參數,建立決策樹分類器,預測測試數據,評估準確率和F1得分。這個函數最終返回模型和評估指標。

· 26–28行:設置模型參數,通過調用load_iris_data()函數加載數據,並將數據和參數傳遞給train_predict_evaluate_dtree()函數。

如果必須運行多個實驗來找到性能最好的模型,那就只能讓函數循環運行,然後在excel工作表中手動輸入這些參數和指標。這是筆者在整個項目時間線上記錄所有實驗的唯一方法。

即刻整合MLflow

本例僅增加6行代碼。這一點讓筆者非常驚喜,現在筆者再也不用Excel工作表了。代碼如下:

from sklearn.datasets import load_irisfrom sklearn import metricsfrom sklearn.model_selection importtrain_test_splitfrom sklearn.tree importDecisionTreeClassifierimport mlflowimport mlflow.sklearnmlflow.sklearn.autolog() defload_iris_data(): data = load_iris() X = data.data y = data.target X_train, X_test, y_train, y_test = train_test_split(X,y, test_size =0.25, random_state = 10) input_data = (X_train, X_test, y_train, y_test) return input_data deftrain_predict_evaluate_dtree(input_data, params): with mlflow.start_run(run_name = "Decision Tree ClassifierExperiments"): X_train, X_test, y_train, y_test = input_data clf = DecisionTreeClassifier(random_state=42,max_leaf_nodes=params['leaf_nodes'], max_depth=params['max_depth']) clf.fit(X_train, y_train) y_pred = clf.predict(X_test) test_accuracy = metrics.accuracy_score(y_test, y_pred) test_f1_score = metrics.f1_score(y_test, y_pred, average='weighted') test_metrics = (test_accuracy, test_f1_score) mlflow.log_metric('test_accuracy' , test_accuracy) mlflow.log_metric('test_f1_score', test_f1_score) return clf, test_metrics input_data = load_iris_data()params = {'leaf_nodes': 3, 'max_depth' :2}model, test_metrics =train_predict_evaluate_dtree(input_data, params)

改動之處如下:

· 第5行:導入mlflow庫

· 第6行:此處還導入了相關的MLFlow.skLearn模塊。這完全取決於模型建立在哪個安裝包上。也可以用mlflow.tensorflow,mlflow.pytorch,mlflow.xgboost等等。

· 第7行:自動掃描是最近引入的一個實驗性能,它減少整合MLflow的麻煩。該函數自動記錄所有參數和指標,並將模型構件保存在一起,因此能夠重現運行或檢索已經訓練好的模型文件以備以後使用。

· 第18行:MLflow Tracking圍繞運行的概念,後者指的是數據科學代碼片段的運行。如果想找到輸入分類器模型的最佳參數,可以使用不同的參數創建多個運行,找出哪一個運行給出了最好的結果。因此,這一行實際上是用mlflow.start_run()函數啟動一個運行,由此將記錄的所有內容與該特定運行相關聯。

· 28–29行:autolog()當前記錄與訓練相關聯的指標,如僅記錄測試精度。然而,本例希望比較其他測試指標,例如測試精度和測試F1分數。因此,使用log_metric()函數來記錄所有自定義指標。

你可以自行決定如何多次運行或實驗。你可以選擇在需要時多次運行代碼,或者一次執行多次運行。筆者通常用想要實驗的參數創建一個小循環,並一次運行,代碼如下:

forparams indifferent_combinations_of_parameters: model,metrics =train_predict_evaluate_dtree(input_data, params)

可以用面板來跟蹤機器學習實驗吧?當然可以。到目前為止,記錄的所有內容都可以通過MLflow UI伺服器訪問。只需在終端上(從正確的目錄)運行mlflow ui,並在瀏覽器上打開http://localhost:5000/即可。

可以在MLFlow UI伺服器中找到有關運行的所有內容。

你可以比較幾個運行實例,可視化地分析參數的變化如何改變指標,甚至可以將數據下載為CSV格式文件以備需要作為報告提交。模型文件與YAML環境一起保存為構件,以後也可以利用。

你可能需要花一些時間來了解MLflow概念,以便更多地了解實驗、運行、構件、自動日誌記錄和其他性能,最終一定會掌握訣竅的。

當筆者第一次將它合成到工作流程大概花了5天時間(大部分時間是在研究和探索性能上),但現在筆者只花了幾分鐘就可以完成。筆者認為這件事再簡單不過了,它確實遵循了最佳實踐,並節省了很多時間。

本文介紹了追蹤實驗的重要性,以及如何將MLflow輕鬆地整合到工作流中,就像示例一樣專業且輕鬆地解決問題。希望它能幫到你。

留言點讚關注

我們一起分享AI學習與發展的乾貨

如轉載,請後臺留言,遵守轉載規範

相關焦點

  • 這還是Excel?外國小哥用Excel實現光線追蹤效果,甚至還有3D引擎
    編輯:Q【新智元導讀】近期,有國外大神用Excel完成了英偉達顯卡才能實現的光線追蹤技術的演示,實現了不錯的光影效果,而且全程只使用了公式和宏功能
  • 用UTM參數進行流量追蹤完整指南(上)
    沒有強大的追蹤和複雜的歸因系統,您很難具體而準確地分配收入到任何具體的觸點上。另外,如果您只追蹤諸如填表之類的觸點,那麼您可能會漏掉一些關鍵觸點——我們的研究表明,這些關鍵觸點有填寫表單的7-8倍之多。
  • 如何使用excel製作考勤表?
    比如我們在工作中,早上需要打卡,記錄上班時間,這也算是一種考勤。如果上班遲到了,那麼,考勤記錄下後,工資發放的時候也會相對應的減少。所以,考勤也能夠在一方面表現出我們對於工作的熱情。在學校,班級裡也會有一個紀檢委員,來記錄同學們是否遲到,早退,甚至是曠課等的考勤。但是,身邊的很多同事都會覺得製作考勤表很麻煩,小編認為,他們是沒有用對方法吧。因為在小編看來,考勤表的製作,只需要短短五分鐘即可。
  • 「Excel技巧」教你如何快速將excel表格轉化為圖片
    今日話題:excel表格如何轉化為圖片!關於excel表格如何轉化為圖片,這個在日常工作中經常會遇到。很多人可能先想到的是QQ截圖,畢竟QQ截圖,大家都用得很順手、很習慣。現在教你兩種將excel表格轉化為圖片的方法,不論表格多大,都不成問題。
  • 如何在Excel裡安裝excel插件?
    數據獲取的過程麻煩,特別是周期性的數據獲取,每次都要找IT人員幫忙,再粘貼到excel中去。首先,文件滿天飛,不好管理;其次,權限不好控制,沒法做到只共享分析結果,而不共享明細數據;最後,數據沒法做到每個人的數據不同,根據用戶權限動態更新數據。
  • 如何在excel輸入√與×自動標註顏色,你的同事1分鐘就搞定
    Hello,今天跟大家分享下如何快速的輸入√與×這兩個特殊的符號並讓表格自動填充與之對應的顏色,效果如下圖,話不多說,下面就和大家分享下如何製作。如何在excel輸入√與×自動標註顏色,你的同事1分鐘就搞定首先,我們需要了解什麼叫做自定義單元格式呢?
  • 95後哈佛小哥撰寫《從零開始的機器學習》,入門必備,書籍資源已開放
    說起機器學習入門書,大概有成百上千種選擇。這些書籍大多是由具備豐富研究經驗的學者撰寫的,涵蓋各種主題。俗話說「開卷有益」,但對於轉專業的初學者來說,這本新書或許更適合入門:近日,一位畢業於哈佛大學的小哥根據自己的機器學習入門經歷,撰寫了一本《從零開始的機器學習》。
  • excel數字結構解析:日期和時間的自動識別規則
    不知道大家有沒有發現這麼一個現象,在excel中輸入一下不太完整的日期或時間,依然能被excel自動識別出來。比如在excel中輸入「19-12-1」,excel會自動顯示「2019/12/1」。那在excel中,識別日期和時間的規則還有哪些呢?我們一起來看看吧!
  • excel中如何加載特殊符號
    鍵盤上雖然有一些常用的符號,但是並不完整,仍然有些符號是我們無法通過鍵盤打出來的。那excel中如何加載特殊符號呢?方法/步驟打開excel表格。把滑鼠放置在這個圖標上,單擊「滑鼠右鍵」,然後會出現一個小窗口,選擇「軟鍵盤」。選擇「軟鍵盤」以後,還會出現一個小窗口,選擇最後一個「特殊符號」。接著,軟鍵盤就出現了,可以看到軟體盤上會有很多特殊符號,基本都包括了常用的符號。
  • 如何實現在WORD中打開EXCEL文件
    與開始菜單的運行功能一樣。在本節中我們需要注意下面幾個知識點:① 如何建立應用程式的引用。③ 如何利用shell函數打開文件。④ 利用shell函數如何處理文件名中的空格問題。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。VBA是利用Office實現自己小型辦公自動化的有效手段,我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。
  • 劉鐵巖談機器學習:隨波逐流的太多,我們需要反思
    經典優化算法的優化路徑如何?最近一段時間,學者們在這個方向做了很多有益的嘗試,比如討論隨機梯度下降法在什麼條件下可以找到全局最優解,或者它所得到的局部最優解跟全局最優解之間存在何種關係。再比如,最近很多學者開始用自動化的方式幫助機器學習尤其是深度學習來調節超參數、搜尋神經網絡的結構,相關領域稱為元學習。
  • Excel又卡又慢,居然高達600MB,你的Excel該瘦身了
    Hello,大家好,工作中大家有沒有遇到過這樣的情況,就是excel中沒有輸入很多內容,但是excel卻變得非常的大,打開還非常的慢,對excel進行操作的時候,excel也會變得十分的卡,今天就跟大家分享下我們如何為這樣的Excel瘦身,讓他返回他應有的大小對於excel突然變得非常大,究其根本還是excel中儲存了這麼多內容,只不過我們看不見罷了,大致上可以分為3種情況
  • 亞馬遜機器學習服務Amazon SageMaker又添九項新功能
    將數據轉化為特徵的工作稱為特徵工程,在構建機器學習模型流程中要消耗開發人員大量的時間。Amazon SageMaker Data Wrangler 從根本上簡化了數據準備和特徵工程的工作。通過 Amazon SageMaker Data Wrangler,客戶可以從各種數據存儲中選擇他們想要的數據,並一鍵導入。
  • 如何用Python讀取Excel中圖片?
    那麼你知道如何使用Python讀取Excel中的圖片?又如何使用Python直接往Excel中寫入圖片?甚至使用Python製作一個Excel可視化大屏?二、Python寫入Excel圖片在講完如何用Python提取Excel中圖片之後,下面我們將講解如何用Python將圖片寫入到Excel文件中。
  • OpenAI追蹤AI模型效率:每16個月翻一番!超越摩爾定律
    智東西5月6日消息,昨日,OpenAI宣布將開始追蹤效率最高的機器學習模型,該舉措推出了新的評價指標,可用以量化模型的擴展規模和整體性能,從而可實時公示效率最高的模型,為行業提供參考。算法效率的提高使得研究人員可以在給定的時間和預算內進行更多有趣的實驗。分析表明,決策者應該增加對學術界計算資源的資助,以便學術研究成果能夠複製、再生以及擴展行業研究。
  • 從Bengio演講發散開來:探討邏輯推理與機器學習
    然而在人工智慧領域,這兩種能力通常是分別通過機器學習和邏輯編程來實現的,因此,這兩類技術在人工智慧的歷史上是分開發展的。本文提出的誘因性學習(Abductive Learning)旨在將兩類人工智慧方法有機地統一起來,即機器學習模型學習從數據中感知原始邏輯事實,而邏輯推理方法則是引入符號領域知識並糾正錯誤感知的事實,以改進機器學習模型。
  • 重建腦科學與AI之間的橋梁,人工神經網絡比機器學習更優嗎?
    然而,從那以後,實驗神經科學並沒有直接推動機器學習領域的發展,這兩門學科似乎都是獨立發展的。4 月 23 日,巴伊蘭大學物理系和 Gonda(Goldschmied)多學科腦研究中心的 Ido Kanter 教授等人在《科學報告》雜誌上發表了一項最新研究成果,成功地在實驗神經科學和高級人工智慧學習算法之間重建橋梁。
  • 唯一《可解釋機器學習》中文書來了:復旦研究生翻譯,原作者轉發點讚
    朱明超近期完成了這本書的翻譯和校對工作,目前已經開源放到GitHub網頁上。朱同學在翻譯過程中還和原作者進行了多次討論,中文版還得到了Christoph Molnar本人在Twiter上的推薦。「可解釋」是這本書的核心論題。作者認為,可解釋性在機器學習甚至日常生活中都是相當重要的一個問題。
  • Excel如何快速拆分文字和數字?分享一些Excel常用的操作技巧
    一、快速拆分文本和數值如下表格可以看出,個人信息中姓名和聯繫方式是在同一個單元格,那麼如何將其快速拆分出來呢?二、快速填充工作日在下列日期中,如何快速填充工作日呢?操作方法:選中數據區域,點擊開始——填充——序列——工作日,步常值為1,終止值為2019-1-31。
  • 孩子該幾歲開始「認字」?耶魯大學博士:「超前」教育是浪費時間
    同樣的年紀,我們還在玩泥巴,捉迷藏,現在的孩子卻已經可以背誦《三字經》《百家姓》,甚至是圓周率也背得比我們更溜……家長總是想著不能讓自家孩子輸在起跑線上,於是拼命地往孩子的腦海中灌輸知識,殊不知這樣其實是在傷害孩子。鄰居家的孩子剛剛上小學1年級,卻已經能夠自主閱讀名著,大部分的生字都已經認識了。別人都在感慨孩子的聰明時,我卻心疼孩子的不容易。