首先,機器學習的演算法與普通的軟體的結果是不同的,一般來說無法對整個測試集保證其正確或者錯誤(對於分類問題),回歸問題就更無法下這個定義了。所以一般機器學習的測試集是用來測試根據訓練集得到的模型是否在測試集上運行良好,既符合期望。主要的衡量標準有更多,比如泛化程度(既從一個小的訓練集學習到的模型是否能符合更大的數據),特殊程度,真正例率,假正例率等。對於機器學習,沒有一個固定的對錯,只有一個更適合於某個問題(數據集)的模型,所以用軟體測試的方法考慮機器學習是不恰當的,應該用統計理論去分析一個機器學習演算法是否足夠好,而這個足夠好也是給予具體問題和具體樣本,去跟另外一個演算法進行比較,甚至還要具體到你所偏高的結果等等。最終答案,機器學習的演算法的輸出沒有對錯之分,分析演算法好不好,要從正確率,時間空間複雜度,數據集大小對演算法效率的影響等幾點去比較不同的演算法,所以不存在你說的問題…白盒測還有點意義,黑盒測試在沒有對比的情況下沒有什麼意義。因為無法假設一個正確的輸出。如果你想做機器學習的演算法測試,數學學習,統計學是最基本的,所有的演算法原理必須掌握。個人覺得問這個問題沒什麼意義,因為一旦機器學習的演算法你都懂了,你就去寫代碼了…

先上結論:保證演算法結果的正確性,需要從「演算法推導的正確性」、「演算法效果的正確性」和「演算法應用的正確性」3個維度來考慮。下面人郵君展開來說:

01.演算法推導的正確性

演算法推導的正確性,指的是對演算法本身的推導和實現進行測試檢查,主要可針對自研演算法,可做演算法的單元測試等。

演算法是可供計算機執行的對數據進行處理的一個有窮步驟,是解決問題的一個邏輯順序,是解題方法的精確描述,它有一些精確定義的操作規則,每條規則是確定的、能行的,不能有二義性。所以,尤其是對於自研演算法來說,需要對推導過程的進行檢查,以保證其正確。以單元測試階段為例,主要包含項目規範檢查、靜態代碼檢查、代碼邏輯覆蓋、演算法高效性分析、服務異常處理幾個測試點。

02.演算法效果的正確性

即對不同演算法訓練出的模型預測效果進行評估,測試其泛化能力。

常用的測試方法有:蛻變測試,即根據公式特點,特定變換數據,進行結果比較,如類別標籤亂序、屬性亂序、增加無信息屬性、一致重複預測等;大數據ETL測試;特徵指標分析;模型效果評測,專業指標評測(KS、PSI、精確率、召回率、AUC、F1 Score等);

《機器學習測試入門與實踐》這本書中,對大數據ETL測試、模型效果評測等進行了很詳細的介紹。

作者:艾輝
機器學習測試入門與實踐(非同步圖書出品)京東¥ 106.20去購買?

比如大數據ETL測試,與傳統數據測試過程類似,大數據ETL測試也需要經歷分析業務需求-制定測試計劃-設計測試試用例並準備測試數據-靜態代碼CR-執行測試-生成測試報告並分析結果-測試完成這幾個過程,書中除介紹具體流程外,還對測試方法(比如功能性測試和非功能性測試)、測試場景給出了清晰的說明。

圖源:《機器學習測試入門與實踐》

這本書能夠幫助讀者瞭解機器學習是如何工作的,瞭解機器學習的質量保障是如何進行的。

03.演算法應用的正確性

即保證上層功能應用的正確性,端到端的測試保證,覆蓋代碼邏輯、服務性能、安全性、功能場景等。同時,還要保證模型線上的穩定性,如離線與在線的一致性(特徵、模型),小樣本試驗,AB測試,模型效果監控等。

同樣在《機器學習測試入門與實踐》書中,也對演算法應用給出了說明。比如在模型測試部分,結合機器學習生命週期,對AB測試、模型效果監控等給出了詳細說明。其中,針對AB測試,作者談到,AB測試有兩種形式,模型B「陪跑」,不進行決策;模型A和模型B按照流量劃分,同時進行決策。

