日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sklearn学习(逻辑回归)

發(fā)布時(shí)間:2024/1/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sklearn学习(逻辑回归) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

邏輯回歸

  • 1 概述
    • 1.1 名為“回歸”的分類器
      • 優(yōu)點(diǎn):
    • 1.3 sklearn中的邏輯回歸
      • 邏輯回歸相關(guān)的類 說明
      • 其他會涉及的類 說明
    • 2.1 二元邏輯回歸的損失函數(shù)
      • penalty
    • 2.2 正則化:重要參數(shù)penalty & C
      • 2.2 梯度下降:重要參數(shù)max_iter

1 概述

1.1 名為“回歸”的分類器

回歸樹,隨機(jī)森林的回歸,無一例外他們都是區(qū)別于分類算法們,用來處理和預(yù)測連續(xù)型標(biāo)簽的算法。然而邏輯回歸,是一種名為“回歸”的線性分類器,其本質(zhì)是由線性回歸變化而來的,一種廣泛使用于分類問題中的廣義回歸算法。要理解邏輯回歸從何而來,得要先理解線性回歸。線
性回歸是機(jī)器學(xué)習(xí)中最簡單的的回歸算法,它寫作一個(gè)幾乎人人熟悉的方程:

被統(tǒng)稱為模型的參數(shù),其中 被稱為截距(intercept), θ 1n 被稱為系數(shù)(coefficient),這個(gè)表達(dá)式,其實(shí)就和我們小學(xué)時(shí)就無比熟悉的y=ax+b 是同樣的性質(zhì)。我們以使用矩陣來表示這個(gè)方程,其中x和θ 都可以被看做是一個(gè)列矩陣,則有:

線性回歸的任務(wù),就是構(gòu)造一個(gè)預(yù)測函數(shù) 來映射輸入的特征矩陣x和標(biāo)簽值y的線性關(guān)系,而構(gòu)造預(yù)測函數(shù)的核心就是找出模型的參數(shù): 和 ,著名的最小二乘就是用來求解線性回歸中參數(shù)的數(shù)學(xué)方法。通過函數(shù) ,線性回歸使用輸入的特征矩陣X來輸出一組連續(xù)型的標(biāo)簽值y_pred,以完成各種預(yù)測連續(xù)型變量的任務(wù)
(比如預(yù)測產(chǎn)品銷量,預(yù)測股價(jià)等等)。那如果我們的標(biāo)簽是離散型變量,尤其是,如果是滿足0-1分布的離散型
變量,我們要怎么辦呢?我們可以通過引入聯(lián)系函數(shù)(link function),將線性回歸方程z變換為g(z),并且令g(z)的值
分布在(0,1)之間,且當(dāng)g(z)接近0時(shí)樣本的標(biāo)簽為類別0,當(dāng)g(z)接近1時(shí)樣本的標(biāo)簽為類別1,這樣就得到了一個(gè)分
類模型。而這個(gè)聯(lián)系函數(shù)對于邏輯回歸來說,就是Sigmoid函數(shù):

線性回歸中 ,于是我們將
帶入,就得到了二元邏輯回歸模型的一般形式:

