在制定AI項目方案時,確定構建模型的目標非常關鍵,但這種理解只能提供成功的解決方案。在時真正按照完善的建議交付,AI項目團隊需要在執行項目時遵循最佳實施路線。為了幫助能按照正確的路徑執行,對之前提出的十條建議,現在一起探討一下執行路徑
1.知道您的問題
解決問題的最基礎部分是確切地了解你要解決啥子問題。確保你了解你要預測的內容、任何限制以及該項目最終目的是什么。盡早提出問題,并與同行、業務精英以及最終用戶驗證你的理解。假如你發現答案與你的理解一致,那么你就知道你是走在正確的道路上。
2.了解您的數據
通過了解你的數據的含義,你就能夠了解哪種模型運行良好以及使用哪些功能。數據背后的問題將影響哪個模型最成功,計算時間將影響項目成本。通過使用和創建有意義的功能,你可以模仿或改進人工決策。了解每個字段的含義對問題很重要,尤其是在受監管的行業中,數據可能需要匿名化,故此不太清楚。假如你不清楚某個功能的含義,請咨詢相關業務專家。
3.拆分OR清洗您的數據
你的模型將怎樣處理看不見的數據?假如它不能泛化到新數據,那么它在給定數據上的表現并不是最重要的。我們在訓練時不能讓你的模型看到部分數據,你可以驗證它在未知情況下的表現怎樣。這種方法對于選擇正確的模型架構和調整參數以獲得最佳性能是非常關鍵的。
對于監督學習問題,你需要將數據分成兩部分或三部分。
訓練數據——模型從中學習的數據——通常是隨機選擇的原始數據的 75-80%。
測試數據——你評估模型的數據——是剩余的數據。
根據你正在構建的模型類型,你可能還需要第三個稱為驗證集的保留數據,用于比較已根據測試數據調整的多個監督學習模型。在這種情況下,你需要將非訓練數據拆分為兩個數據集,即測試和驗證。你想使用測試數據比較同一模型的迭代,并使用驗證數據比較不同模型的最終版本。
在Python中,正確拆分數據的最簡單的方法就是使用Scikit-learn的train_test_split函數。
4.不要泄露測試數據
重要的是不要將測試數據中的任何信息輸入到你的模型中。這可以對整個數據集的訓練產生負面影響,也可以像在拆分之前執行轉換(比如縮放)一樣微妙。比如,假如你在拆分之前對數據進行規范化,則模型正在獲取有關測試數據集的信息,因為全局最小值或最大值可能在保留的數據中。
5.使用正確的評估指標
由于每個問題都是不同的,故此需要根據上下文選擇適當的評估方法。最幼稚—也可能是最危險的——分類指標的準確性。考慮檢測癌癥的問題。假如我們想要一個相當準確的模型,我們總是預測“不是癌癥”,因為超過 99% 的時間可以驗證我們都是正確的。然則,這不是一個非常有用的模型,我們事實上想要檢測癌癥。注意考慮在分類和回歸問題中使用哪種評估指標。
6.保持簡單
在處理問題時,重要的是為工作選擇正確的解決方案,而不是最復雜的模型。管理層、客戶,甚至你可能都想使用“最新最好的”。你需要使用最簡單(非最先進)的模型來滿足你的需求,即奧卡姆剃刀原理。這不僅會提供更多可見性并縮短培訓時間,而且事實上可以提高性能。簡而言之,不要用火箭筒射擊蒼蠅或試圖用蒼蠅拍殺死哥斯拉。
7.不要過擬合(或欠擬合)你的模型
過度擬合,也稱為方差,會導致模型在未見過的數據上表現不佳。該模型只是簡單地記憶訓練數據。欠擬合,也稱為偏差,是給模型提供的信息太少,無法學習問題的正確表示。平衡這兩者——通常被稱為“偏差-方差權衡”——是AI過程的重要組成部分,不同的問題需要不同的平衡。
我們以一個簡單的圖像分類器為例。它的任務是對圖像中是否有狗進行分類。假如你過擬合此模型,它將無法將圖像識別為狗,除非它以前看過該確切圖像。假如你對模型進行欠擬合,即使它以前看過該特定圖像,它也可能無法將圖像識別為狗。
8.嘗試不同的模型架構
大多數時候,為一個問題考慮不同的模型架構是有益的。對一個問題最有效的方法,可能對另一個問題不是很好。嘗試混合使用簡單和復雜的算法。比如,假如執行分類模型,請嘗試像隨機森林一樣簡單和像神經網絡一樣復雜的事情。有趣的是,極端梯度提升 (XGBoost) 通常遠遠優于神經網絡分類器。一個簡單的問題通常最好用一個簡單的模型來解決。
9.調整你的超參數
超參數是模型計算中使用的值。比如,決策樹的一個超參數是樹的深度,即在決定答案之前它會問多少個問題。模型的默認超參數是那些平均提供最佳性能的超參數。但是你的模型不太可能正好落在那個最佳位置。假如選擇不同的參數,你的模型就可以表現得更好。調整超參數最常用的方法是網格搜索、隨機搜索和貝葉斯優化搜索,當然還有許多其他更高級的技術。
10.正確比較模型
機器學習的最終目標是開發一個泛化良好的模型。這就是為什么正確比較和選擇最佳模型如此重要的原因。綜上所述,你需要使用與訓練超參數進行評估時使用不同的保持集。另外,你還需要使用適當的統計測試來評估結果。
既然你已經掌握了執行AI項目的指導原則,請在你接下來的AI項目中嘗試一下。