以上3個維度主要講演算法測試的方法及不同側重,又該如何對演算法測試提效呢?可以從以下幾個方面思考,如:自動化、工具化、服務化、可視化。並進一步在模型效果評測、模型實驗追蹤、模型效果監控等方面做平臺化實踐。這在《機器學習測試入門與實踐》這本書裏,通過模型工程、AI In Test兩大篇章,進行了全面的介紹。

針對機器學習測試,人郵君推薦同學們看一下《機器學習測試入門與實踐》這本書,這是業界第一本AI測試著作,精選15個AI測試要點,從零開始,幫助想要做測試的同學全面瞭解機器學習測試。涵蓋5個技術主題,大數據、模型演算法、模型評測、工程架構、智能化測試。內容設計深入淺出,學習路線清晰,幫助讀者瞭解機器學習是如何工作的,瞭解機器學習的質量保障是如何進行的,相信你一定有很大的收穫。

關聯閱讀

如何入門機器學習的測試,學習機器學習測試建議看哪些書??

www.zhihu.com圖標

========

贈人玫瑰,手留餘香,不要忘記點贊、收藏、關注 @人民郵電出版社 哦!

一鍵三連,感恩有你~

發佈於 2020-10-21繼續瀏覽內容知乎發現更大的世界打開Chrome繼續u-235u-235肖戰你不糊你不退出娛樂圈我不改簽名,和你沒完!先點個贊!說實話這個東西已現有的軟體測技能來說是個無解的答案.在此之前我自己給這個的定義叫演算法測試!至於說從現有的軟體測試來說這個東西是真心的無解,如果你真要測試的話,我可以給你幾個參考意見:僅供參考!僅供參考!僅供參考!1.象徵性測試,ps:這個測不測對真正的測試來說和沒測沒啥差別!

那一些所謂的可以驗證這個這個演算法的數據驗證一下,只要沒問題就算通過!

2.驗證性測試,ps:這個測試手段僅僅比第一個嚴謹那麼一點點,還是可以忽略不計.這個測試就是最開始做的時候你的業務數據模型做測試只要合格就算測試通過!上述所說的測試手段僅僅是絕大多數國內開發眼中的測試,對於我這種專業玩測試的人來說可以算是業餘吧,沒有鄙視人的意思,單純就事論事!下面來點乾貨!演算法測試:本人所能設計出來的測試手段分下述手段和步驟,主要以白盒測試和黑盒測試思想相結合的測試邏輯.1.在演算法被設計之前,主要考慮業務場景.如:數據是否規範,假設存在錯誤數據集中存在正確數據怎麼辦?反之怎麼辦?2.數據效率:你設計的這個演算法數據處理效率的高低,快還是慢?不要和我說這演算法用了很久你說的問題不存在!

3.白盒測試和集成測試

這個是演算法測試的重點,白盒測試簡單說一下,循環嵌套的測試,if和else的邏輯路徑走查等,你可以找下白盒測試相關的東西;還有就是你的模塊在運行時A模塊輸出的東西是b模塊要的數據,那麼B模塊裏運行A模塊的數據是否被正確運行,這些都需要測試.有了這三點再結合語言的特點在進行詳盡的代碼白盒測試,比如說數組計數了等等,我不是開發所以也不知道你面臨的演算法和語言結合的坑.就寫著麼多吧,畢竟如果你真要詳細測試一個演算法保守估計每個一兩年估計是夠嗆.但是測試演算法本身就需要你對數學要有很強的基本功,不說你能完全理解你哥德巴赫猜想的證明邏輯,你也要這個東西拿出來你也要能百分百看懂,這樣你才能把一個演算法測試完整.想想原山東大學王曉雲教授證明md5和sha1演算法有缺陷你就能對這個問題的專業性就有個完整的理解了!
先點個贊!說實話這個東西已現有的軟體測技能來說是個無解的答案.在此之前我自己給這個的定義叫演算法測試!至於說從現有的軟體測試來說這個東西是真心的無解,如果你真要測試的話,我可以給你幾個參考意見:僅供參考!僅供參考!僅供參考!

1.象徵性測試,ps:這個測不測對真正的測試來說和沒測沒啥差別!

