最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python機器學習之邏輯回歸

 更新時間:2021年05月11日 09:51:26   作者:Flechazo_z  
這篇文章主要介紹了Python機器學習之邏輯回歸,文中有非常詳細的代碼示例,對正在學習Python的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、題目

1.主題:邏輯回歸

2.描述:假設(shè)你是某大學招生主管,你想根據(jù)兩次考試的結(jié)果決定每個申請者的錄取
機會?,F(xiàn)有以往申請者的歷史數(shù)據(jù),可以此作為訓練集建立邏輯回歸模型,并用
其預(yù)測某學生能否被大學錄取。

3.數(shù)據(jù)集:文件 ex2data1.txt ,第一列、第二列分別表示申請者兩次
考試的成績,第三列表示錄取結(jié)果(1 表示錄取,0 表示不錄?。?/p>

二、目的

1.理解邏輯回歸模型

2.掌握邏輯回歸模型的參數(shù)估計算法

三、平臺

1.硬件:計算機

2.操作系統(tǒng):WINDOWS

3.編程軟件:Pycharm

4.開發(fā)語言:python

四、基本原理

注:基本原理是我們在學習邏輯回歸過程中的一些總結(jié),包括為什么要選擇對數(shù)損失函數(shù)等。

4.1 邏輯回歸

邏輯回歸就是將樣本的特征可樣本發(fā)生的概率聯(lián)合起來,概率就是一個數(shù),所以就是解決分類問題,一般解決二分類問題。
對于線性回歸中,f ( x ) = w T x + b ,這里 f ( x ) 的范圍為[ − ∞ , + ∞ ],說明通過線性回歸中我們可以求得任意的一個值。對于邏輯回歸來說就是概率,這個概率取值需要在區(qū)間[0,1]內(nèi),通常我們使用Sigmoid函數(shù)表示。

Sigmoid函數(shù)其表達式為(2)

在這里插入圖片描述

最終我們可以通過Sigmoid函數(shù)求出對于每組自變量使得因變量預(yù)測為1的概率P;

即:

在這里插入圖片描述

(當P>0.5時預(yù)測為1,小于0.5為0)
在分類情況下,經(jīng)過學習后的LR分類器其實就是一組權(quán)值θ ,當有測試樣本輸入時,這組權(quán)值與測試數(shù)據(jù)按照加權(quán)得到

在這里插入圖片描述

之后按照Sigmoid函數(shù)的形式求出

在這里插入圖片描述

從而去判斷每個測試樣本所屬的類別。

4.2 損失函數(shù)

實驗一我們做線性回歸模型時,給出了線性回歸的代價函數(shù)的形式(誤差平方和函數(shù)),具體形式如:

在這里插入圖片描述

但是并不能應(yīng)用到邏輯回歸中,這是因為LR的假設(shè)函數(shù)的外層函數(shù)是Sigmoid函數(shù),Sigmoid函數(shù)是一個復(fù)雜的非線性函數(shù),這就使得我們將邏輯回歸的假設(shè)函數(shù)

在這里插入圖片描述

帶入上式時,我們得到的 是一個非凸函數(shù),如下圖:

在這里插入圖片描述

因此,此處我們需要重新考慮損失函數(shù);
在邏輯回歸中,我們最常用的損失函數(shù)為對數(shù)損失函數(shù),對數(shù)損失函數(shù)可以為LR提供一個凸的代價函數(shù),有利于使用梯度下降對參數(shù)求解。對數(shù)函數(shù)圖像如圖:

在這里插入圖片描述

藍色的曲線表示的是對數(shù)函數(shù)的圖像,紅色的曲線表示的是負對數(shù) 的圖像,該圖像在0-1區(qū)間上有一個很好的性質(zhì),如圖粉紅色曲線部分。在0-1區(qū)間上當z=1時,函數(shù)值為0,而z=0時,函數(shù)值為無窮大。這就可以和代價函數(shù)聯(lián)系起來,在預(yù)測分類中當算法預(yù)測正確其代價函數(shù)應(yīng)該為0;當預(yù)測錯誤,我們就應(yīng)該用一個很大代價(無窮大)來懲罰我們的學習算法,使其不要輕易預(yù)測錯誤。
因此,我們重新定義邏輯回歸的代價函數(shù)為:


在這里插入圖片描述

損失函數(shù)的求解為:

在這里插入圖片描述

五、實驗步驟

1.數(shù)據(jù)可視化

在python中通過文件導入數(shù)據(jù),并使用matlibplot工具建立對應(yīng)散點圖:

在這里插入圖片描述

需要注意的是,我們的theta是三元組,θ0對應(yīng)的X特征值固定為1,因此讀取數(shù)據(jù)時,如上圖最左側(cè)加入一個1;

在這里插入圖片描述

可以看到,被錄取與不被錄取的數(shù)據(jù)有較為清晰的一個界限,接下來我們要求解的就是這條界線;

2. 將線性回歸參數(shù)初始化為0,計算代價函數(shù)(cost function)的初始值

根據(jù)基本原理中的代價計算公式,這里將sigmoid、損失公式代碼化:

在這里插入圖片描述

將theta初始化為(0,0,0)后,直接調(diào)用cost函數(shù)求值:

在這里插入圖片描述

得到代價函數(shù)初始值:

在這里插入圖片描述

3. 選擇一種優(yōu)化方法求解邏輯回歸參數(shù)

(1)梯度下降法

我們選擇先用梯度下降法來觀察theta參數(shù)結(jié)果;
梯度下降算法代碼實現(xiàn)如圖:

在這里插入圖片描述

X:對于線性回歸中的常量b,我們可以將它的系數(shù)視為1,然后和變量x組成一個m行3列的矩陣,其中m是數(shù)據(jù)規(guī)模,這個矩陣就是X。
Y:一個m行1列的矩陣,對應(yīng)是否錄取。
alpha:學習率
第一步,將我們的Θ初始化為[[0][0][0]]。
第二步,對于給定的步長alpha和此時的梯度gradient,更新我們的theta。然后計算此時thrta對應(yīng)的梯度更新gradient。
第三步,重復(fù)第二步30萬次
第四步,返回theta,即為我們線性回歸的參數(shù)。

但是,對于邏輯回歸來說,這里遇到了一個問題,那就是alpha和迭代次數(shù)的取值,如果alpha過小,損失函數(shù)將收斂的非常慢,迭代次數(shù)達到40萬時才勉強收斂,但如果alpha過大,又會導致過大的步長使得準確率下降;
alpha = 0.001時的收斂函數(shù),在50萬次時收斂: 0.005時在25萬次時收斂;

在這里插入圖片描述

而如果alpha繼續(xù)增大(如0.01),將導致不夠準確,其界限與收斂圖形如下:

在這里插入圖片描述

(界限太差,僅80%準確率,且需要20萬次迭代)
因此,我們在運行該數(shù)據(jù)時需要運行稍長的時間;alpha=0.005,迭代次數(shù)為30萬時可以得到一組回歸參數(shù):

在這里插入圖片描述

它的劃分邊界如圖所示,其準確率為92%:該參數(shù)的劃分準確率計算方法如下:

在這里插入圖片描述

測試準確率:

在這里插入圖片描述

比較簡單,預(yù)測正確則加一,最后除以全部樣本數(shù)。

(2)牛頓迭代法

因為上述的迭代下降法所需迭代次數(shù)過多,因此這里使用一種優(yōu)化方法來求解參數(shù);

方法介紹

牛頓迭代法的原理較為復(fù)雜,因此不在這里寫出來。
對比這牛頓迭代法方法與梯度下降法的參數(shù)更新公式可以發(fā)現(xiàn),兩種方法不同在于牛頓法中多了一項二階導數(shù),這項二階導數(shù)對參數(shù)更新的影響主要體現(xiàn)在 改變參數(shù)更新方向上。

在這里插入圖片描述

如圖所示,紅色是牛頓法參數(shù)更新的方向,綠色為梯度下降法參數(shù)更新方向,因為牛頓法考慮了二階導數(shù),因而可以找到更優(yōu)的參數(shù)更新方向,在每次更新的步幅相同的情況下,可以比梯度下降法節(jié)省很多的迭代次數(shù)。
迭代過程:

在這里插入圖片描述

代碼實現(xiàn)

在這里插入圖片描述

h值為sigmoid函數(shù)求得的概率;
J為一階偏導數(shù)
H為Hession矩陣(海森矩陣),二階偏導數(shù)

牛頓迭代法得到的theta:

在這里插入圖片描述

優(yōu)點

對于同樣的學習率alpha = 0.005,cost僅需要1000次迭代就差不多收斂了;
而如果放大alpha,如alpha = 0.5,那么它只需要迭代10次即可收斂。

在這里插入圖片描述

并且準確率保持在89%(數(shù)據(jù)較?。?;

3. 某學生兩次考試成績分別為 42、85,預(yù)測其被錄取的概率

這里直接使用sigmoid函數(shù)以及牛頓迭代法求得的theta來進行其概率的計算:

在這里插入圖片描述

得到結(jié)果:

在這里插入圖片描述

即,y=1的概率為0.65145509,也就是被錄取的概率

4. 畫出分類邊界

在上面已經(jīng)畫出了梯度下降法的分類邊界,這里給出牛頓迭代法的邊界

在這里插入圖片描述

到此這篇關(guān)于Python機器學習之邏輯回歸的文章就介紹到這了,更多相關(guān)Python邏輯回歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用Python在2秒內(nèi)評估國際象棋位置詳解

    如何使用Python在2秒內(nèi)評估國際象棋位置詳解

    關(guān)心編程語言的使用趨勢的人都知道,最近幾年,國內(nèi)最火的兩種語言非Python與Go莫屬,下面這篇文章主要給大家介紹了關(guān)于如何使用Python在2秒內(nèi)評估國際象棋位置的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Python進行PDF文件拆分的示例詳解

    Python進行PDF文件拆分的示例詳解

    在日常生活中,我們常常會遇到大型的PDF文件,難以發(fā)送,將PDF拆分成多個小文件是一個實用的解決方案,下面我們就來看看如何使用Python實現(xiàn)PDF文件拆分吧
    2025-02-02
  • Python?reversed函數(shù)用法小結(jié)

    Python?reversed函數(shù)用法小結(jié)

    reversed函數(shù)是Python中的內(nèi)置函數(shù)之一,是對給定的序列返回一個逆序序列的迭代器,需要通過遍歷/list/next()等方法獲取作用后的值,本文給大家介紹Python?reversed函數(shù)及用法,感興趣的朋友一起看看吧
    2023-10-10
  • python如何實現(xiàn)代碼檢查

    python如何實現(xiàn)代碼檢查

    這篇文章主要介紹了python如何實現(xiàn)代碼檢查,如果代碼不規(guī)范,亂七八糟的,被小伙伴打死或者熬夜找bug事小,影響項目進度或者破壞項目結(jié)構(gòu)就完蛋了,需要的朋友可以參考下
    2019-06-06
  • Python使用PyMuPDF實現(xiàn)添加PDF水印

    Python使用PyMuPDF實現(xiàn)添加PDF水印

    在日常工作中,我們經(jīng)常需要對PDF文件進行處理,其中一項常見的需求是向PDF文件添加水印,本文將介紹如何使用Python編程語言和PyMuPDF庫在PDF文件中添加水印,感興趣的可以了解一下
    2023-08-08
  • python中的字符串類型解讀

    python中的字符串類型解讀

    這篇文章主要介紹了python中的字符串類型,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python基于plotly實現(xiàn)畫餅狀圖代碼實例

    python基于plotly實現(xiàn)畫餅狀圖代碼實例

    這篇文章主要介紹了python基于plotly實現(xiàn)畫餅狀圖代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • Python如何輕松實現(xiàn)在Excel工作表中插入行與列

    Python如何輕松實現(xiàn)在Excel工作表中插入行與列

    Excel表格的編輯是數(shù)據(jù)處理中的常見需求,無論是添加新的數(shù)據(jù)列,還是插入空白行以分隔內(nèi)容,下面小編就來和大家講講如何 通過Python代碼在Excel中插入行和列吧
    2025-05-05
  • Python淺復(fù)制中對象生存周期實例分析

    Python淺復(fù)制中對象生存周期實例分析

    這篇文章主要介紹了Python淺復(fù)制中對象生存周期,結(jié)合實例形式分析了Python面向?qū)ο笾械臏\復(fù)制操作時對象的生命周期問題,需要的朋友可以參考下
    2018-04-04
  • 基于python實現(xiàn)自動化文件移動工具

    基于python實現(xiàn)自動化文件移動工具

    在現(xiàn)代辦公和數(shù)據(jù)處理環(huán)境中,文件的頻繁遷移和整理是一項常見且耗時的任務(wù),本文將詳細介紹一個基于Python的自動化文件遷移工具,可以實時監(jiān)控指定文件夾,需要的可以了解下
    2025-07-07

最新評論

呼图壁县| 景东| 武强县| 泰来县| 肥东县| 五峰| 周宁县| 焉耆| 芜湖县| 龙里县| 嘉荫县| 琼中| 新津县| 鄂伦春自治旗| 天等县| 桐庐县| 南昌县| 永福县| 库伦旗| 漯河市| 揭阳市| 平山县| 定陶县| 鲁甸县| 揭西县| 区。| 安塞县| 台北县| 探索| 哈尔滨市| 大名县| 兰州市| 子洲县| 阳城县| 平陆县| 双江| 内黄县| 封丘县| 社会| 新和县| 青州市|