目錄
(一)認識Logistic回歸(LR)分類器" >(一)認識Logistic回歸(LR)分類器
(二)Logistic迴歸數學推導" >(二)Logistic迴歸數學推導
#1,梯度下降法求解Logistic迴歸" >#1,梯度下降法求解Logistic迴歸
2,向量化Vectorization求解" >2,向量化Vectorization求解
3,步長a的選擇" >3,步長a的選擇
4,特徵值歸一化" >4,特徵值歸一化
5,演算法最佳化--隨機梯度法" >5,演算法最佳化--隨機梯度法
(三)Python實作Logistic迴歸演算法" >(三)Python實作Logistic迴歸演算法
#machine learning Logistic regression" >#machine learning Logistic regression
#(四)Logistic迴歸應用" >#(四)Logistic迴歸應用
相關推薦:" >相關推薦:
首頁 後端開發 Python教學 Python實作LR經典演算法

Python實作LR經典演算法

Apr 19, 2018 pm 04:55 PM
python

本文實例講述了Python實作LR經典演算法。分享給大家供大家參考,如下:

(一)認識Logistic回歸(LR)分類器

首先,Logistic迴歸雖然名字裡帶“迴歸”,但它其實是一種分類方法,主要用於兩分類問題,利用Logistic函數(或稱為Sigmoid函數),自變數取值範圍為( -INF, INF),自變數的取值範圍為(0,1),函數形式為:


由於sigmoid函數的定義域是(-INF, INF),而值域為(0, 1)。因此最基本的LR分類器適合將兩分類(類別0,類別1)目標進行分類。 Sigmoid 函數是個很漂亮的「S」形,如下圖:


LR分類器( Logistic Regression Classifier)目的就是從訓練資料特徵學習出一個0/1分類模型--這個模型以樣本特徵的線性組合作為自變量,使用logistic函數將自變量映射到(0,1)。因此LR分類器的求解就是解一組權值是是名目變數--dummy,為常數,實際工程中常另x0=1.0。不管常數項有沒有意義,最好保留),並代入Logistic函數建構出一個預測函數:

#函數的值表示結果為1的機率,就是特徵屬於y=1的機率。因此對於輸入x分類結果為類別1和類別0的機率分別為:


當我們要判別一個新來的特徵屬於哪個類別時,按照下式求出一個z值:

(x1,x2,...,xn是某樣本資料的各個特徵,維度為n)

進而求出###---若大於0.5就是y=1的類,反之屬於y=0類。 (注意:這裡依然假設統計樣本是均勻分佈的,所以設閾值為0.5)。 LR分類器的這一組權值如何求得的呢?這就需要涉及到極大似然估計MLE和最佳化演算法的概念了,數學中最優化演算法常用的就是梯度上升(下降)演算法。 ######

Logistic迴歸可以也可以用於多分類的,但是二分類的更為常用也更容易解釋。所以實際上最常用的就是二分類的Logistic迴歸。 LR分類器適用資料型態:數值型和標稱型資料。其優點是計算代價不高,易於理解和實現;其缺點是容易欠擬合,分類精度可能不高。

(二)Logistic迴歸數學推導

#1,梯度下降法求解Logistic迴歸

首先,要理解下述數學推導過程需要較多的導數解公式,可以參考「常用基本初等函數求導公式積分公式」。

假設有n個觀測樣本,觀測值分別為為給定條件下得到yi=1的機率。在同樣條件下得到yi=0的條件機率為。於是,得到一個觀測值的機率為

-----此公式其實是綜合公式(1)得出

因為各項觀測獨立,所以它們的聯合分佈可表示為各邊際分佈的乘積:

(m表統計樣本數目)             

#上式稱為n個觀測的似然函數。我們的目標是能夠求出使這一似然函數的值最大的參數估計。於是,最大似然估計的關鍵就是求出參數

,使上式取得最大值。

對上述函數求對數:


##最大似然估計就是求使上式取最大值時的θ,這裡可以使用梯度上升法求解,求得的θ就是要求的最佳參數。在Andrew Ng的課程中將J(θ)取為下式,即:J(θ)=-(1/m)l(θ),J(θ)最小值時的θ則為要求的最佳參數。透過梯度下降法求最小值。 θ的初始值可以全部為1.0,更新過程為:

(j表樣本第j個屬性,共n個;a表示步長--每次移動量大小,可自由指定)



因此,θ(可以設初始值全部為1.0)的更新過程可以寫成:


#

 (i表示第i個統計樣本,j表樣本第j個屬性;a表示步長)

該公式將一直被迭代執行,直至達到收斂(在每一步迭代中都減​​小,如果某一步減少的值少於某個很小的值(小於0.001), 則其判定收斂)或某個停止條件為止(例如迭代次數達到某個指定值或演算法達到某個可以允許的誤差範圍)。