那一些所謂的可以驗證這個這個演算法的數據驗證一下,只要沒問題就算通過!2.驗證性測試,ps:這個測試手段僅僅比第一個嚴謹那麼一點點,還是可以忽略不計.這個測試就是最開始做的時候你的業務數據模型做測試只要合格就算測試通過!上述所說的測試手段僅僅是絕大多數國內開發眼中的測試,對於我這種專業玩測試的人來說可以算是業餘吧,沒有鄙視人的意思,單純就事論事!下面來點乾貨!演算法測試:本人所能設計出來的測試手段分下述手段和步驟,主要以白盒測試和黑盒測試思想相結合的測試邏輯.1.在演算法被設計之前,主要考慮業務場景.如:數據是否規範,假設存在錯誤數據集中存在正確數據怎麼辦?反之怎麼辦?2.數據效率:

你設計的這個演算法數據處理效率的高低,快還是慢?不要和我說這演算法用了很久你說的問題不存在!

3.白盒測試和集成測試這個是演算法測試的重點,白盒測試簡單說一下,循環嵌套的測試,if和else的邏輯路徑走查等,你可以找下白盒測試相關的東西;還有就是你的模塊在運行時A模塊輸出的東西是b模塊要的數據,那麼B模塊裏運行A模塊的數據是否被正確運行,這些都需要測試.有了這三點再結合語言的特點在進行詳盡的代碼白盒測試,比如說數組計數了等等,我不是開發所以也不知道你面臨的演算法和語言結合的坑.就寫著麼多吧,畢竟如果你真要詳細測試一個演算法保守估計每個一兩年估計是夠嗆.但是測試演算法本身就需要你對數學要有很強的基本功,不說你能完全理解你哥德巴赫猜想的證明邏輯,你也要這個東西拿出來你也要能百分百看懂,這樣你才能把一個演算法測試完整.想想原山東大學王曉雲教授證明md5和sha1演算法有缺陷你就能對這個問題的專業性就有個完整的理解了!

先附上Scikit-learn中文文檔:

scikit-learn中文社區

機器學習既是藝術又是科學。但當您查看機器學習演算法時,沒有一種解決方案或一種適合所有情況的演算法。有幾個因素會影響您選擇哪種機器學習。

有些問題非常具體,需要採取獨特的方法。例如,如果您使用推薦系統,這是一種非常常見的機器學習演算法,解決的是非常具體的問題。而其他問題非常開放,則需要試錯的方法去解決。監督學習、分類和回歸都是非常開放的。它們可以用於異常檢測,或者用來打造更通用的預測模型。。

我們在選擇機器學習演算法時所做的一些決定,更多地取決於商業決策,而不是優化或者演算法的技術面。在下文中,我們將討論有助於縮小機器學習演算法選擇範圍的一些因素。

數據科學過程

在開始審視不同的機器學習演算法之前,你必須對你的數據、面臨的問題和侷限有一個清晰的認識。

瞭解你的數據

在決定使用哪種演算法時,必須考慮數據的類型和種類。一些演算法只需要少量樣本,另一些則需要大量樣本。某些演算法只能處理特定類型的數據。例如,樸素貝葉斯演算法與分類數據相得益彰,但對缺失數據完全不敏感。

因此,您需要:

瞭解數據

  1. 查看匯總統計信息和可視化
  • 百分位數可以幫助確定大部分數據的範圍
  • 平均值和中位數可以描述集中趨勢
  • 相關性可以指明緊密的關係
  1. 可視化數據
  • 箱形圖可以識別異常值
  • 密度圖和直方圖顯示數據的分佈
  • 散點圖可以描述雙變數關係

清理數據

  1. 處理缺失值。缺失數據對某些模型的影響超過了對其他模型的影響。即便是對能夠處理缺失數據的模型來說,它們也可能受到影響(某些變數的缺失數據會導致糟糕的預測)。
  2. 選擇如何處理異常值
  • 異常值在多維數據中非常常見。
  • 一些模型對異常值的敏感性低於其他模型。通常,樹模型對異常值的存在不太敏感。但是,回歸模型或任何嘗試使用等式的模型肯定會受到異常值的影響。
  • 異常值可能是數據收集不正確的結果,也可能是真實的極端值。

3.數據是否需要匯總

