本文實例講述了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)
Logistic迴歸可以也可以用於多分類的,但是二分類的更為常用也更容易解釋。所以實際上最常用的就是二分類的Logistic迴歸。 LR分類器適用資料型態:數值型和標稱型資料。其優點是計算代價不高,易於理解和實現;其缺點是容易欠擬合,分類精度可能不高。
(二)Logistic迴歸數學推導
#1,梯度下降法求解Logistic迴歸
首先,要理解下述數學推導過程需要較多的導數解公式,可以參考「常用基本初等函數求導公式積分公式」。
假設有n個觀測樣本,觀測值分別為設
為給定條件下得到yi=1的機率。在同樣條件下得到yi=0的條件機率為
。於是,得到一個觀測值的機率為
-----此公式其實是綜合公式(1)得出
因為各項觀測獨立,所以它們的聯合分佈可表示為各邊際分佈的乘積:
(m表統計樣本數目)
,使上式取得最大值。
##最大似然估計就是求使上式取最大值時的θ,這裡可以使用梯度上升法求解,求得的θ就是要求的最佳參數。在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迴歸主要在流行病學中應用較多,比較常用的情形是探索某疾病的危險因素,根據危險因子預測某疾病發生的機率,等等。例如,想探討胃癌發生的危險因素,可以選擇兩組人群,一組是胃癌組,一組是非胃癌組,兩組人群肯定有不同的體徵和生活方式等。這裡的依變項就是是否胃癌,即“是”或“否”,自變數就可以包括很多了,例如年齡、性別、飲食習慣、幽門螺旋桿菌感染等。自變數既可以是連續的,也可以是分類的。
相關推薦:
以上是Python實作LR經典演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),