路線圖#
本文件的目的#
本文件列出了核心貢獻者有興趣在 scikit-learn 中開發的一般方向。這裡列出的項目並不代表承諾一定會實現,因為資源有限。相反地,這表示歡迎針對這些主題提供協助。
目的聲明:2018 年的 Scikit-learn#
在 Scikit-learn 創立十一年後,機器學習的世界發生了很大變化。主要的變化包括:
計算工具:GPU 的利用、Scala/Spark 等分散式程式設計框架。
用於實驗、處理和資料管理的高階 Python 函式庫:Jupyter Notebook、Cython、Pandas、Dask、Numba…
機器學習研究重點的變化:人工智慧應用程式(其中輸入結構是關鍵),包括深度學習、表徵學習、強化學習、領域轉移等。
過去十年更細微的變化是,由於機器學習興趣的變化,機器學習的博士生更有可能貢獻於 PyTorch、Dask 等,而不是 Scikit-learn,因此我們的貢獻者群體與十年前非常不同。
Scikit-learn 在實務中仍然非常受歡迎,可以用於嘗試標準的機器學習技術,特別是在實驗科學和資料科學中的應用。我們現在提供的許多功能都非常成熟。但維護成本可能很高,因此我們無法包含任意的新實作。然而,Scikit-learn 對於定義可互通的機器學習元件(核心函式庫外部)的 API 框架也至關重要。
因此,我們在這個時代的主要目標是::
繼續在目前範圍內(即,主要與欄和列順序無關的矩形資料;預測具有簡單結構的目標)維護高品質、文件完善的標準資料處理和機器學習工具集合。
改善使用者開發和發布外部元件的便利性
改善與現代資料科學工具(例如 Pandas、Dask)和基礎架構(例如分散式處理)的互通性
許多更細微的目標可以在議題追蹤器上的 API 標籤下找到。
架構/一般目標#
清單編號不是為了表示優先順序,而是為了讓參考特定點更容易。請僅在底部新增新條目。請注意,劃掉的條目已完成,我們會在處理這些問題時嘗試保持文件更新。
改進 Pandas DataFrames 的處理
記錄目前的處理方式
改進類別特徵的處理
基於樹狀結構的模型應能夠處理連續和類別特徵 #29437。
處理類別和連續變數的混合
改進遺失資料的處理
透過實作常見測試,確保 Meta 估計器對遺失資料採取寬鬆態度。
用於使資料集部分遺失的截斷取樣產生器 #6284
更具教學性的文件
scikit-learn 中新增了越來越多的選項。因此,文件內容很擁擠,這讓初學者難以了解全貌。可以優先處理資訊方面的一些工作。
傳遞不是 (X, y) 的資訊:特徵屬性
每個特徵的處理(例如「這是名義/序數/英文文字?」)也不應該需要提供給估計器建構函式,理想情況下,應該作為 X 的元資料提供。#8480
傳遞不是 (X, y) 的資訊:目標資訊
讓外部使用者更容易編寫與 Scikit-learn 相容的元件
更獨立地執行 scikit-learn-contrib 或類似資源
支援重新取樣和樣本縮減
允許對多數類別進行子取樣(在管道中?)。#3855
改善互動式開發的介面
透過
estimator_html_repr
改善估計器的 HTML 可視化。加入更多繪圖工具,而不僅僅是作為範例。
改善模型診斷和基本推論的工具
開發「特徵重要性」的統一介面
在擬合時,有更好的方法來處理驗證集
使用傳導式估計器選擇超參數的更好工具
網格搜尋和交叉驗證不適用於大多數叢集任務。基於穩定性的選擇更相關。
更好地支援手動和自動管線建置
提供常見估計器的搜尋範圍?
參見 searchgrid
改進擬合的追蹤
分散式平行處理
接受符合
__array_function__
的資料
更多核心外作業的方法
Dask 可輕鬆實現核心外運算。雖然 Dask 模型可能無法適用於所有機器學習演算法,但大多數機器學習的資料量小於 ETL,因此我們或許可以在僅支援一部分模式的情況下,適應非常大規模的運算。
某些估計器的向後相容去/序列化
目前,序列化(使用 Pickle)會在不同版本之間中斷。雖然我們可能無法解決 Pickle 在安全性等方面的其他限制,但最好能從 1.0 版本開始提供跨版本安全。注意:Gael 和 Olivier 認為這可能會造成沉重的維護負擔,我們應該管理權衡。以下一點提出了一種可能的替代方案。
模型生命週期管理的文件和工具
記錄模型部署和生命週期的良好實務:在部署模型之前:快照程式碼版本(numpy、scipy、scikit-learn、自訂程式碼存放庫)、訓練指令碼和如何擷取歷史訓練資料的別名 + 快照一個小的驗證集副本 + 快照該驗證集上的預測(分類器的預測機率)。
記錄和提供工具,以便輕鬆管理 scikit-learn 版本的升級
嘗試載入舊的 Pickle,如果可行,請使用驗證集預測快照來偵測序列化的模型是否仍執行相同行為;
如果 joblib.load/pickle.load 無法運作,請使用版本控制的訓練指令碼 + 歷史訓練集來重新訓練模型,並使用驗證集預測快照來斷言是否可以恢復先前的預測效能:如果不是這種情況,則可能是 scikit-learn 中存在需要回報的錯誤。
scikit-learn 中的所有內容可能都應符合我們的 API 合約。我們仍在決定一些相關問題。
(選用)改善 scikit-learn 常見測試套件,以確保(至少對於經常使用的模型)在不同版本中具有穩定的預測(待討論);
擴展文件以提及如何在無 Python 環境中部署模型,例如 ONNX。並使用上述最佳實務來評估 scikit-learn 和 ONNX 預測函式在驗證集上的預測一致性。
記錄檢測已部署模型的時間分佈漂移的良好實務,以及在不導致災難性預測效能衰退的情況下,重新訓練新資料的良好實務。