增強數據

  1. 特徵工程是從原始數據到建模可用數據的過程。這有幾個目的:
  • 使模型更易於解釋(比如分箱)
  • 抓取更複雜的關係(比如神經網路)
  • 減少數據冗餘和維度(比如主成分分析)
  • 重新縮放變數(比如標準化或正則化)

2.不同的模型可能對特徵工程有不同的要求。一些要求已經內置到特徵工程中。

問題歸類

下一步是對問題進行歸類。這分兩步。

  1. 按輸入數據分類:
  • 如果是標籤數據,那就是監督學習問題。
  • 如果是無標籤數據,想找到結構,那就是非監督學習問題。
  • 如果想通過與環境互動來優化一個目標函數,那就是強化學習問題。

2.按輸出數據分類。

  • 如果模型的輸出數據是一個數字,那就是回歸問題。
  • 如果模型的輸出數據是一個類,那就是分類問題。
  • 如果模型的輸出數據是一組輸入數據,那就是聚類問題。
  • 是不是想檢測一個異常?那就是異常檢測。

瞭解你的限制

  • 數據存儲能力如何?根據系統的存儲能力,你可能無法存儲大量的分類/回歸模型或者待聚類的大量數據。例如,嵌入式系統就是這樣。
  • 是否必須迅速作出預測?在實時應用中,儘可能快地作出預測顯然非常重要。例如,在自動駕駛時,必須儘可能快地對道路標誌進行分類,以免發生事故。
  • 是否必須迅速學習?在某些情況下,快速訓練模型是必需的。有時,你需要在匆忙之中用不同的數據集迅速更新你的模型。

查找可用的演算法

你已經對自己的處境有了一個清晰的認識,接下來是識別適用的、利用手中工具可以實際執行的演算法。影響模型選擇的因素包括:

  • 模型是否符合商業目標
  • 模型需要多大程度的預處理
  • 模型的準確性
  • 模型的可解釋性
  • 模型的速度:建立模型需要多久,模型作出預測需要多久
  • 模型的擴展性

影響演算法選擇的一個重要標準是模型的複雜性。一般來說,更複雜的模型:

  • 需要更多的特徵來學習和預測(比如使用兩個特徵VS使用10個特徵來預測一個目標)
  • 需要更複雜的特徵工程(比如使用多項式項、交互關係或主成分)
  • 需要更大的計算開銷(比如1顆決策樹VS由100顆決策樹組成的隨機森林)

此外,同一種機器學習演算法會因為參數的數量或者對某些超參數的選擇而變得更加複雜。例如:

  • 一個回歸模型可能擁有更多的特徵或者多項式項和交互項。
  • 一顆決策樹可能擁有更大或更小的深度。

使同一演算法更複雜,這會增加過擬合的幾率。

常用的機器學習演算法

線性回歸

這可能是最簡單的機器學習演算法。當你想計算某個連續值的時候,可以使用回歸演算法,而分類演算法的輸出數據是類。所以,每當你要預測一個正在進行當中的過程的某個未來值時,你可以使用回歸演算法。但線性回歸在特徵冗餘(也就是存在多重共線性)的情況下會不穩定。

線性回歸的幾個用例:

  • 是時候從一個地方到另一個地方
  • 預測特定產品在下個月的銷量
  • 血液酒精含量對身體協調性的影響
  • 預測每月禮品卡銷量和改善每年收入預期

邏輯回歸

邏輯回歸進行二元分類,所以輸出數據是二元的。這種演算法把非線性函數(sigmoid)應用於特徵的線性組合,所以它是一個非常小的神經網路實例。

邏輯回歸提供了模型正則化的很多方法,不必擔心特徵是否相關,就像使用樸素貝葉斯演算法的時候一樣。與決策樹和支持向量機相比,邏輯回歸提供了出色的概率解釋,能輕易地用新數據來更新模型。如果想建立一個概率框架,或者希望以後將更多的訓練數據迅速整合到模型中,可以使用邏輯回歸。這種演算法還能幫助你瞭解預測背後的貢獻因素,不是一種黑箱方法。

邏輯回歸的幾個用例:

  • 預測客戶流失
  • 信用評分和欺詐檢測
  • 衡量營銷活動的效果

