版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、菜菜的scikit-learn課堂05sklearn中的邏輯回歸小伙伴們晚上好o()我是菜菜,這里是sklearn課堂第五期,今晚的內(nèi)容是邏輯回歸開發(fā)環(huán)境是Jupyter lab,所用的庫和版本大家參考:Python 3.7.1(你的版本至少要3.4以上Scikit-learn 0.20.1 (你的版本至少要0.20Numpy 1.15.4, Pandas 0.23.4, Matplotlib 3.0.2, SciPy 1.1.0請掃碼進群領(lǐng)取課件和代碼源文件,掃描后回復”K"就可以進群哦菜菜的scikit-learn課堂05 sklearn中的邏輯回歸1 概述1.1 名為“回歸”的
2、分類器1.2 為什么需要邏輯回歸1.3 sklearn中的邏輯回歸2 linear_model.LogisticRegression2.1 二元邏輯回歸的損失函數(shù)2.1.1 損失函數(shù)的概念與解惑2.1.2 【選學】二元邏輯回歸損失函數(shù)的數(shù)學解釋,公式推導與解惑2.2 重要參數(shù)penalty & C2.2.1 正則化2.2.2 邏輯回歸中的特征工程2.3 梯度下降:重要參數(shù)max_iter2.3.1 梯度下降求解邏輯回歸2.3.2 梯度下降的概念與解惑2.3.3 步長的概念與解惑2.4 二元回歸與多元回歸:重要參數(shù)solver & multi_class2.5 樣本不平衡與參數(shù)c
3、lass_weight 3 案例:用邏輯回歸制作評分卡3.1 導庫,獲取數(shù)據(jù)3.2 探索數(shù)據(jù)與數(shù)據(jù)預處理3.2.1 去除重復值3.2.2 填補值3.2.3 描述性統(tǒng)計處理異常值3.2.4 為什么不統(tǒng)一量綱,也不標準化數(shù)據(jù)分布?3.2.5 樣本不均衡問題3.2.6 分訓練集和測試集3.3 分箱3.3.1 等頻分箱3.3.2 【選學】 確保每個箱中都有0和13.3.3 定義WOE和IV函數(shù)3.3.4 卡方檢驗,合并箱體,畫出IV曲線3.3.5 用最佳分箱個數(shù)分箱,并驗證分箱結(jié)果3.3.6 將選取最佳分箱個數(shù)的過程包裝為函數(shù)3.3.7 對所有特征進行分箱選擇3.4 計算各箱的WOE并到數(shù)據(jù)中3.5
4、建模與模型驗證3.6 制作評分卡4 附錄:4.1 邏輯回歸的參數(shù)列表4.2 邏輯回歸的屬性列表4.3 邏輯回歸的接口列表1 概述1.1 名為“回歸”的分類器在過去的四周中,我們接觸了不少帶“回歸”二字的算法,回歸樹,隨機森林的回歸,無一例外他們都是區(qū)別于分類算法們,用來處理和連續(xù)型的算法。然而邏輯回歸,是一種名為“回歸”的線性分類器,其本質(zhì)是由線性回歸變化而來的,一種廣泛使用于分類問題中的廣義回歸算法。要理解邏輯回歸從何而來,得要先理解線性回歸。線性回歸是學習中最簡單的的回歸算法,它寫作一個幾乎人人熟悉的方程:被統(tǒng)稱為模型的參數(shù),其中被稱為截距(intercept),被稱為系數(shù)(coecien
5、t),這個表達式,其實就和我們小學時就無比熟悉的個列矩陣,則有:是同樣的性質(zhì)。我們可以使用矩陣來表示這個方程,其中x和 都可以被看做是一線性回歸的任務,就是構(gòu)造一個函數(shù) 來輸入的特征矩陣x和值y的線性關(guān)系,而構(gòu)造函數(shù)的就是找出模型的參數(shù):和,著名的最小二乘法就是用來求解線性回歸中參數(shù)的數(shù)學方法。通過函數(shù) ,線性回歸使用輸入的特征矩陣X來輸出一組連續(xù)型的值y_pred,以完成各種連續(xù)型變量的任務(比如銷量,股價等等)。那如果我們的是離散型變量,尤其是,如果是滿足0-1分布的離散型變量,我們要怎么辦呢?我們可以通過引分布在(0,1)之間,且當g(z)接近0時樣本的系函數(shù)(link function
6、),將線性回歸方程z變換為g(z),并且令g(z)的值為類別0,當g(z)接近1時樣本的為類別1,這樣就得到了一個分類模型。而這個函數(shù)對于邏輯回歸來說,就是Sigmoid函數(shù):線性回歸中,于是帶入,就得到了二元邏輯回歸模型的一般形式:面試高危問題:Sigmoid函數(shù)的公式和性質(zhì)Sigmoid函數(shù)是一個S型的函數(shù),當自變量z趨近正無窮時,因變量g(z)趨近于1,而當z趨近負無窮時,g(z)趨近于0,它能夠?qū)⑷魏螌崝?shù) 到(0,1)區(qū)間,使其可用于將任意值函數(shù)轉(zhuǎn)換為更適合二分類的函數(shù)。因為這個性質(zhì),Sigmoid函數(shù)也被當作是歸一化的 法,與我們之前學過的MinMaxSclaer同理,是屬于數(shù)據(jù)預處
7、理中的“縮放”功能,可以將數(shù)據(jù)壓縮到0,1之內(nèi)。區(qū)別在于,MinMaxScaler歸一化之后,是可以取 到0和1的(最大值歸一化后就是1,最小值歸一化后就是0),但Sigmoid函數(shù)只是無限趨近于0和1。而就是我們邏輯回歸返回的值。此時,的取值都在0,1之間,因此和相加必然為1。如果我們令除以可以得到形似幾率(odds)的,在此基礎(chǔ)上取對數(shù),可以很容易就得到:不難發(fā)現(xiàn),y(x)的形似幾率取對數(shù)的本質(zhì)其實就是我們的線性回歸z,我們實際上是在對線性回歸模型的結(jié)果取對數(shù)幾率來讓其的結(jié)果無限逼近0和1。因此,其對應的模型被稱為”對數(shù)幾率回歸“(logistic Regression),也就是我們的邏輯
8、回歸,這個名為“回歸”卻是用來做分類工作的分類器。之前我們提到過,線性回歸的任務是通過求解 構(gòu)建 這個函數(shù),并希望函數(shù) 能夠盡量擬合數(shù)據(jù),因此邏輯回歸的任務也是類似的:求解 來構(gòu)建一個能夠盡量擬合數(shù)據(jù)的函數(shù),并通過向函數(shù)中輸入特征矩陣來獲取相應的值y。思考:y(x)代表了樣本為某一類的概率嗎?是形似對數(shù)幾率的一種變化。而幾率odds的本質(zhì)其實是,其中p是A發(fā)生的概率,而1-p是事件A發(fā)生的概率,并且p+(1-p)=1。因此,很多人在理解邏輯回歸時,都對做出如下的解釋:我們讓線性回歸結(jié)果逼近0和1,此時和之和為1,因此它們可以被我們看作是一對正反例發(fā)生的概率,即是某樣本i的被為1的概率,而是i的
9、被為0的概率,就是樣本i的被為1的相對概率?;谶@種理解,我們使用最大似然法和概率分布函數(shù)推到出邏輯回歸的損失函數(shù),并且把返回樣本在取值上的概率當成是邏輯回歸的性質(zhì)來使用,每當我們訴求概率的時候,我們都會使用邏輯回歸。然而這種理解是正確的嗎?概率是度量偶然發(fā)生可能性的數(shù)值,盡管邏輯回歸的取值在(0,1)之間,并且和之和的確為1,但光憑這個性質(zhì),我們就可以認為代表了樣本x在上取值為1的概率嗎?設(shè)想我們使用MaxMinScaler對特征進行歸一化后,任意特征的取值也在0,1之間,并且任意特征的取值 和也能夠相加為1,但我們卻認為0-1歸一化后的特征是某種概率。邏輯回歸返回了概率這個命題,這種說法嚴
10、謹嗎?但無論如何,長年以來人們都是以”返回概率“的方式來理解邏輯回歸,并且這樣使用它的性質(zhì)。可以說,邏輯 回歸返回的數(shù)字,即便本質(zhì)上不是概率,卻也有著概率的各種性質(zhì),可以被當成是概率來和使用。1.2 為什么需要邏輯回歸線性回歸對數(shù)據(jù)的要求很嚴格,比如必須滿足正態(tài)分布,特征之間的多重共線性需要消除等等,而現(xiàn)實中很多真實情景的數(shù)據(jù)這些要求,因此線性回歸在很多現(xiàn)實情境的應用效果有限。邏輯回歸是由線性回歸變化而來,因此它對數(shù)據(jù)也有一些要求,而我們之前已經(jīng)學過了強大的分類模型決策樹和隨機森林,它們的分類效力很 強,并且不需要對數(shù)據(jù)做任何預處理。何況,邏輯回歸的原理其實并不簡單。一個人要理解邏輯回歸,必須
11、要有一定的數(shù)學基礎(chǔ),必須理解損失函數(shù),正 則化,梯度下降,海森矩陣等等這些復雜的概念,才能夠?qū)壿嫽貧w進行調(diào)優(yōu)。其涉及到的數(shù)學理念,不比支持向量機少多少。況且,要計算概率,樸素貝葉斯可以計算出真正意義上的概率,要進行分類,學習中能夠完成二分類功能的模型簡直多如牛毛。因此,在數(shù)據(jù)挖掘,人工智能所涉及到的醫(yī)療,教育,人臉識別,語音識別這些領(lǐng) 域,邏輯回歸沒有太多的出場機會。學習經(jīng)典書目中,周志華的學習400頁僅有一頁紙是關(guān)于邏輯回歸的(還是一頁甚至,在我們的各種數(shù)學公式),數(shù)據(jù)挖掘?qū)д摵蚉ython數(shù)據(jù)科學手冊中完全沒有邏輯回歸相關(guān)的內(nèi)容,sklearn中對比各種 分類器的效應也不帶邏輯回歸玩,可
12、見業(yè)界地位。但是,無論的優(yōu)點:學習領(lǐng)域如何折騰,邏輯回歸依然是一個受工業(yè)商業(yè)熱愛,使用廣泛的模型,因為它有著不可替代1. 邏輯回歸對線性關(guān)系的擬合效果好到喪心病狂,特征與之間的線性關(guān)系極強的數(shù)據(jù),比如金融領(lǐng)域中的,評分卡制作,中的等等相關(guān)的數(shù)據(jù),都是邏輯回歸的強項。雖然現(xiàn)在有了梯度提升樹GDBT,比邏輯回歸效果更好,也被許多數(shù)據(jù)咨詢公司啟用,但邏輯回歸在金融領(lǐng)域,尤其是業(yè)中的地位依然不可動搖(相對的,邏輯回歸在非線性數(shù)據(jù)的效果很多時候比瞎猜還不如,所以如果你已經(jīng)知道數(shù)據(jù)之間的是非線性的,千萬不要邏輯回歸)2. 邏輯回歸計算快:對于線性數(shù)據(jù),邏輯回歸的擬合和計算都非常快,計算效率優(yōu)于SVM和隨機
13、森林,親測表 示在大型數(shù)據(jù)上尤其能夠看得出區(qū)別3. 邏輯回歸返回的分類結(jié)果不是固定的0,1,而是以小數(shù)形式呈現(xiàn)的類概率數(shù)字:我們因此可以把邏輯回歸返 回的結(jié)果當成連續(xù)型數(shù)據(jù)來利用。比如在評分卡制作時,我們不僅需要判斷客戶是否會違約,還需要給出確 定的”信用分“,而這個信用分的計算就需要使用類概率計算出的對數(shù)幾率,而決策樹和隨機森林這樣的分類 器,可以產(chǎn)出分類結(jié)果,卻無法幫助我們計算分數(shù)(當然,在sklearn中,決策樹也可以產(chǎn)生概率,使用接口predict_proba調(diào)用就好,但一般來說,正常的決策樹沒有這個功能)。另外,邏輯回歸還有抗噪能力強的優(yōu)點。福布斯雜志在討論邏輯回歸的優(yōu)點時,甚至有著
14、“技術(shù)上來說,最佳模型 的AUC面積低于0.8時,邏輯回歸非常明顯優(yōu)于樹模型”的說法。并且,邏輯回歸在小數(shù)據(jù)集上表現(xiàn)更好,在大型的 數(shù)據(jù)集上,樹模型有著更好的表現(xiàn)。由此,我們已經(jīng)了解了邏輯回歸的本質(zhì),它是一個返回對數(shù)幾率的,性數(shù)據(jù)上表現(xiàn)優(yōu)異的分類器,它主要被應用在金融領(lǐng)域。其數(shù)學目的是求解能夠讓模型對數(shù)據(jù)擬合程度最高的參數(shù) 的值,以此構(gòu)建函數(shù),然后將特征矩陣輸入函數(shù)來計算出邏輯回歸的結(jié)果y。注意,雖然我們熟悉的邏輯回歸通常被用于處理二分類問題,但邏輯回歸也可以做多分類。1.3 sklearn中的邏輯回歸邏輯回歸相關(guān)的類說明linear_model.LogisticRegression邏輯回歸分
15、類器(又叫l(wèi)ogit回歸,最大熵分類器)linear_model.LogisticRegressionCV帶交叉驗證的邏輯回歸分類器linear_model.logistic_regression_path計算Logistic回歸模型以獲得正則化參數(shù)的列表linear_model.SGDClassier利用梯度下降求解的線性分類器(SVM,邏輯回歸等等)linear_model.SGDRegressor利用梯度下降最小化正則化后的損失函數(shù)的線性回歸模型metrics.log_loss對數(shù)損失,又稱邏輯損失或交叉熵損失【在sklearn0.21版本中即將被移除】linear_model.Rand
16、omizedLogisticRegression隨機的邏輯回歸其他會涉及的類說明metrics.confusion_matrix矩陣,模型評估指標之一metrics.roc_auc_scoreROC曲線,模型評估指標之一metrics.accuracy_score精確性,模型評估指標之一2 linear_model.LogisticRegressionclasssklearn.linear_model.LogisticRegression (penalty=l2, dual=False, tol=0.0001, C=1.0,t_intercept=True, intercept_scaling
17、=1, class_weight=None, random_state=None, solver=warn, max_iter=100,multi_class=warn, verbose=0, warm_start=False, n_jobs=None)2.1 二元邏輯回歸的損失函數(shù)2.1.1 損失函數(shù)的概念與解惑在學習決策樹和隨機森林時,我們曾經(jīng)提到過兩種模型表現(xiàn):在訓練集上的表現(xiàn),和在測試集上的表現(xiàn)。我們建 模,是追求模型在測試集上的表現(xiàn)最優(yōu),因此模型的評估指標往往是用來衡量模型在測試集上的表現(xiàn)的。然而,邏 輯回歸有著基于訓練數(shù)據(jù)求解參數(shù) 的需求,并且希望訓練出來的模型能夠盡可能地擬合訓練
18、數(shù)據(jù),即模型在訓練集上的準確率越靠近100%越好。因此,我們使用”損失函數(shù)“這個評估指標,來衡量參數(shù)為 的模型擬合訓練集時產(chǎn)生的信息損失的大小,并以此衡量參數(shù) 的優(yōu)劣。如果用一組參數(shù)建模后,模型在訓練集上表現(xiàn)良好,那我們就說模型擬合過程中的損失很小,損失函數(shù)的值很小,這一組參數(shù)就優(yōu)秀;相反,如果模型在訓練集上表現(xiàn)糟糕,損失函數(shù)就會很大,模型就訓練不 足,效果較差,這一組參數(shù)也就比較差。即是說,我們在求解參數(shù) 時,追求損失函數(shù)最小,讓模型在訓練數(shù)據(jù)上的擬合效果最優(yōu),即準確率盡量靠近100%。邏輯回歸的損失函數(shù)是由極大似然估計推導出來的,具體結(jié)果可以寫作:其中, 表示求解出來的一組參數(shù),m是樣本的
19、個數(shù), 是樣本i上真實的,是樣本i上,基于參數(shù) 計算最小的 取值。注意,在邏輯出來的邏輯回歸返回值, 是樣本i各個特征的取值。我們的目標,就是求解出使回歸的本質(zhì)函數(shù)y(x)里,特征矩陣x是自變量,參數(shù)是 。但在損失函數(shù)中,參數(shù) 是損失函數(shù)的自變量,x和y都是已知的特征矩陣和,相當于是損失函數(shù)的參數(shù)。不同的函數(shù)中,自變量和參數(shù)各有不同,因此大家需要在數(shù)學計算中,尤其是求導的時候避免。由于我們追求損失函數(shù)的最小值,讓模型在訓練集上表現(xiàn)最優(yōu),可能會另一個問題:如果模型在訓練集上表示優(yōu)秀,卻在測試集上表現(xiàn)糟糕,模型就會過擬合。雖然邏輯回歸和線性回歸是天生欠擬合的模型,但我們還是需要 控制過擬合的技術(shù)來
20、幫助我們調(diào)整模型,對邏輯回歸中過擬合的控制,通過正則化來實現(xiàn)。關(guān)鍵概念:損失函數(shù)衡量參數(shù) 的優(yōu)劣的評估指標,用來求解最優(yōu)參數(shù)的工具損失函數(shù)小,模型在訓練集上表現(xiàn)優(yōu)異,擬合充分,參數(shù)優(yōu)秀損失函數(shù)大,模型在訓練集上表現(xiàn)差勁,擬合不足,參數(shù)糟糕我們追求,能夠讓損失函數(shù)最小化的參數(shù)組合注意:沒有”求解參數(shù)“需求的模型沒有損失函數(shù),比如KNN,決策樹2.1.2【選學】二元邏輯回歸損失函數(shù)的數(shù)學解釋,公式推導與解惑雖然我們質(zhì)疑過”邏輯回歸返回概率“這樣的說法,但不可否認邏輯回歸的整個理論基礎(chǔ)都是建立在這樣的理解上的。在這里,我們基于極大似然法來推導二元邏輯回歸的損失函數(shù),這個推導過程能夠幫助我們了解損失函
21、數(shù)怎么得來的,以及為什么的最小化能夠?qū)崿F(xiàn)模型在訓練集上的擬合最好。請時刻記得我們的目標:讓模型對訓練數(shù)據(jù)的效果好,追求損失最小。二元邏輯回歸的服從伯努利分布(即0-1分布),因此我們可以將一個特征向量為 ,參數(shù)為 的模型中的一個樣本i的情況表現(xiàn)為如下形式:樣本i在由特征向量 和參數(shù) 組成的函數(shù)中,樣本被為1的概率為:樣本i在由特征向量 和參數(shù) 組成的函數(shù)中,樣本被為0的概率為:當被的值為1的時候,代表樣本i的被為1,當?shù)闹禐?的時候,代表樣本i的被為0。我們假設(shè)樣本i的真實于單樣本i來說,模型的為1,就代表樣本i的為1,此時如果為1,為0,就代表樣本i的為1,與真實值一致。此時對被就是完全準確
22、的,擬合程度很優(yōu)秀,沒有任何信息損失。相反,如果此時為0,被為0,與真實情況完全相于單樣本i來說,模型的就是完全錯誤的,擬合程度很差,所有的信息都損失了。當 為0時,也是同樣的道理。所以,當 為1的時候,我們希望非常接近1, 當 為0的時候,我們希望非常接近1,這樣,模型的效果就很好,信息損失就很少。將兩種取值的概率整合,我們可以定義如下等式:這個等式代表同就等于就等于表了和。當樣本i的真實為1的時候,就等于0,的0次方就是1,所以,這個時候,如果為1,模型的效果就很好,損失就很小。同理,當 為0的時候,此時如果非常接近1,模型的效果就很好,損失就很小。所以,為了達成讓模型擬合好,損失小的目的
23、,我們每時每刻都希望的值等于1。而的本質(zhì)是樣本i由特征向量 和參數(shù) 組成的函數(shù)中,出所有可能的 的概率,因此1是它的最大值。也就是說,每時每刻,我們都在追求的最大值。這就將模型擬合中的“最小化損失”問題,轉(zhuǎn)換成了對函數(shù)求解極值的問題。是對單個樣本i而言的函數(shù),對一個訓練集的m個樣本來說,我們可以定義如下等式來表達所有樣本在特征矩陣X和參數(shù) 組成的函數(shù)中,出所有可能的 的概率P為:對該概率P取對數(shù),再由和可得到:這就是我們的交叉熵函數(shù)。為了數(shù)學上的便利以及更好地定義”損失”的含義,我們希望將極大值問題轉(zhuǎn)換為極小值問題,因此我們對取負,并且讓參數(shù) 作為函數(shù)的自變量,就得到了我們的損失函數(shù):這就是一
24、個,基于邏輯回歸的返回值的概率性質(zhì)得出的損失函數(shù)。在這個函數(shù)上,我們只要追求最小值,就能讓模型在訓練數(shù)據(jù)上的擬合效果最好,損失最低。這個推導過程,其實就是“極大似然法”的推導過程。關(guān)鍵概念:似然與概率似然與概率是一組非常相似的概念,它們都代表著某件事發(fā)生的可能性,但它們在統(tǒng)計學和學習中有著微妙的不同。以樣本i為例,我們有表達式:對這個表達式而言,如果參數(shù) 是已知的,特征向量 是未知的,我們便稱P是在探索不同特征取值下獲取所有可能的 的可能性,這種可能性就被稱為概率,研究的是自變量和因變量之間的關(guān)系。如果特征向量 是已知的,參數(shù) 是未知的,我們便稱P是在探索不同參數(shù)下獲取所有可能的 的可能性,這
25、種可能性就被稱為似然,研究的是參數(shù)取值與因變量之間的關(guān)系。在邏輯回歸的建模過程中,我們的特征矩陣是已知的,參數(shù)是未知的,因此我們討論的所有“概率”其實嚴格來 說都應該是“似然”。我們追求的最大值(換算成損失函數(shù)之后取負了,所以是最小值),就是在追求“極大似然”,所以邏輯回歸的損失函數(shù)的推導方法叫做”極大似然法“。也因此,以下式子又被稱為”極大似然 函數(shù)“:2.2 重要參數(shù)penalty & C2.2.1 正則化正則化是用來防止模型過擬合的過程,常用的有L1正則化和L2正則化兩種選項,分別通過在損失函數(shù)后加上參數(shù)向 量 的L1范式和L2范式的倍數(shù)來實現(xiàn)。這個增加的范式,被稱為“正則項”,
26、也被稱為"懲罰項"。損失函數(shù)改變,基于損失函數(shù)的最優(yōu)化來求解的參數(shù)取值必然改變,我們以此來調(diào)節(jié)模型擬合的程度。其中L1范式表現(xiàn)為參數(shù)向量中 的每個參數(shù)的絕對值之和,L2范數(shù)表現(xiàn)為參數(shù)向量中的每個參數(shù)的平方和的開方值。其中是我們之前提過的損失函數(shù),C是用來控制正則化程度的超參數(shù),n是方程中特征的總數(shù),也是方程中參數(shù)的總數(shù),j代表每個參數(shù)。在這里,j要大于等于1,是因為我們的參數(shù)向量 中,第一個參數(shù)是,是我們的截距,它通常是不參與正則化的。在許多書籍和博客中,大家可能也會見到如下的寫法:其實和上面我們展示的式子的本質(zhì)是一模一樣的。不過在大多數(shù)和博客中,常數(shù)項是乘以正則項,通過調(diào)
27、控正則項來調(diào)節(jié)對模型的懲罰。而sklearn當中,常數(shù)項C是在損失函數(shù)的前面,通過調(diào)控損失函數(shù)本身的大小,來調(diào)節(jié) 對模型的懲罰。L1正則化和L2正則化雖然都可以控制過擬合,但它們的效果并不相同。當正則化強度逐漸增大(即C逐漸變?。瑓?shù) 的取值會逐漸變小,但L1正則化會將參數(shù)壓縮為0,L2正則化只會讓參數(shù)盡量小,取到0。在L1正則化在逐漸加強的過程中,攜帶信息量小的、對模型貢獻不大的特征的參數(shù),會比攜帶大量信息的、對模型 有巨大貢獻的特征的參數(shù)更快地變成0,所以L1正則化本質(zhì)是一個特征選擇的過程,掌管了參數(shù)的“稀疏性”。L1正 則化越強,參數(shù)向量中就越多的參數(shù)為0,參數(shù)就越稀疏,選出來的特征就
28、越少,以此來防止過擬合。因此,如果 特征量很大,數(shù)據(jù)維度很高,我們會傾向于使用L1正則化。由于L1正則化的這個性質(zhì),邏輯回歸的特征選擇可以由Embedded嵌入法來完成。參數(shù)說明penalty可以輸入"l1"或"l2"來指定使用哪一種正則化方式,不填寫默認"l2"。注意,若選擇"l1"正則化,參數(shù)solver僅能夠使用求解方式”liblinear"和"saga“,若使用“l(fā)2”正則 化,參數(shù)solver中所有的求解方式都可以使用。CC正則化強度的倒數(shù),必須是一個大于0的浮點數(shù),不填寫默認1.0,
29、即默認正則項與損失函數(shù)的 比值是1:1。C越小,損失函數(shù)會越小,模型對損失函數(shù)的懲罰越重,正則化的效力越強,參數(shù) 會逐漸被壓縮得越來越小。相對的,L2正則化在加強的過程中,會盡量讓每個特征對模型都有一些小的貢獻,但攜帶信息少,對模型貢獻不大 的特征的參數(shù)會非常接近于0。通常來說,如果我們的主要目的只是為了防止過擬合,選擇L2正則化就足夠了。但 是如果選擇L2正則化后還是過擬合,模型在未知數(shù)據(jù)集上的效果表現(xiàn)很差,就可以考慮L1正則化。而兩種正則化下C的取值,都可以通過學習曲線來進行調(diào)整。建立兩個邏輯回歸,L1正則化和L2正則化的差別就一目了然了:from sklearn.linear_model
30、 import LogisticRegression as LR from sklearn.datasets import load_breast_cancerimport numpy as npimport matplotlib.pyplot as pltfromfromsklearn.model_selection import train_test_splitsklearn.metrics import accuracy_scoredata= load_breast_cancer()X = data.datay = data.targetdata.data.shapelrl1 = LR(
31、penalty="l1",solver="liblinear",C=0.5,max_iter=1000)lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)#邏輯回歸的重要屬性coef_,查看每個特征所對應的參數(shù)lrl1 = lrl1.fit(X,y)lrl1.coef_(lrl1.coef_ != 0).sum(axis=1)lrl2 = lrl2.fit(X,y)lrl2.coef_可以看見,當我們選擇L1正則化的時候,許多特征的參數(shù)都被設(shè)
32、置為了0,這些特征在真正建模的時候,就 現(xiàn)在我們的模型當中了,而L2正則化則是對所有的特征都給出了參數(shù)。究竟哪個正則化的效果更好呢?還是都差不多?出l1 = l2 = l1test = l2test = Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)for i inlrl1 lrl2np.linspace(0.05,1,19):=LR(penalty="l1",solver="liblinear",C=i,max_iter=1000)L
33、R(penalty="l2",solver="liblinear",C=i,max_iter=1000)lrl1=lrl1.fit(Xtrain,Ytrain)l1.append(accuracy_score(lrl1.predict(Xtrain),Ytrain)l1test.append(accuracy_score(lrl1.predict(Xtest),Ytest)數(shù)據(jù)集下,兩種正則化的結(jié)果區(qū)別不大。但隨著C的逐漸變大,正則化的強度越來越可見,至少在我們的小,模型在訓練集和測試集上的表現(xiàn)都呈上升趨勢,直到C=0.8左右,訓練集上的表現(xiàn)依然在走高,
34、但模型在未知 數(shù)據(jù)集上的表現(xiàn)開始下跌,這時候就是出現(xiàn)了過擬合。我們可以認為,C設(shè)定為0.8會比較好。在實際使用時,基本 就默認使用l2正則化,如果感覺到模型的效果不好,那就換L1試試看。2.2.2 邏輯回歸中的特征工程當特征的數(shù)量很多的時候,我們出于業(yè)務考慮,也出于計算量的考慮,希望對邏輯回歸進行特征選擇來降維。比如,在判斷一個人是否會患業(yè)務選擇的時候,醫(yī)生如果看58個指標來確診,會比需要看30個指標來確診容易得多。說到降維和特征選擇,首先要想到的是利用自己的業(yè)務能力進行選擇,肉眼可見明顯和有關(guān)的特征就是需要留下的。當然,如果我們并不了解業(yè)務,或者有成千上萬的特征,那我們也可以使用算法來幫助我
35、們?;蛘?,可以讓 算法先幫助我們篩選過一遍特征,然后在少量的特征中,我們再根據(jù)業(yè)務常識來選擇更少量的特征。PCA和SVD一般不用說到降維,我們首先想到的是之前提過的高效降維算法,PCA和SVD,遺憾的是,這兩種方法大多數(shù)時候不適用于邏輯回歸。邏輯回歸是由線性回歸演變而來,線性回歸的一個目的是通過求解參數(shù)來探究特征X與y之間的關(guān)系,而邏輯回歸也傳承了這個性質(zhì),我們常常希望通過邏輯回歸的結(jié)果,來判斷什么樣的特征與分類結(jié)果相關(guān), 因此我們希望保留特征的原貌。PCA和SVD的降維結(jié)果是不可解釋的,因此一旦降維后,我們就無法解釋特征和標簽之間的關(guān)系了。當然,在不需要探究特征與統(tǒng)計方法可以使用,但不是非常
36、必要之間關(guān)系的線性數(shù)據(jù)上,降維算法PCA和SVD也是可以使用的。既然降維算法不能使用,我們要用的就是特征選擇方法。邏輯回歸對數(shù)據(jù)的要求低于線性回歸,由于我們不是使用 最小二乘法來求解,所以邏輯回歸對數(shù)據(jù)的總體分布和方差沒有要求,也不需要排除特征之間的共線性,但如果我 們確實希望使用一些統(tǒng)計方法,比如方差,卡方,互信息等方法來做特征選擇,也并沒有問題。過濾法中所有的方 法,都可以用在邏輯回歸上。在一些博客中有這樣的觀點:多重共線性會影響線性模型的效果。對于線性回歸來說,多重共線性會影響比較大, 所以我們需要使用方差過濾和方差膨脹因子VIF(variance ination factor)來消除共
37、線性。但是對于邏輯回歸,其實不是非常必要,甚至有時候,我們還需要多一些相互關(guān)聯(lián)的特征來增強模型的表現(xiàn)。當然,如果我們無法通過其他 方式提升模型表現(xiàn),并且你感覺到模型中的共線性影響了模型效果,那懂得統(tǒng)計學的你可以試試看用VIF消除共線 性的方法,遺憾的是現(xiàn)在sklearn中并沒有提供VIF的功能。lrl2 = lrl2.fit(Xtrain,Ytrain) l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain) l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest)graph = l1,l
38、2,l1test,l2testcolor = "green","black","lightgreen","gray"label = "L1","L2","L1test","L2test"plt.figure(figsize=(6,6) for i in range(len(graph):plt.plot(np.linspace(0.05,1,19),graphi,colori,label=labeli) plt.legend(loc=4
39、) #圖例的位置在哪里?4表示,右下角plt.show()高效的嵌入法embedded但是更有效的方法,毫無疑問會是我們的embedded嵌入法。我們已經(jīng)說明了,由于L1正則化會使得部分特征對應 的參數(shù)為0,因此L1正則化可以用來做特征選擇,結(jié)合嵌入法的模塊SelectFromModel,我們可以很容易就篩選出 讓模型十分高效的特征。注意,此時我們的目的是,盡量保留原數(shù)據(jù)上的信息,讓模型在降維后的數(shù)據(jù)上的擬合效 果保持優(yōu)秀,因此我們不考慮訓練集測試集的問題,把所有的數(shù)據(jù)都放入模型進行降維。from sklearn.linear_model import LogisticRegression a
40、s LR from sklearn.datasets import load_breast_cancerimport numpy as npimport matplotlib.pyplot as pltfromfromsklearn.model_selection import cross_val_scoresklearn.feature_selection import SelectFromModeldata= load_breast_cancer()data.data.shapeLR_ = LR(solver="liblinear",C=0.9,random_state
41、=420)cross_val_score(LR_,data.data,data.target,cv=10).mean()X_embedded = SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)X_embedded.shape輕松一刻R vs Python,統(tǒng)計學 vs學習有許多學過R,或者和python一起學習R的小伙伴,曾向我問起各種各樣的統(tǒng)計學問題,因為R中有各種各樣 的統(tǒng)計功能,而python的統(tǒng)計學功能并不是那么全面。我也曾經(jīng)被小伙伴們發(fā)給“R風格python代碼”弄得暈頭轉(zhuǎn)向,也許R的代碼希
42、望看起來高大上,但python之美就是簡單明了(P.S. Python開發(fā)者十分有情懷,在jupyter中輸入 import this 可以查看python中隱含的彩蛋,python制作者所寫的詩歌”python之禪“,通篇贊美了python代碼的簡單,明快,容易閱讀之美,大家感的可以搜一搜看看翻譯)?;貧w正題,為什么python和R在統(tǒng)計學的功能上差異如此之大呢?也許大家聽說過,R是學統(tǒng)計學的人開發(fā) 的,因此整個思路都是統(tǒng)計學的思路,而python是學計算機的人開發(fā)的,因此整個思路都是計算機的思路,也無怪R在處理統(tǒng)計問題上比python強很多了,這兩種學科不同的思路強烈反應在統(tǒng)計學和學習的各
43、種建模流程當中。統(tǒng)計學的思路是一種“先驗”的思路,不管做什么都要先”檢驗“,先”滿足條件“,事后也要各種”檢驗“,以確保各 種數(shù)學假設(shè)被滿足,不然的話,理論上就無法得出好結(jié)果。而學習是一種”后驗“的思路,不管三七二十一,我先讓模型跑一跑,效果不好我再想辦法,如果模型效果好,我完全不在意什么共線性,殘差不滿足正態(tài) 分布,沒有啞變量之類的細節(jié),模型效果好大過天!作為一個非數(shù)學,非統(tǒng)計出身,從金融半路來敲python代碼的人,我完全欣賞學習的這種”后驗“思路:我們追求結(jié)果,不要過于在意那些需要滿足的先決條件。對我而言,統(tǒng)計學是學習窮盡所有都無法解決問題后的”救星“,如果學習不能解決問題,我會向統(tǒng)計學
44、尋求幫助,但我絕一開始就想著要去滿足各種統(tǒng)計要求。當然啦,如果大家是學統(tǒng)計學出身,寫R出身,大家也可以把學習當成是統(tǒng)計學用盡后的"救星"。統(tǒng)計學和學習是相輔相成的,大家要了解兩種思路的不同,以便在進入死胡同的時候, 可以從另一個學科的思路中找到出路。只要能夠解決問題的,都是好思路!看看結(jié)果,特征數(shù)量被減小到個位數(shù),并且模型的效果卻沒有下降太多,如果我們要求不高,在這里其實就可以停 下了。但是,能否讓模型的擬合效果更好呢?在這里,我們有兩種調(diào)整方式:1)調(diào)節(jié)SelectFromModel這個類中的參數(shù)threshold,這是嵌入法的閾值,表示刪除所有參數(shù)的絕對值低于這個閾 值
45、的特征?,F(xiàn)在threshold默認為None,所以SelectFromModel只根據(jù)L1正則化的結(jié)果來選擇了特征,即選擇了所 有L1正則化后參數(shù)不為0的特征。我們此時,只要調(diào)整threshold的值(畫出threshold的學習曲線),就可以觀察不同的threshold下模型的效果如何變化。一旦調(diào)整threshold,就不是在使用L1正則化選擇特征,而是使用模型的 屬性.coef_中生成的各個特征的系數(shù)來選擇。coef_雖然返回的是特征的系數(shù),但是系數(shù)的大小和決策樹中的feature_ importances_以及降維算法中的可解釋性方差explained_vairance_概念相似,其實都
46、是衡量特征的重要程度和貢獻度的,因此SelectFromModel中的參數(shù)threshold可以設(shè)置為coef_的閾值,即可以剔除系數(shù)小于threshold中輸入的數(shù)字的所有特征。fullx = fsx = threshold = np.linspace(0,abs(LR_.fit(data.data,data.target).coef_).max(),20)k=0for i in threshold:X_embedded = SelectFromModel(LR_,threshold=i).fit_transform(data.data,data.target) fullx.append(c
47、ross_val_score(LR_,data.data,data.target,cv=5).mean() fsx.append(cross_val_score(LR_,X_embedded,data.target,cv=5).mean() print(thresholdk,X_embedded.shape1)k+=1plt.figure(figsize=(20,5) plt.plot(threshold,fullx,label="full") plt.plot(threshold,fsx,label="feature selection") plt.x
48、ticks(threshold)plt.legend()plt.show()然而,這種方法其實是比較無效的,大家可以用學習曲線來跑一跑:當threshold越來越大,被刪除的特征越來越 多,模型的效果也越來越差,模型效果最好的情況下需要保證有17個以上的特征。實際上我畫了細化的學習曲線, 如果要保證模型的效果比降維前更好,我們需要保留25個特征,這對于現(xiàn)實情況來說,是一種無效的降維:需要 30個指標來判斷病情,和需要25個指標來判斷病情,對醫(yī)生來說區(qū)別不大。2)第二種調(diào)整方法,是調(diào)邏輯回歸的類LR_,通過畫C的學習曲線來實現(xiàn):fullx = fsx = C=np.arange(0.01,10.
49、01,0.5)for i in C:LR_ = LR(solver="liblinear",C=i,random_state=420)fullx.append(cross_val_score(LR_,data.data,data.target,cv=10).mean()X_embedded = SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)cross_val_score(LR_,X_embedded,data.target,cv=10).mean()繼續(xù)細化學習曲線:fullx =
50、 fsx = C=np.arange(6.05,7.05,0.005)for i in C:LR_ = LR(solver="liblinear",C=i,random_state=420)fullx.append(cross_val_score(LR_,data.data,data.target,cv=10).mean()X_embedded = SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)fsx.append(cross_val_score(LR_,X_embedded,da
51、ta.target,cv=10).mean()print(max(fsx),Cfsx.index(max(fsx)plt.figure(figsize=(20,5) plt.plot(C,fullx,label="full") plt.plot(C,fsx,label="feature selection") plt.xticks(C)plt.legend()plt.show()#驗證模型效果:降維之前LR_ = LR(solver="liblinear",C=6.069999999999999,random_state=420)cr
52、oss_val_score(LR_,data.data,data.target,cv=10).mean()#驗證模型效果:降維之后LR_ = LR(solver="liblinear",C=6.069999999999999,random_state=420)X_embedded = SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target) cross_val_score(LR_,X_embedded,data.target,cv=10).mean()X_embedded.shape這樣我們
53、就實現(xiàn)了在特征選擇的前提下,保持模型擬合的高效,現(xiàn)在,如果有一位醫(yī)生可以來為我們指點迷津,看 看剩下的這些特征中,有哪些是對針對病情來說特別重要的,也許我們還可以繼續(xù)降維。當然,除了嵌入法,系數(shù) 累加法或者包裝法也是可以使用的。比較麻煩的系數(shù)累加法fsx.append(cross_val_score(LR_,X_embedded,data.target,cv=10).mean()print(max(fsx),Cfsx.index(max(fsx)plt.figure(figsize=(20,5) plt.plot(C,fullx,label="full") plt.plot
54、(C,fsx,label="feature selection") plt.xticks(C)plt.legend()plt.show()系數(shù)累加法的原理非常簡單。在PCA中,我們通過繪制累積可解釋方差貢獻率曲線來選擇超參數(shù),在邏輯回歸中我 們可以使用系數(shù)coef_來這樣做,并且我們選擇特征個數(shù)的邏輯也是類似的:找出曲線由銳利變平滑的轉(zhuǎn)折點,轉(zhuǎn) 折點之前被累加的特征都是我們需要的,轉(zhuǎn)折點之后的我們都不需要。不過這種方法相對比較麻煩,因為我們要先 對特征系數(shù)進行從大到小的排序,還要確保我們知道排序后的每個系數(shù)對應的原始特征的位置,才能夠正確找出那 些重要的特征。如果要使用這樣
55、的方法,不如直接使用嵌入法來得方便。簡單快速的包裝法相對的,包裝法可以直接設(shè)定我們需要的特征個數(shù),邏輯回歸在現(xiàn)實中運用時,可能會有”需要58個變量”這種需 求,包裝法此時就非常方便了。不過邏輯回歸的包裝法的使用和其他算法一樣,并不具有特別之處,因此在這里就 不在贅述,具體大家可以參考03期:數(shù)據(jù)預處理和特征工程中的代碼。2.3 梯度下降:重要參數(shù)max_iter邏輯回歸的數(shù)學目的是求解能夠讓模型最優(yōu)化,擬合程度最好的參數(shù) 的值,即求解能夠讓損失函數(shù)最小化的值。對于二元邏輯回歸來說,有多種方法可以用來求解參數(shù) ,最常見的有梯度下降法(Gradient Descent),坐標下降法(Coordin
56、ate Descent),牛頓法(Newton-Raphson method)等,其中又以梯度下降法最為著名。每種方法都涉及復雜的數(shù)學原理,但這些計算在執(zhí)行的任務其實是類似的。2.3.1 梯度下降求解邏輯回歸我們以最著名也最常用的梯度下降法為例,來看看邏輯回歸的參數(shù)求解過程究竟實在做什么?,F(xiàn)在有一個帶兩個特征并且沒有截距的邏輯回歸,兩個特征所對應的參數(shù)分別為。下面這個華麗的平面就是我們的損失函數(shù)在以,和 為坐標軸的三維立體坐標系上的圖像?,F(xiàn)在,我們尋求的是損失函數(shù)的最小值,也就是圖像的最低點。那我們怎么做呢?我在這個圖像上隨機放一個小球,當我松手,這個小球就會順著這個華麗的平面滾落,直到滾到深的區(qū)域損失函數(shù)的最低點。為了嚴格這個小球的行為,我讓小球每次滾動的距離有限,不讓他一次性滾到最低點,并且最多只允許它滾動100步,還要記下它每次滾動的方向,直到它滾到圖像上的最低點??梢钥匆?,小
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年12月廣西玉林市陸川縣城鎮(zhèn)公益性崗位人員招聘1人備考筆試試題及答案解析
- 2025內(nèi)蒙古呼倫貝爾市大學生鄉(xiāng)村醫(yī)生專項計劃招聘3人模擬筆試試題及答案解析
- 2025華鈦科技招聘99人考試備考題庫及答案解析
- 2025河北興冀人才資源開發(fā)有限公司招聘護理助理90人參考考試題庫及答案解析
- 深度解析(2026)《GBT 25674-2010螺釘槽銑刀》(2026年)深度解析
- 2025貴州黔東南州天柱縣人民醫(yī)院第四批招聘編外合同制人員14人備考筆試題庫及答案解析
- 安全培訓課件
- 2025北方特種能源集團審計中心工作人員招聘備考筆試試題及答案解析
- 2025四川成都高新區(qū)婦女兒童醫(yī)院招聘技師、醫(yī)生助理招聘5人考試筆試模擬試題及答案解析
- 2025貴州安順市鎮(zhèn)寧自治縣總工會公益性崗位工作人員招聘1人參考考試題庫及答案解析
- 計算思維與人工智能 課件 第8章 智能圖像處理
- 探索絲綢之路課件
- 2025秋季國開《經(jīng)濟學(本)》期末考試題庫及答案
- (新教材)2026年人教版八年級下冊數(shù)學 24.3 數(shù)據(jù)的四分位數(shù) 課件
- 2025年甘肅省武威市涼州區(qū)大柳鎮(zhèn)選聘專業(yè)化管理大學生村文書筆試考試備考試題及答案解析
- 戥秤的課件教學課件
- 2025內(nèi)蒙古潤蒙能源有限公司招聘22人考試筆試備考試題及答案解析
- 虛擬現(xiàn)實行業(yè) VR 全景拍攝師崗位招聘考試試卷及答案
- 供應鏈金融業(yè)務操作與風險管理
- 2025年廣西學法用法考試試題及答案
- 2025全球包裝材料標準BRCGS第7版內(nèi)部審核全套記錄
評論
0/150
提交評論