- 機器學習從入門到入職:用sklearn與keras搭建人工智能模型
- 張威
- 1973字
- 2020-05-22 17:14:10
3.2 Sklearn常用類及其結構
Sklearn易于上手,功能多樣,函數豐富,開發人員可以通過僅僅改變幾行代碼實現不同的算法。
下面按照模型開發流程介紹部分Sklearn的相關類。
3.2.1 數據源、數據預處理及數據提取
在機器學習模型開發流程中,首先要做的就是數據預處理,因為當得到采集數據時,這種數據并不一定適用于模型訓練,如文本數據、不同維度取值范圍差異過大的數據等,還有采集數據本身結構存在缺陷的數據,如存在缺失的數據等,這樣的數據被稱為臟數據,而這樣的數據需要進行“清洗”,這個清洗過程就是數據預處理。
對于數據預處理這樣的場景,Sklearn提供了以下幾類用于生成或者得到符合訓練標準的數據。
數據源(sklearn.datasets)——該模塊提供加載數據集的實用程序,以及人工數據生成器的方法。
對于加載數據集的實用程序(Loader),其類通常以sklearn.datasets.load_<數據名稱>或者sklearn.datasets.fetch_<dataset_name>的形式呈現,具體代碼如下:

還有一種數據源生成器的方式,尤其是在聚類或者分類實驗場景中,需要可供練習的數據源。因為外部數據元也無法滿足其訓練需要,所以通過生成數據的方式完成訓練,通常以sklearn.datasets.load_<數據分布>的形式呈現,具體代碼如下:

以上引用數據源,通常用于模型的試驗或者為練習提供數據,在實際模型開發場景中,還涉及數據預處理,下面先介紹一般數據的預處理過程,這里所說的一般數據是指以數值形式存在的數據(用于區別文本數據)。
一般數據預處理(sklearn.preprocessing)——模塊包括但不限于縮放、中心化、歸一化、二值化和歸一化方法。其具體使用將在后面的章節詳細介紹。
除此之外,對非一般數據,如文本數據或者圖形數據,也存在對應的預處理方法,而這種方法也被稱為特征提取。
特征提取(sklearn.feature_extraction)——從原始數據中提取特征,目前包括從文本和圖像中提取特征的方法。值得注意的是,對文本數據提取和圖形數據提取在不同的模塊。
文本數據提取(sklearn.feature_extraction.image)——從圖形數據中抽取特征,其方法有補丁提取、像素到像素梯度連接圖轉化(Graph of Pixel Gradient Connections)等。
3.2.2 模型建立
模型建立是模型開發整個流程中最關鍵的環節,其他環節都是圍繞模型而存在的。而模型從大的類目上又分為監督學習、無監督學習和半監督學習,在后面的章節中將會詳細介紹三者之間的區別;如果更進一步劃分,在這些大的類目的基礎上又存在諸如聚類、分類、回歸、降維等小的類目。下面按照具體機器學習方法對其相應的類進行介紹。
·聚類(sklearn.cluster.*)——聚類是一種無監督方法,其將特征相近的數據劃歸到同一類,并不需要對其數據本身標注標簽。在此類中,收錄了幾乎全部主流的聚類方法,如K-means聚類、均值偏移聚類、親和傳播、DBSCAN等。
·降維(sklearn.decomposition.*)——該模塊包括一些矩陣分解算法,如主成分分析、NMF或者獨立成因分析等,大部分算法都可以看作一種降維技術。降維屬于一種無監督學習方法。
·高斯過程(sklearn.gaussian_process.*)——高斯過程既可以用于分類,也可以用于回歸,其假設前提是大量獨立的、均勻微小的隨機變量的總和近似地服從高斯分布,通過對訓練數據的高斯假設,生成相應的擬合函數。
·廣義線性模型(sklearn.linear_model.*)——廣義線性模型模塊包含了常用的廣義線性模型集。它包括嶺回歸、貝葉斯回歸、LASSO和彈性網絡回歸。
·流形學習(sklearn.manifold.*)——流形學習的本質實際上是從高維采樣數據中恢復低維流形結構,即找到高維空間中的低維流形,這也是一種降維方法,同樣,該模塊包含ISOMAP、局部線性嵌入等嵌入方法。
·高斯混合(sklearn.mixture.*)——該模塊包括高斯混合建模方法,其假設前提是任意模型滿足多個高斯模型的疊加組合。
·多類別、多標簽分類(sklearn.multiclass.*)——該模塊提供了多類別學習算法,其中包括一對多、多對多、糾錯輸出碼等方法。
·樸素貝葉斯(sklearn.naive_bayes.*)——該模塊包括樸素貝葉斯算法,是一種基于貝葉斯定理和強(樸素)特征獨立性假設的監督學習方法。
·最臨近方法(sklearn.neighbors.*)——該模塊包括最臨近算法,是聚類中常見的一種方法。
·半監督學習(sklearn.semi_supervised.*)——該模塊包括半監督學習算法,其思路是利用少量的標記數據和大量的未標記數據進行分類,代表性方法有標簽傳播及標簽擴散。
·支持向量機(sklearn.svm.*)——該模塊包括支持向量機的各種算法,其算法可用于回歸、分類等場景。
·決策樹(sklearn.tree.*)——該模塊包括決策樹算法,其算法可用于回歸和分類。
·集成學習(sklearn.ensemble.*)——該模塊包括基于集成的分類、回歸和異常檢測方法。
以上是Sklearn能夠提供的主流機器學習方法,當然,它也提供深度學習的模型實現,但是更全面的模型實現在Keras庫中,在Sklearn環境不進行介紹。
3.2.3 模型驗證
在模型建立完成并訓練之后,需要對模型的實際效果進行檢驗——對所訓練的模型進行量化上的效果驗證,是模型開發中比較重要的環節,是評估模型效果的依據。
除以上驗證方法外,模型驗證(sklearn.metrics.*和部分sklearn.model_selection.*)還有成對驗證(Pairwise Validation)、雙聚類(Biclustering)驗證等方法。
采用ROC方法對模型進行驗證如圖3-2所示。

圖3-2 采用ROC方法對模型進行驗證
3.2.4 模型調優
模型驗證之后,如果不能滿足業務場景對模型的要求,那么此時需要提高模型的性能。
在Sklearn中,模型調優主要是對參數的嘗試(窮舉、隨機或者給定參數集合),并通過驗證得到最優解的超參數。其涉及的類為sklearn.model_selection.*。