決策樹

人們很少使用單一的決策樹,但與其他很多決策樹結合起來,就能變成非常有效的演算法,比如隨機森林和梯度提升樹。

決策樹可以輕鬆地處理特徵的交互關係,並且是非參數化的,所以不必擔心離羣值或者數據是否線性可分。缺點是不支持在線學習,所以在新樣本到來時,必須重建決策樹。另一個缺點是容易過擬合,但隨機森林和提升樹等集成方法可以克服這一缺點。決策樹還會佔用很多內存(特徵越多,決策樹就可能越深、越大)。

決策樹是幫助你在幾個行動方案之間作出選擇的出色工具。

  • 投資決策
  • 客戶流失
  • 銀行貸款違約人
  • 自建VS購買決策
  • 銷售線索資質

K-means

有時,你不知道任何標籤,你的目標是根據對象的特徵賦予標籤。這被稱為聚類任務。聚類演算法的一個用例是根據某些共同屬性,將一大羣用戶分組。

如果在你的問題陳述中,存在「這是如何組織的」等疑問,或者要求將某物分組或聚焦於特定的組,那麼你應該採用聚類演算法。

K-Means的最大缺點,在於必須事先知道你的數據中將有多少個簇。因此,這可能需要進行很多的嘗試,來「猜測」簇的最佳K值。

主成分分析(PCA)

PCA能降維。有時,數據的特徵很廣泛,可能彼此高度相關,在數據量大的情況下,模型容易過擬合。這時可以使用PCA。

PCA大受歡迎的一個關鍵,在於除了樣本的低維表示以外,它還提供了變數的同步低維表示。同步的樣本和變數表示提供了以可視方式尋找一組樣本的特徵變數。

支持向量機(SVM)

SVM是一種監督學習方法,被廣泛用於模式識別和分類問題(前提是數據只有兩類)。

SVM的優點是精度高,對避免過擬合有很好的理論保障,而且只要有了適當的核函數,哪怕數據在基本特徵空間中不是線性可分的,SVM也能運行良好。在解決高維空間是常態的文本分類問題時,SVM特別受歡迎。SVM的缺點是消耗大量內存、難以解釋和不易調參。

SVM在現實中的幾個應用:

  • 探測常見疾病(比如糖尿病)患者
  • 手寫文字識別
  • 文本分類——按話題劃分的新聞報道
  • 股價預測

樸素貝葉斯

這是一種基於貝葉斯定理的分類方法,很容易構建,對大數據集特別有用。除了具有簡單的優點以外,樸素貝葉斯甚至好於某些高度複雜的分類方法。在CPU和內存資源是限制因素的情況下,樸素貝葉斯也是很好的選擇。

樸素貝葉斯超級簡單,只需要做些算術即可。如果樸素貝葉斯關於條件獨立的假設確實成立,那麼樸素貝葉斯分類器將比邏輯回歸等判別模型更快地收斂,因此你需要的訓練數據更少。即使假設不成立,樸素貝葉斯分類器在實踐中仍然常常表現不俗。如果你需要的是快速簡單且表現出色,樸素貝葉斯將是不錯的選擇。其主要缺點是學習不了特徵間的交互關係。

樸素貝葉斯在現實中的幾個應用:

  • 情感分析和文本分類
  • 推薦系統,比如Netflix和亞馬遜
  • 把電子郵件標記為垃圾郵件或者非垃圾郵件
  • 面部識別

隨機森林

隨機森林包含多顆決策樹。它能解決擁有大數據集的回歸和分類問題,還有助於從眾多的輸入變數中識別最重要的變數。隨機森林可擴展到任意維數,其表現通常是可接受的。遺傳演算法可擴展到任何維度以及對數據本身知之甚少的任何數據,微生物遺傳演算法實現起來代價最低、最簡單。但隨機森林的學習速度可能很慢(取決於參數化),而且不可能迭代地改進生成模型。

隨機森林在現實中的幾個應用:

  • 預測高風險患者
  • 預測製造業的零件故障
  • 預測貸款違約人

神經網路

