Sklearn 损失函数如何应用到_Sklearn库主要模块功能简介
sklearn,全稱scikit-learn,是python中的機器學習庫,建立在numpy、scipy、matplotlib等數據科學包的基礎之上,涵蓋了機器學習中的樣例數據、數據預處理、模型驗證、特征選擇、分類、回歸、聚類、降維等幾乎所有環節,功能十分強大,目前sklearn版本是0.23。與深度學習庫存在pytorch、TensorFlow等多種框架可選不同,sklearn是python中傳統機器學習的首選庫,不存在其他競爭者。
本文將分別圍繞下圖中各大子模塊進行分別介紹,不會面面俱到、但求提綱挈領。
sklearn常用模塊一覽
02 樣例數據集
sklearn為初學者提供了一些經典數據集,通過這些數據集可快速搭建機器學習任務、對比模型性能。數據集主要圍繞分類和回歸兩類經典任務,對于不同需求,常用數據集簡介如下:
- load_breast_cancer:乳腺癌數據集,特征為連續數值變量,標簽為0或1的二分類任務
- load_iris:經典鳶尾花數據集,特征為連續數值變量,標簽為0/1/2的三分類任務,且各類樣本數量均衡,均為50個
- load_wine:紅酒數據集,與鳶尾花數據集特點類似,也是用于連續特征的3分類任務,不同之處在于各類樣本數量輕微不均衡
- load_digits:小型手寫數字數據集(之所以稱為小型,是因為還有大型的手寫數字數據集mnist),包含0-9共10種標簽,各類樣本均衡,與前面3個數據集最大不同在于特征也是離散數值0—16之間,例如在進行多項式樸素貝葉斯模型、ID3樹模型時,可用該數據集
- load_boston:波士頓房價數據集,連續特征擬合房價,適用于回歸任務
值得指出,sklearn除了load系列經典數據集外,還支持自定義數據集make系列和下載數據集fetch系列(load系列為安裝sklearn庫時自帶,而fetch則需額外下載),這為更多的學習任務場景提供了便利。
03 數據預處理
sklearn中的各模型均有規范的數據輸入輸出格式,一般以np.array和pd.dataframe為標準格式,所以一些字符串的離散標簽是不能直接用于模型訓練的;同時為了加快模型訓練速度和保證訓練精度,往往還需對數據進行預處理,例如在以距離作為度量進行訓練時則必須考慮去量綱化的問題。為此,sklearn提供了一些常用的數據預處理功能,常用的包括:
- MinMaxScaler:歸一化去量綱處理,適用于數據有明顯的上下限,不會存在嚴重的異常值,例如考試得分0-100之間的數據可首選歸一化處理
- StandardScaler:標準化去量綱處理,適用于可能存在極大或極小的異常值,此時用MinMaxScaler時,可能因單個異常點而將其他數值變換的過于集中,而用標準正態分布去量綱則可有效避免這一問題
- Binarizer:二值化處理,適用于將連續變量離散化
- OneHotEncoder:獨熱編碼,一種經典的編碼方式,適用于離散標簽間不存在明確的大小相對關系時。例如對于民族特征進行編碼時,若將其編碼為0-55的數值,則對于以距離作為度量的模型則意味著民族之間存在"大小"和"遠近"關系,而用獨熱編碼則將每個民族轉換為一個由1個"1"和55個"0"組成的向量。弊端就是當分類標簽過多時,容易帶來維度災難,而特征又過于稀疏
- Ordinary:數值編碼,適用于某些標簽編碼為數值后不影響模型理解和訓練時。例如,當民族為待分類標簽時,則可將其簡單編碼為0-55之間的數字
04 特征選擇
機器學習中有句經典的臺詞是:數據和特征決定學習上限,模型和算法只是逼近這個上限,可見特征工程在機器學習中的重要性。一般而言,傳統機器學習中的特征工程主要包括兩方面需求:
- 特征維度過多時,為加快模型訓練速度,進行特征選擇即過濾掉不重要的特征;
- 特征較少或模型訓練性能不好時,可通過對問題的理解嘗試構建特征提升維度。
這里簡單介紹幾種特征選擇的方式:
- from_model:顧名思義,從模型選擇特征,這是因為很多模型在訓練后都提供了特征的重要性結果feature_importance,據此可作為特征選擇的依據
- VarianceThreshold:根據方差閾值做特征選擇,實際上當某一特征的方差越大時意味著該特征越能帶來更好的分類區分度,否則由于特征取值比較集中,很難對應不同的分類效果
- SelectKBest:指定K個特征選擇結果,具體也需依賴選擇的標準
05 模型選擇
模型選擇是機器學習中的重要環節,涉及到的操作包括數據集切分、參數調整和驗證等。對應常用函數包括:
- train_test_split:常用操作之一,切分數據集和測試集,可設置切分比例
- cross_val_score:交叉驗證,默認K=5折,相當于把數據集平均切分為5份,并逐一選擇其中一份作為測試集、其余作為訓練集進行訓練及評分,最后返回K個評分
- GridSearchCV:調參常用方法,通過字典類型設置一組候選參數,并制定度量標準,最后返回評分最高的參數
06 度量指標
不同的度量指標可以學到不同的最優模型。對于不同類型任務,sklearn提供了多種度量指標,包括:
- 分類任務:準確率,所有樣本中分類正確樣本所占比例;精準率和召回率,一對相互矛盾的指標,適用于分類樣本數量不均衡時,此時為了保證既定目標,可只選其中一個指標;調和平均數F1,相當于兼顧了精準率和召回率兩項指標
- 回歸任務:常用的包括MSE、MAE,但R2_score實質上是更為公允和直觀的評價指標,其意義是R2_Score = MSE / VAR,即預測分類和實際分類的均方差與實際分類方差的比值
- 聚類任務:聚類任務屬于無監督學習,所以根據是否有先驗標簽信息,聚類結果的度量指標包括輪廓系數(無需先驗標簽,用組內距離與組外最近距離的比值度量)、調整蘭德指數(基于真實分簇標簽和聚類標簽計算)
07 降維
降維也屬于無監督學習的一種,當特征維度過多時可通過矩陣的QR分解實現在盡可能保留原有信息的情況下降低維度,一般用于圖像數據預處理,且降維后的特征與原特征沒有直接聯系,使得模型訓練不再具有可解釋性。
08 聚類
聚類是一種典型的無監督學習任務,但也是實際應用中較為常見的需求。在不提供樣本真實標簽的情況下,基于某些特征對樣本進行物以類聚。根據聚類的原理,主要包括三種:
- 基于距離聚類,典型的就是K均值聚類,通過不斷迭代和重新尋找最小距離,對所有樣本劃分為K個簇,有一款小游戲《擁擠城市》應該就是基于K均值聚類實現
- 基于密度聚類,與距離聚類不同,基于密度聚類的思想是源于通過距離判斷樣本是否連通(需指定連通距離的閾值),從而完成樣本劃分。由于劃分結果僅取決于連通距離的閾值,所以不可指定聚類的簇數。典型算法模型是DBSCAN
- 基于層次聚類,具體又可細分為自頂向下和自底向上,以自底向上層次聚類為例:首先將所有樣本劃分為一類,此時聚類簇數K=樣本個數N,遍歷尋找K個簇間最相近的兩個簇并完成合并,此時還有K-1個簇,如此循環直至劃分為指定的聚類簇數。當然,這里評價最相近的兩個簇的標準又可細分為最小距離、最大距離和平均距離。
09 基本學習模型
分類和回歸任務是機器學習中的經典場景,同屬于有監督學習。經典的學習算法主要包括5種:
- 線性模型,回歸任務中對應線性回歸,分類任務則對應即邏輯回歸,或者叫對數幾率回歸,實質是通過線性回歸擬合對數幾率的方式來實現二分類
- K近鄰,最簡單易懂的機器學習模型,無需訓練(惰性模型),僅僅是通過判斷自己所處位置周邊的樣本判斷類比或者擬合結果
- 支持向量機,一個經典的機器學習模型,最初也是源于線性分類,通過最大化間隔實現最可靠的分類邊界。業界相傳:支持向量機有三寶、間隔對偶核函數。其中"間隔"由硬間隔升級為軟間隔解決了帶異常值的線性不可分場景,"對偶"是在優化過程中求解拉格朗日問題的一個小技巧,而核函數才是支持向量機的核心,通過核實的核函數可以實現由線性可分向線性不可分的升級、同時避免了維度災難
- 樸素貝葉斯,源于概率論中貝葉斯全概率公式,模型訓練的過程就是擬合各特征分布概率的過程,而預測的過程則是標出具有最大概率的類比,是一個純粹的依據概率完成分類任務的模型。而像邏輯回歸、K近鄰、支持向量機以及決策樹,雖然也都可以預測出各類別概率,但并不是純粹意義上的概率
- 決策樹,這是一個直觀而又強大的機器學習模型,訓練過程主要包括特征選擇-切分-剪枝,典型的3個決策樹是ID3、C4.5和CART,其中CART樹既可用于分類也可用于回歸。更重要的是,決策樹不僅模型自身頗具研究價值,還是眾多集成學習模型的基學習器。
在以上5個經典的基本學習模型中,除了樸素貝葉斯僅用于分類任務外,其他4個模型都是既可分類也可回歸的模型。
10 集成學習模型
當基本學習模型性能難以滿足需求時,集成學習便應運而生。集成學習,顧名思義,就是將多個基學習器的結果集成起來匯聚出最終結果。而根據匯聚的過程,集成學習主要包括3種流派:
- bagging,即bootstrap aggregating,通過自助取樣(有返回取樣)實現并行訓練多個差異化的基學習器,雖然每個學習器效果可能并不突出,但通過最后投票得到的最終結果性能卻會穩步提升。當其學習器采取決策樹時,bagging思想的集成學習模型就是隨機森林。另外,與bagging對應的另一種方式是無放回取樣,相應的方法叫pasting,不過應用較少
- boosting,即提升法。與bagging模型并行獨立訓練多個基學習器不同,boosting的思想是基于前面訓練結果逐漸訓練更好的模型,屬于串行的模式。根據實現細節不同,又具體分為兩種boosting模型,分別是Adaboost和GBDT,二者的核心思想差異在于前者的提升聚焦于之前分錯的樣本、而后者的提升聚焦于之前漏學的殘差。另外一個大熱的XGBoost是對GBDT的一個改進,實質思想是一致的。
- stacking,即堆棧法,基本流程與bagging類似而又不同:stacking也是并行獨立訓練多個基學習器,而后又將這些訓練的結果作為特征進行再次學習。有些類似于深度學習中的多層神經網絡。
11 小節
以上,對sklearn中的常用子模塊進行了粗略簡介,基本涵蓋了常用的模型和輔助函數,對于sklearn入門來說是足夠的。當然,本文僅旨在建立對sklearn庫的宏觀框架,更為深入的學習當然還是要查閱專項教程。
總結
以上是生活随笔為你收集整理的Sklearn 损失函数如何应用到_Sklearn库主要模块功能简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python画图颜色表示大小变化_pyt
- 下一篇: python生成表格文件_python读