梯度上公升法求解Logistic回歸

2021-08-21 04:52:17 字數 1893 閱讀 2140

對率函式hθ=1/1+e^-z

z=β^t(x;1)

p = (p^yi)*(p*(1-yi))

極大似然函式為πp=π(p^yi)*(p*(1-yi))

假定p=hθ(xi),則p=1-hθ(xi)

則πp=π(p^yi)*(p*(1-yi))=πhθ(xi)

^yi * (1-hθ(xi)

)^(1-yi)

兩邊同時取對數,則

lnp = ln[π

hθ(xi)

^yi * (1-hθ(xi))^(1-yi)]

=∑[yi*lnhθ(xi)

+ (1-yi)ln(1-hθ(xi))]

即l(θ) = ∑lnp=∑[yi*lnhθ(xi)

+ (1-yi)ln(1-hθ(xi))]

∂l/∂θ

i= ∑x

j(yi-

hθ(xi)

)θj = θj+α∑x

j(yi-

hθ(xi)

)式θj = θj+α∑xj

(yi-

hθ(xi)

)為批處理梯度上公升法,即θ的每一次更新均需要m個樣本的參與

實現如下:

public class logistic {

float tag;

float var;

float beta;

static chartpanel frame1;

static xyseries series1 = new xyseries("positive");

static xyseries series2 = new xyseries("negative");

static xyseries series3 = new xyseries("result");

public logistic() throws ioexception{

bufferedreader br=new bufferedreader(new filereader("c:\\e\\machinelearningdataset\\dataset3.txt"));

string line="";

listvar=new arraylist();

listtag=new arraylist();

while((line=br.readline())!=null){

string content=line.split(" ");

string tmp="";

for(int i=0;i擬合直線如圖所示:

用乙個樣本更新引數θ即為隨機梯度上公升演算法

θj = θj+αxj

(yi-

hθ(xi)

)上面部分**替換為

public void logistic_main(float x,float y,float beta,float a){

float beta_tmp=beta;

for(int i = 0; i < 5000; i++){

for(int k = 0; k < x.length; k++)

{for(int j=0;j擬合直線如圖所示

隨著迭代次數的增加,引數θ趨於穩定

參考:1.

2.《機器學習實戰》

Logistic回歸分類 隨機梯度上公升法

以下為改編的matlab的程式 clc clear 載入測試資料檔案,前兩列為座標值,後兩列為類標號 fileid fopen d matlabfile logistic logistic.txt ds textscan fileid,f f f fclose fileid 將資料轉為矩陣形式 da...

Logistic回歸演算法(梯度上公升)

logistic回歸演算法是乙個最優化演算法,回歸就是擬合的過程。logistic回歸的思想就是利用現有資料對分類邊界建立線性回歸公式,今天我們用這個演算法來解決二值分類問題。from numpy import def loaddataset datamat labelmat fr open tes...

Logistic回歸(隨機梯度上公升)

由於梯度上公升優化演算法在每次更新資料集時都需要遍歷整個資料集,計算複雜都較高,這裡有乙個隨機梯度上公升演算法也可以求得回歸係數,這種演算法一次只用乙個樣本點來更新回歸係數。def stocgradascent0 datamatrix,classlabels m,n shape datamatrix...