神經網路包含神經元之間的連接權重。權重是平衡的,在學習數據點後繼續學習數據點。所有權重被訓練後,神經網路可以用來預測類或者量,如果發生了一個新的輸入數據點的回歸。用神經網路可以訓練極其複雜的模型,它們能作為黑箱,不必在訓練模型之前進行不可預測的、複雜的特徵工程。再加上「深度方法」,即便是更加不可預測的模型也能被用來實現新的可能性。例如,利用深度神經網路,對象識別近期取得巨大進步。應用於非監督學習任務,比如特徵提取,深度學習還能從原始圖像或語音中提取特徵,不需要太多的人類幹預。

另一方面,神經網路非常難以解釋說明,參數化極其令人頭疼,而且非常耗費資源和內存。

Scikit速查表

scikit-learn提供了一張非常深入、清晰易懂的流程圖,幫助你選擇適當的演算法,用起來非常方便。

總結

通常來說,你可以參考以上內容,縮小演算法選擇的範圍,但一開始很難知道哪個演算法最適合你。最好是迭代篩選。把你的數據輸入你認為可能是佳選擇的機器學習演算法,並行或依次運行這些演算法,最後評估演算法的表現,選出最好的那個。

最後,為現實問題設計恰當的解決方案不僅僅是一個應用數學問題,還需要考慮商業需求、規章制度、利益相關者的關切和相當多的專業知識。在解決一個機器問題時,結合和平衡這幾個方面至關重要。能做到這一點的人才能創造最大的價值。


近期剛好有了解,分享淺見


不論是傳統軟體測試還是機器學習測試,測試目的都是檢驗被測對象是否符合預期。模型演算法測試需要對機器學習模型演算法進行評估、測試,評價模型演算法的好壞,發現模型演算法存在的缺陷,這其中既要考慮演算法的學術正確性,也要考慮其在業務應用中的表現。因為模型的結果預先不知且不確定,所以,機器學習測試不同於傳統測試,是通過檢驗一組帶標籤的數據的模型結果是否符合預期的準確率或誤差,來評估模型的好壞。

構建模型過程

首先介紹一下什麼是模型:我們以一個簡單的數學題舉例1, 4, 16…()… 256… 括弧裏的是什麼。為什麼是64,不是其他數字,又為什麼是數字,不是一個漢字或者一個字母。我們找到了數字之間的規律,邏輯關係,並且抽象成了模型,我們才能知道括弧裏是什麼。

演算法的模型是從數據裏抽象出來的,用來描述客觀世界的數學模型。通過對數據的分析,找到其中的規律,找到的規律就是模型。 而機器學習的根本目的,是找一個模型去描述我們已經觀測到的數據。生成模型之後,可以以文件形式保存在磁碟上或者載入到內存中。達到模型的持久化。

構建這種演算法進行測試的模型的流程一般分為三個部分拆分數據集 數據集經過特徵工程後,需要拆分出訓練集與測試集,訓練集用來訓練模型,測試集是用來驗證模型性能表現。

訓練模型 把訓練集傳入,演算法進行訓練,訓練結束生成模型文件。

評估模型 模型訓練完成後,會用測試集驗證模型,通過評價指標來評估模型性能的好壞。比如,準確率越高模型性能越好。當然實際項目中,會使用多個指標綜合評估。

模型演算法評估指標

模型演算法的評估指標有很多,在選擇上我們應該選取能夠描述業務情況或可以表現業務波動的評估指標。這樣通過觀察評估指標就能判斷模型演算法的效果,從而進行模型演算法的升級與迭代。

常用的評價指標一般使用回歸模型、分類模型、何懼累模型,三種常用評價指標。

回歸模型的評估標準,建立回歸模型時需要對演算法的效果進行評估,選擇哪一種指標作為評估指標會影響最終的模型效果,

對於回歸模型一般常用以下幾種指標:

解釋方差(explained_variance)

平均絕對值誤差(MAE)

平均絕對百分比誤差(MAPE)

均方誤差(MSE)

均方根誤差(RMSE)

可決係數(R2)

分類模型的評價指標

混淆矩陣

ROC

AUC

KS

Lift

Gain

聚類模型評價指標

外部指標:將聚類結果與某個「參考模型」進行比較

Jaccard係數

FM指數

Rand指數

純度Purity

NMI標準互信息

