天天看點

Scikit-learn

基于SciPy,目前開發者們針對不同的應用領域已經發展出了為數衆多的分支版本,它們被統一稱為Scikits,即SciPy工具包的意思。而在這些分支版本中,最有名,也是專門面向機器學習的一個就是Scikit-learn。

Scikit-learn項目最早由資料科學家 David Cournapeau 在 2007 年發起,需要NumPy和SciPy等其他包的支援,是Python語言中專門針對機器學習應用而發展起來的一款開源架構。

和其他衆多的開源項目一樣,Scikit-learn目前主要由社群成員自發進行維護。可能是由于維護成本的限制,Scikit-learn相比其他項目要顯得更為保守。這主要展現在兩個方面:一是Scikit-learn從來不做除機器學習領域之外的其他擴充,二是Scikit-learn從來不采用未經廣泛驗證的算法。

本文将簡單介紹Scikit-learn架構的六大功能,安裝和運作Scikit-learn的大概步驟,同時為後續各更深入地學習Scikit-learn提供參考。原文來自infoworld網站的特約撰稿人Martin Heller,他曾在1986-2010年間做過長達20多年的資料庫、通用軟體和網頁開發,具有豐富的開發經驗。

Scikit-learn的六大功能

Scikit-learn的基本功能主要被分為六大部分:分類,回歸,聚類,資料降維,模型選擇和資料預處理。

分類是指識别給定對象的所屬類别,屬于監督學習的範疇,最常見的應用場景包括垃圾郵件檢測和圖像識别等。目前Scikit-learn已經實作的算法包括:支援向量機(SVM),最近鄰,邏輯回歸,随機森林,決策樹以及多層感覺器(MLP)神經網絡等等。

需要指出的是,由于Scikit-learn本身不支援深度學習,也不支援GPU加速,是以這裡對于MLP的實作并不适合于處理大規模問題。有相關需求的讀者可以檢視同樣對Python有良好支援的Keras和Theano等架構。

回歸是指預測與給定對象相關聯的連續值屬性,最常見的應用場景包括預測藥物反應和預測股票價格等。目前Scikit-learn已經實作的算法包括:支援向量回歸(SVR),脊回歸,Lasso回歸,彈性網絡(Elastic Net),最小角回歸(LARS ),貝葉斯回歸,以及各種不同的魯棒回歸算法等。可以看到,這裡實作的回歸算法幾乎涵蓋了所有開發者的需求範圍,而且更重要的是,Scikit-learn還針對每種算法都提供了簡單明了的用例參考。

聚類是指自動識别具有相似屬性的給定對象,并将其分組為集合,屬于無監督學習的範疇,最常見的應用場景包括顧客細分和試驗結果分組。目前Scikit-learn已經實作的算法包括:K-均值聚類,譜聚類,均值偏移,分層聚類,DBSCAN聚類等。

資料降維是指使用主成分分析(PCA)、非負矩陣分解(NMF)或特征選擇等降維技術來減少要考慮的随機變量的個數,其主要應用場景包括可視化處理和效率提升。

模型選擇是指對于給定參數和模型的比較、驗證和選擇,其主要目的是通過參數調整來提升精度。目前Scikit-learn實作的子產品包括:格點搜尋,交叉驗證和各種針對預測誤差評估的度量函數。

資料預處理是指資料的特征提取和歸一化,是機器學習過程中的第一個也是最重要的一個環節。這裡歸一化是指将輸入資料轉換為具有零均值和機關權方差的新變量,但因為大多數時候都做不到精确等于零,是以會設定一個可接受的範圍,一般都要求落在0-1之間。而特征提取是指将文本或圖像資料轉換為可用于機器學習的數字變量。

需要特别注意的是,這裡的特征提取與上文在資料降維中提到的特征選擇非常不同。特征選擇是指通過去除不變、協變或其他統計上不重要的特征量來改進機器學習的一種方法。

總結來說,Scikit-learn實作了一整套用于資料降維,模型選擇,特征提取和歸一化的完整算法/子產品,雖然缺少按步驟操作的參考教程,但Scikit-learn針對每個算法和子產品都提供了豐富的參考樣例和詳細的說明文檔。