2,向量化Vectorization求解

#Vectorization是使用矩陣運算來取代for循環,以簡化計算過程,提高效率。如上式,Σ(...)是一個求和的過程,顯然需要一個for語句循環m次,所以根本沒有完整的實作vectorization。以下介紹向量化的過程:

約定訓練資料的矩陣形式如下,x的每一行為一條訓練樣本,而每一列為不同的特稱取值:


#g(A)的參數A為一列向量,所以實現g函數時要支援列向量作為參數,並傳回列向量。由上式可知hθ(x)-y可由g(A)-y一次計算求得。

θ更新過程可以改為:



綜上所述,Vectorization後θ更新的步驟如下:

(1)求A=X*θ(此處為矩陣乘法,X是(m,n 1)維向量,θ是(n 1,1)維列向量,A就是(m,1)維向量)

(2)求E=g(A)-y(E、y是(m,1)維度向量)

(3)求 (a表示步長)


3,步長a的選擇

a的取值也是確保梯度下降收斂的關鍵點。值太小則收斂慢,值太大則無法保證迭代過程收斂(邁過了極小值)。要確保梯度下降演算法正確運行,需要確保 J(θ)在每一步迭代中都會減少。如果步長a取值正確,那麼J(θ)應會越來越小。所以a的取值判斷準則是:如果J(θ)變小了表示取值正確,否則減少a的值。

選擇步長a的經驗為:選取一個a值,每次約3倍於前一個數,如果迭代不能正常進行(J增大了,步長太大,邁過了碗底)則考慮使用較小的步長,若收斂較慢則考慮增大步長,a取值範例如:

…, 0.001, 0.003, 0.01, 0.03, 0.1 , 0.3, 1…。

4,特徵值歸一化

#Logistic 迴歸也是一種迴歸演算法,多維特徵的訓練數據進行迴歸採取梯度法求解時其特徵值必須做scale,確保特徵的取值範圍在相同的尺度內計算過程才會收斂(因為特徵值得取值範圍可能相差甚大,如特徵1取值為(1000- 2000),特徵2取值為(0.1-0.2))。 feature scaling的方法可自訂,常用的有:

1) mean normalization (or standardization)

(X - mean(X ))/std(X),std(X)表示樣本的標準差

2) rescaling

(X - min) / (max - min)

5,演算法最佳化--隨機梯度法

梯度上升(下降)演算法在每次更新回歸係數時都需要遍歷整個數據集, 該方法在處理100個左右的數據集時尚可,但如果有數十億樣本和成千上萬的特徵,那麼該方法的計算複雜度就太高了。一種改進方法是一次僅用一個樣本點來更新迴歸係數,該方法稱為隨機梯度演算法。由於可以在新樣本到來時對分類器進行增量式更新,它可以在新資料到來時就完成參數更新,而不需要重新讀取整個資料集來進行批次運算,因而隨機梯度演算法是一個在線學習演算法。 (與「線上學習」相對應,一次處理所有資料被稱為是「批次」)。隨機梯度演算法與梯度演算法的效果相當,但具有更高的計算效率。

(三)Python實作Logistic迴歸演算法

#上節透過Andrew Ng的課程對J(θ) =-(1/m)l(θ)採取梯度下降法求解說明了Logistic迴歸的求解過程,本節Python實作演算法的過程仍直接對J(θ)採取梯度上升法或隨機梯度上升法求解,LRTrain物件同時實現了採取梯度上升法或隨機梯度上升法求解過程。

LR分類器學習套件中包含lr.py/object_json.py/test.py三個模組。 lr模組透過物件logisticRegres實現了LR分類器,支援gradAscent('Grad') and randomGradAscent('randomGrad')兩種求解方法(二選一,classifierArray只儲存一種分類求解結果,當然你也可以定義兩個classifierArray同時支援兩種求解方法)。

test模組中是利用LR分類器根據疝氣症預測病馬死亡率的應用。該資料存在一個問題--資料由30%的遺失率,這裡採用特殊值0替代,因為0不會影響LR分類器的權值更新。

訓練資料中樣本特徵值的部分缺失是很棘手的問題,很多文獻致力於解決這個問題,因為資料直接丟掉太貴,重新取得代價也昂貴。一些可選的資料遺失處理方法包括:

□使用可用特徵的平均值來填補缺失值;

##□使用特殊值來±真補缺失值,如-1;#

□忽略有缺失值的樣本;

□使用相似樣本的平均值添補缺失值;

□使用另外的機器學習演算法預測缺失值。

LR分類器演算法學習套件下載位址是:

#machine learning Logistic regression

#(四)Logistic迴歸應用

Logistic迴歸的主要用途:

尋找危險因素:尋找某一疾病的危險因子等;

預測:根據模型,預測在不同的自變數情況下,發生某一疾病或某種情況的機率有多大;

判別:實際上跟預測有些類似,也是根據模型,判斷某人屬於某病或屬於某種情況的機率有多大,也就是看一下這個人有多大的可能性是屬於某病。

Logistic迴歸主要在流行病學中應用較多,比較常用的情形是探索某疾病的危險因素,根據危險因子預測某疾病發生的機率,等等。例如,想探討胃癌發生的危險因素,可以選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群肯定有不同的體徵和生活方式等。這裡的依變項就是是否胃癌,即“是”或“否”,自變數就可以包括很多了,例如年齡、性別、飲食習慣、幽門螺旋桿菌感染等。自變數既可以是連續的,也可以是分類的。


相關推薦:

邏輯迴歸之梯形下降計算最值

LR深入理解

#機器學習常用演算法(LDA,CNN,LR)原理簡述

LR推導

以上是Python實作LR經典演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

Python vs. JavaScript:社區,圖書館和資源 Python vs. JavaScript:社區,圖書館和資源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

CentOS上PyTorch的GPU支持情況如何 CentOS上PyTorch的GPU支持情況如何 Apr 14, 2025 pm 06:48 PM

在CentOS系統上啟用PyTorchGPU加速,需要安裝CUDA、cuDNN以及PyTorch的GPU版本。以下步驟將引導您完成這一過程:CUDA和cuDNN安裝確定CUDA版本兼容性:使用nvidia-smi命令查看您的NVIDIA顯卡支持的CUDA版本。例如,您的MX450顯卡可能支持CUDA11.1或更高版本。下載並安裝CUDAToolkit:訪問NVIDIACUDAToolkit官網,根據您顯卡支持的最高CUDA版本下載並安裝相應的版本。安裝cuDNN庫:前

docker原理詳解 docker原理詳解 Apr 14, 2025 pm 11:57 PM

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

minio安裝centos兼容性 minio安裝centos兼容性 Apr 14, 2025 pm 05:45 PM

MinIO對象存儲:CentOS系統下的高性能部署MinIO是一款基於Go語言開發的高性能、分佈式對象存儲系統,與AmazonS3兼容。它支持多種客戶端語言,包括Java、Python、JavaScript和Go。本文將簡要介紹MinIO在CentOS系統上的安裝和兼容性。 CentOS版本兼容性MinIO已在多個CentOS版本上得到驗證,包括但不限於:CentOS7.9:提供完整的安裝指南,涵蓋集群配置、環境準備、配置文件設置、磁盤分區以及MinI

CentOS上PyTorch的分佈式訓練如何操作 CentOS上PyTorch的分佈式訓練如何操作 Apr 14, 2025 pm 06:36 PM

在CentOS系統上進行PyTorch分佈式訓練,需要按照以下步驟操作:PyTorch安裝:前提是CentOS系統已安裝Python和pip。根據您的CUDA版本,從PyTorch官網獲取合適的安裝命令。對於僅需CPU的訓練,可以使用以下命令:pipinstalltorchtorchvisiontorchaudio如需GPU支持,請確保已安裝對應版本的CUDA和cuDNN,並使用相應的PyTorch版本進行安裝。分佈式環境配置:分佈式訓練通常需要多台機器或單機多GPU。所

CentOS上PyTorch版本怎麼選 CentOS上PyTorch版本怎麼選 Apr 14, 2025 pm 06:51 PM

在CentOS系統上安裝PyTorch,需要仔細選擇合適的版本,並考慮以下幾個關鍵因素:一、系統環境兼容性:操作系統:建議使用CentOS7或更高版本。 CUDA與cuDNN:PyTorch版本與CUDA版本密切相關。例如,PyTorch1.9.0需要CUDA11.1,而PyTorch2.0.1則需要CUDA11.3。 cuDNN版本也必須與CUDA版本匹配。選擇PyTorch版本前,務必確認已安裝兼容的CUDA和cuDNN版本。 Python版本:PyTorch官方支

CentOS上如何更新PyTorch到最新版本 CentOS上如何更新PyTorch到最新版本 Apr 14, 2025 pm 06:15 PM

在CentOS上更新PyTorch到最新版本,可以按照以下步驟進行:方法一:使用pip升級pip:首先確保你的pip是最新版本,因為舊版本的pip可能無法正確安裝最新版本的PyTorch。 pipinstall--upgradepip卸載舊版本的PyTorch(如果已安裝):pipuninstalltorchtorchvisiontorchaudio安裝最新

See all articles