內部指標:直接考察聚類結果而不利用任何參考模型

DB指數,值越小越好

DV指數,值越大越好

模型演算法的測試方法

模型演算法的測試方法,常用的分為七種,分別為模型銳變測試、模型模糊測試、模型魯棒性測試、模型安全測試、模型可解釋性測試、模型在線測試、模型監控與迭代。這部分可以根據《機器學習測試入門與實踐》中的模型在線測試作為舉例展開。

1.模型在線驗證的測試

當模型演算法通過離線評估以後,便會部署到線上部署完成以後,我們需要對模型提供的服務的正確性進行檢查和驗證。此階段的在線驗證測試是機器學習項目中最重要的測試步驟之一,因為此次驗證的結果將直接說明該模型服務是否合預期,直接決定它是否可以正式交付並對外提供服務。模型部署完成後的驗證測試一般從兩方面進行。

模型部署的工程代碼的正確性。通過使用一批樣本對在線模型服務進行調用,可以獲取到對應模型的在線預測結果。對調用結果進行計(如值域、分佈等)來分析模型的部署是否正確。模型部署的正確性驗證測試更多地關注工程部署代碼是否正確。這也是機器學習項目交付前的最終驗收。

模型效果的在線/離線一致性。模型演算法會經過離線環境的開發訓練。因為模型演算法已經通過了離線環境的評估測試,所以我們可以使用與離線測評相同的一批樣本,獲取在線模型服務對應的結果。通過分析在線模型結果的分佈情況、效果是否與之前的離線評測結果一致,可以知道在線模型服務是否符合預期。

2.模型服務的AB測試

有些時候,我們需要使用在線真實流量來評價比較兩個或多個模型的優劣,AB測試無疑是最佳選擇。模型服務的A/B測試為同一個預測目標訓練部署多個模型,在同一時間維度下分別讓組成成分相同或相似的樣本使用其中一個模型,收集各樣本組的業務數據,最後根據顯著性檢驗分析,評估出最好的模型並正式採用。在使用A/B測試進行模型比較時,不僅可以使用前面介紹的評估標,還可以使用一些能夠評價業務的指標。雖然我們在模型離線階段已經進行了評估,但仍要進行在線模型服務A/B測試,其原因如下所示。

1、離線評估無法完全消除模型過擬合的影響。因為離線效果評估常常不可避免地受到過擬合問題的影響,所以離線評估結果無法完全替代在線評估結果。

2、離線評估無法完全還原在線的工程環境。在線的工程環境包括數據延遲、數據缺失標籤缺失等情況。因此,離線評估的結果是理想工程環境下最好的結果。

3、在線系統的某些業務指標在離線評估中無法計算。離線模型評估的指標包括準確率召回率和ROC曲線等。在線系統更關注一些業務指標(如點擊率、成交率、通過率等),這些指標無法在離線評估中給出。

使用相同或相似的樣本,我們會得到兩種不同的AB測試策略。

使用相同樣本策略的模型服務AB測試。圖10-12所示為使用相同樣本的模型服務AB測試。從圖中可以觀察到,同一個樣本在多個模型上獲得了預測結果,但只選取其中的一個作為最終結果進行決策,這相當於其他模型僅在幫助收集信息。在任意預測、決策結果不影響後續樣本真實結果的情況下,可以在獲取樣本的真實結果後,比較各個模型的各項指標來選取最優模型。

A/B測試。圖中不同樣本會被隨機分配給不同的模型並直接得到對應的預測結果與決策。該策略不僅要確保樣本的獨立性和採樣方式的無偏性,這需要確保只有在在線真實樣本量足夠大的情形下才能夠逼近各模型在無偏樣本下的表現。在近似同分布的情況下,我們可以通過計算指標對各模型進行比較。

使用相同樣本策略與相似樣本策略的模型服務A/B測試的比較如下。

使用相同樣本策略的模型服務A/B測試的預測結果更穩定,每個樣本都使用同一個模型作為最終決策,不會過多地影響模型服務的使用方。在對模型進行更新、升級時,可以優先考慮此種策略。樣本量足夠大的情況下,使用相似樣本策略的模型服務 A/B測試更貼近評估各模型所需結果的真實值,因為每個模型都將預測結果真正作用到了樣本上。對於不同預測結果會影響樣本實際結果的場景,使用相似樣本策略的模型服務A/B測試效果更佳。使用相似樣本策略的模型服務A/B測試。圖10-13所示為使用相似樣本的模型服務節選自《機器學習測試入門與實踐》。