優(yōu)點(diǎn):

  • 邏輯回歸對線性關(guān)系的擬合效果好到喪心病狂,特征與標(biāo)簽之間的線性關(guān)系極強(qiáng)的數(shù)據(jù),比如金融領(lǐng)域中的
    信用卡欺詐,評分卡制作,電商中的營銷預(yù)測等等相關(guān)的數(shù)據(jù),都是邏輯回歸的強(qiáng)項(xiàng)。雖然現(xiàn)在有了梯度提升樹GDBT,比邏輯回歸效果更好,也被許多數(shù)據(jù)咨詢公司啟用,但邏輯回歸在金融領(lǐng)域,尤其是銀行業(yè)中的統(tǒng)治地位依然不可動搖(相對的,邏輯回歸在非線性數(shù)據(jù)的效果很多時(shí)候比瞎猜還不如,所以如果你已經(jīng)知道數(shù)據(jù)之間的聯(lián)系是非線性的,千萬不要迷信邏輯回歸)
  • 邏輯回歸計(jì)算快:對于線性數(shù)據(jù),邏輯回歸的擬合和計(jì)算都非常快,計(jì)算效率優(yōu)于SVM和隨機(jī)森林,親測表示在大型數(shù)據(jù)上尤其能夠看得出區(qū)別
  • 邏輯回歸返回的分類結(jié)果不是固定的0,1,而是以小數(shù)形式呈現(xiàn)的類概率數(shù)字:我們因此可以把邏輯回歸返回的結(jié)果當(dāng)成連續(xù)型數(shù)據(jù)來利用。比如在評分卡制作時(shí),我們不僅需要判斷客戶是否會違約,還需要給出確定的”信用分“,而這個(gè)信用分的計(jì)算就需要使用類概率計(jì)算出的對數(shù)幾率,而決策樹和隨機(jī)森林這樣的分類器,可以產(chǎn)出分類結(jié)果,卻無法幫助我們計(jì)算分?jǐn)?shù)(當(dāng)然,在sklearn中,決策樹也可以產(chǎn)生概率,使用接口
    predict_proba調(diào)用就好,但一般來說,正常的決策樹沒有這個(gè)功能)。
    另外,邏輯回歸還有抗噪能力強(qiáng)的優(yōu)點(diǎn)。福布斯雜志在討論邏輯回歸的優(yōu)點(diǎn)時(shí),甚至有著“技術(shù)上來說,最佳模型的AUC面積低于0.8時(shí),邏輯回歸非常明顯優(yōu)于樹模型”的說法。并且,邏輯回歸在小數(shù)據(jù)集上表現(xiàn)更好,在大型的數(shù)據(jù)集上,樹模型有著更好的表現(xiàn)。
    由此,我們已經(jīng)了解了邏輯回歸的本質(zhì),它是一個(gè)返回對數(shù)幾率的,在線性數(shù)據(jù)上表現(xiàn)優(yōu)異的分類器,它主要被應(yīng)用在金融領(lǐng)域。其數(shù)學(xué)目的是求解能夠讓模型最優(yōu)化的參數(shù) 的值,并基于參數(shù) 和特征矩陣計(jì)算出邏輯回歸的結(jié)果y(x)。注意:雖然我們熟悉的邏輯回歸通常被用于處理二分類問題,但邏輯回歸也可以做多分類。
  • 1.3 sklearn中的邏輯回歸

    邏輯回歸相關(guān)的類 說明

    linear_model.LogisticRegression 邏輯回歸回歸分類器(又叫l(wèi)ogit回歸,最大熵分類器)
    linear_model.LogisticRegressionCV 帶交叉驗(yàn)證的邏輯回歸分類器
    linear_model.logistic_regression_path 計(jì)算Logistic回歸模型以獲得正則化參數(shù)的列表
    linear_model.SGDClassifier 利用梯度下降求解的線性分類器(SVM,邏輯回歸等等)
    linear_model.SGDRegressor 利用梯度下降最小化正則化后的損失函數(shù)的線性回歸模型
    metrics.log_loss 對數(shù)損失,又稱邏輯損失或交叉熵?fù)p失
    linear_model.RandomizedLogisticRegression 隨機(jī)的邏輯回歸

    其他會涉及的類 說明

    metrics.confusion_matrix 混淆矩陣,模型評估指標(biāo)之一
    metrics.roc_auc_score ROC曲線,模型評估指標(biāo)之一
    metrics.accuracy_score 精確性,模型評估指標(biāo)之一
    2 linear_model.LogisticRegression
    class sklearn.linear_model.LogisticRegression (penalty=’l2’, dual=False, tol=0.0001, C=1.0,
    fit_intercept=True, intercept_scaling=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ù)

    衡量參數(shù) 的優(yōu)劣的評估指標(biāo),用來求解最優(yōu)參數(shù)的工具
    損失函數(shù)小,模型在訓(xùn)練集上表現(xiàn)優(yōu)異,擬合充分,參數(shù)優(yōu)秀
    損失函數(shù)大,模型在訓(xùn)練集上表現(xiàn)差勁,擬合不足,參數(shù)糟糕
    我們追求,能夠讓損失函數(shù)最小化的參數(shù)組合
    注意:沒有”求解參數(shù)“需求的模型沒有損失函數(shù),比如KNN,決策樹
    參數(shù) 說明

    penalty

    可以輸入"l1"或"l2"來指定使用哪一種正則化方式,不填寫默認(rèn)"l2"。
    注意,若選擇"l1"正則化,參數(shù)solver僅能夠使用”liblinear",若使用“l(fā)2”正則化,參數(shù)solver中
    所有的求解方式都可以使用。
    C C正則化強(qiáng)度的倒數(shù),必須是一個(gè)大于0的浮點(diǎn)數(shù),不填寫默認(rèn)1.0,即默認(rèn)一倍正則項(xiàng)。
    C越小,對損失函數(shù)的懲罰越重,正則化的效力越強(qiáng),參數(shù) 會逐漸被壓縮得越來越小。在很多書
    籍和博客的原理講解中, 被寫作 ,為了大家便于理解sklearn中的參數(shù),我將公式改寫成 ,
    更加直觀。
    邏輯回歸的損失函數(shù)是由最大似然法來推導(dǎo)出來的,具體結(jié)果可以寫作:
    其中, 表示求解出來的一組參數(shù),m是樣本的個(gè)數(shù), 是樣本i上真實(shí)的標(biāo)簽, 是樣本i上,基于參數(shù) 計(jì)算出來的邏輯回歸返回值, 是樣本i的取值。我們的目標(biāo),就是求解出使 最小的 取值。
    由于我們追求損失函數(shù)的最小值,讓模型在訓(xùn)練集上表現(xiàn)最優(yōu),可能會引發(fā)另一個(gè)問題:如果模型在訓(xùn)練集上表示優(yōu)秀,卻在測試集上表現(xiàn)糟糕,模型就會過擬合。雖然邏輯回歸和線性回歸是天生欠擬合的模型,但我們還是需要控制過擬合的技術(shù)來幫助我們調(diào)整模型,對邏輯回歸中過擬合的控制,通過正則化來實(shí)現(xiàn)。

    2.2 正則化:重要參數(shù)penalty & C

    正則化是用來防止模型過擬合的過程,常用的有L1正則化和L2正則化兩種選項(xiàng),分別通過在損失函數(shù)后加上參數(shù)向
    量 的L1范式和L2范式的倍數(shù)來實(shí)現(xiàn)。這個(gè)增加的范式,被稱為“正則項(xiàng)”,也被稱為"懲罰項(xiàng)"。損失函數(shù)改變,基
    于損失函數(shù)的最優(yōu)化來求解的參數(shù)取值必然改變,我們以此來調(diào)節(jié)模型擬合的程度。其中L1范數(shù)表現(xiàn)為參數(shù)向量中的每個(gè)參數(shù)的絕對值之和,L2范數(shù)表現(xiàn)為參數(shù)向量中的每個(gè)參數(shù)的平方和的開方值。
    其中 是我們之前提過的損失函數(shù),C是用來控制正則化程度的超參數(shù),n是方程中特征的總數(shù),也是方程中參數(shù)的總數(shù),j代表每個(gè)參數(shù)。在這里,J要大于等于1,是因?yàn)槲覀兊膮?shù)向量 中,第一個(gè)參數(shù)是 ,是我們的截距,它通常是不參與正則化的。
    L1正則化和L2正則化雖然都可以控制過擬合,但它們的效果并不相同。當(dāng)正則化強(qiáng)度逐漸增大(即C逐漸變小),參數(shù) 的取值會逐漸變小,但L1正則化會將參數(shù)壓縮為0,L2正則化只會讓參數(shù)盡量小,不會取到0。 在L1正則化在逐漸加強(qiáng)的過程中,攜帶信息量小的、對模型貢獻(xiàn)不大的特征的參數(shù),會比攜帶大量信息的、對模型有巨大貢獻(xiàn)的特征的參數(shù)更快地變成0,所以L1正則化本質(zhì)是一個(gè)特征選擇的過程,掌管了參數(shù)的“稀疏性”。L1正則化越強(qiáng),參數(shù)向量中就越多的參數(shù)為0,參數(shù)就越稀疏,選出來的特征就越少,以此來防止過擬合。因此,如果特征量很大,數(shù)據(jù)維度很高,我們會傾向于使用L1正則化。由于L1正則化的這個(gè)性質(zhì),邏輯回歸的特征選擇可以由Embedded嵌入法來完成。相對的,L2正則化在加強(qiáng)的過程中,會盡量讓每個(gè)特征對模型都有一些小的貢獻(xiàn),但攜帶信息少,對模型貢獻(xiàn)不大的特征的參數(shù)會非常接近于0。通常來說,如果我們的主要目的只是為了防止過擬合,選擇L2正則化就足夠了。但是如果選擇L2正則化后還是過擬合,模型在未知數(shù)據(jù)集上的效果表現(xiàn)很差,就可以考慮L1正則化。
    而兩種正則化下C的取值,都可以通過學(xué)習(xí)曲線來進(jìn)行調(diào)整。
    建立兩個(gè)邏輯回歸,L1正則化和L2正則化的差別就一目了然了:

    from sklearn.linear_model import LogisticRegression as LR from sklearn.datasets import load_breast_cancer import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score data = load_breast_cancer() X = data.data y = data.target data.data.shape lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000) lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000) #邏輯回歸的重要屬性coef_,查看每個(gè)特征所對應(yīng)的參數(shù) lrl1 = lrl1.fit(X,y) lrl1.coef_ (lrl1.coef_ != 0).sum(axis=1) lrl2 = lrl2.fit(X,y) lrl2.coef_

    可以看見,當(dāng)我們選擇L1正則化的時(shí)候,許多特征的參數(shù)都被設(shè)置為了0,這些特征在真正建模的時(shí)候,就不會出
    現(xiàn)在我們的模型當(dāng)中了,而L2正則化則是對所有的特征都給出了參數(shù)。
    究竟哪個(gè)正則化的效果更好呢?還是都差不多?

    l1 = [] l2 = [] l1test = [] l2test = []

    可見,至少在我們的乳腺癌數(shù)據(jù)集下,兩種正則化的結(jié)果區(qū)別不大。但隨著C的逐漸變大,正則化的強(qiáng)度越來越
    小,模型在訓(xùn)練集和測試集上的表現(xiàn)都呈上升趨勢,直到C=0.8左右,訓(xùn)練集上的表現(xiàn)依然在走高,但模型在未知
    數(shù)據(jù)集上的表現(xiàn)開始下跌,這時(shí)候就是出現(xiàn)了過擬合。我們可以認(rèn)為,C設(shè)定為0.9會比較好。在實(shí)際使用時(shí),基本
    就默認(rèn)使用l2正則化,如果感覺到模型的效果不好,那就換L1試試看。

    2.2 梯度下降:重要參數(shù)max_iter

    邏輯回歸的數(shù)學(xué)目的是求解能夠讓模型最優(yōu)化的參數(shù) 的值,即求解能夠讓損失函數(shù)最小化的 的值,而這個(gè)求解過程,對于二元邏輯回歸來說,有多種方法可以選擇,最常見的有梯度下降法(Gradient Descent),坐標(biāo)軸下降法(Coordinate Descent),牛頓法(Newton-Raphson method)等,每種方法都涉及復(fù)雜的數(shù)學(xué)原理,但這些計(jì)算在執(zhí)行的任務(wù)其實(shí)是類似的。
    以梯度下降法為例,我們來看看求解過程是如何完成的。下面這個(gè)華麗的平面就是我們的損失函數(shù)在輸入了一組特征矩陣和標(biāo)簽之后在三維立體坐標(biāo)系中的圖像。現(xiàn)在,我們尋求的是損失函數(shù)的最小值,也就是圖像的最低點(diǎn)(看起來像是深藍(lán)色區(qū)域的某處),一旦我們獲取了圖像在最低點(diǎn)的取值 ,在我們的損失函數(shù)公式中,唯一未知的就是我們的參數(shù)向量 了。

    Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420) for i in np.linspace(0.05,1,19):lrl1 = LR(penalty="l1",solver="liblinear",C=i,max_iter=1000)lrl2 = LR(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))lrl2 = lrl2.fit(Xtrain,Ytrain)l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain))l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest)) graph = [l1,l2,l1test,l2test] color = ["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),graph[i],color[i],label=label[i]) plt.legend(loc=4) #圖例的位置在哪里?4表示,右下角 plt.show()

    現(xiàn)在,我在這個(gè)圖像上隨機(jī)放一個(gè)小球,當(dāng)我松手,這個(gè)小球就會順著這個(gè)華麗的平面滾落,直到滾到深藍(lán)色的區(qū)域——損失函數(shù)的最低點(diǎn)。但是,小球不能夠一次性滾動到最低處,它的能量不足,所以每次最多只能走距離G。
    為了嚴(yán)格監(jiān)控這個(gè)小球的行為,我要求小球每次只能走0.05 * G,并且我要記下它每次走動的方向,直到它滾到圖像上的最低點(diǎn)。

    總結(jié)

    以上是生活随笔為你收集整理的sklearn学习(逻辑回归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。