隨著機器學習這個話題越來越熱,人們都在思考如何利用機器學習幫助解決本領域的問題。有了機器學習這個熱門技術,以前不能完成或者不能很好的完成的任務可以得到不錯的解決。在測試領域也希望能夠通過機器學習解決目前一些棘手的問題。

目前測試各方面的數據都比以前有了更多的積累,在種類和數據量上都有了大幅提升,為機器學習提供了基礎數據,使得在測試領域應用機器學習方法成為可能。機器學習目前在測試領域的應用方向還不是很明確。如果明確測試領域的哪些方向可以使用機器學習進行改進後,此種結合一定會幫助測試人員提高測試質量和測試效率,加深測試深度,擴展測試方法。期待機器學習在未來有更多的應用空間,在測試領域發揮出更大的作用。可以看看《機器學習測試入門與實踐》這本書。


首先我不知你是從事黑盒還是白盒測試

從黑盒測試角度講:首先按照需求文檔整理出各種演算法的測試需求,然後根據測試需求設計測試用例,讓測試用例覆蓋到所有測試需求點,設計測試用例時可以設計每個功能點每種測試方法的預期結果,這樣在執行測試時按照測試用例逐條測試就能最大保證測試有準確性和完整性。黑盒常用的測試用例方法有:等價類、邊界值、錯誤推斷法、因果圖法、判定表驅動法、功能圖法、場景法。

從白盒測試角度講,機器演算法比較複雜,對代碼能力要求較高,但從軟體測試的角度來講,原則是不變的。白盒測試可在單元測試階段由開發人員或專業的白盒測試人員執行。要驗證各種演算法的正確性,就需要採用白盒測試的方法先設計白盒測試用例。

常見的有邏輯覆蓋法,邏輯覆蓋又包括以下這些不同標準:語句覆蓋(SC)、判定覆蓋(DC)、條件覆蓋(CC)、條件判定組合覆蓋(CDC)、多條件覆蓋(MCC)和修正判定條件覆蓋(MCDC)。以上是針對比較簡單的程序段,如果路徑很複雜最好採用基本路徑測試法。在程序控制流程圖的基礎上,通過分析控制流圖的環路複雜性,導出基本可執行路徑的集合,然後再根據此設計測試用例。設計出的測試用例要保證在測試中程序的每一條可執行語句至少執行一次。具體情況具體結合項目去分析,採用不同的測試策略,無論採用哪種策略,最好都要按正規的測試流程去執行,這樣可避免漏測、重複測試和盲目無效測試。

針對這種沒有特定結果,或者在測試過程中不易判定確切結果的測,AB測試給我們提供了一種思路,我們可以將這些演算法的測試,大部分工作留給用戶進行判定,我們只需要按照最初的演算法構成,確保最基本的功能是OK的,基本規則是有效的即可,更複雜的測試可以利用AB測試讓現網用戶更好的去判定。


跟之前回答的問題一樣,我認為演算法測試分為兩大類:

. 正確性. 合理性

正確性,很多人說通過CR(代碼rerivew)去做?我覺得還是適當考慮 ROI(投入產出比)吧!我覺得正確性的校驗應該根據演算法需求定製對應的演算法測試模型,模型包括演算法的輸入、輸出、樣本數據等等

比如拿「商品推薦 猜你喜歡」推薦演算法來說你的物料(sku數據)一定要多一定要全不僅如此還要考慮物料的:價格、銷量、適用人羣是否交叉均勻能覆蓋足夠多的用戶場景等等、當物料足夠全、演算法基礎校驗痛過之後、根據準備的海量的測試模型的產生的測試樣本(不同標籤用戶)命中不同演算法分支拿到吐出數據進行演算法校驗!合理性,當你的正確性足夠高之後、能排除掉一部分和理性的問題、合理性問題大多數還是人工care、豐富badcase 、體感認知。
推薦閱讀:
相關文章