day-13 python庫實現簡單非線性回歸應用


一、概率

  在引入問題前,我們先復習下數學里面關於概率的基本概念

  概率:對一件事發生的可能性衡量

  范圍:0<=P<=1

  計算方法:根據個人置信區間;根據歷史數據;根據模擬數據。

  條件概率:B發生的條件下,A發生的概率

  

二、Logistic Regression(邏輯回歸)

1、問題引入

  處理二值數據時,如果一直8個測試數據集為如下所示,我們利用線性回歸方程,建立回歸方程曲線,圖形顯示,並不能很好的模擬回歸問題,也就是我們所說的欠回歸。

  

 

  如果繼續引入第9個測試點,我們發現欠回歸情況更加嚴重,因此我們需要引入一個新的回歸模型,來解決該類模型欠回歸問題。

   

 

2、簡單推導過程

  假設測試數據為X(x0,x1,x2···xn)

  要學習的參數為:Θ(θ0,θ1,θ2,···θn)

       向量表示:

  觀察Logistic函數曲線,我們發現在0到負無窮時,函數值趨向於0,0到正無窮時函數曲線趨向於1,且當z等於0時,函數值為0.5,於是我們可以引入該函數,對預測方程進行再次轉換,由數值上的計算轉換為0,1概率上的計算,即:

  

  

       不同於線性回歸模型:,定義一個新的預測函數為:

  於是問題從對Z函數求最優theta參數值,變為對h函數求最優theta參數值。對二值問題,可轉換為如下表述:

  

       根據一般方法,首先定義新的cost函數,然后根據cost函數來反向更新參數theta值,如下為新的cost函數:

  

       為了計算方便,我們對其轉化為:

      

       兩個式子可以進行合並,最終化簡為最終的cost函數:

      

       該式為非線性方程,通過求導來計算極值很復雜,我們引入之前的梯度下降算法,來不斷的估計新的參數值

      

       最終更新法則為:

      

3、實際編程應用

  如下為一個通用的非線性回歸方程,在利用梯度下降算法反向更新theta參數值時,沒有使用如下更新法則,而是使用通用方法,如下是具體代碼:

  

import numpy as np
import random

# 梯度下降算法來更新參數值
# x,y:測試數據集及標簽值,theta:學習的參數值,alpha:學習率,m:測試數據集個數,numIterations:重復更新次數
def gradientDescent(x,y,theta,alpha,m,numIterations):
    xTrans = np.transpose(x)
    for i in range(0,numIterations):
        hypothesis = np.dot(x,theta)
        loss = hypothesis - y
        # 定義一個通用的更新法則7
        cost = np.sum(loss**2)/(2*m)
if i % 10000 == 0:
print("Iteration %d | Cost:%f"%(i,cost)) gradient = np.dot(xTrans,loss)/m theta = theta - alpha*gradientreturn theta # 生成測試數據 # numPoints:測試數據集行數,bias:偏向,variance:方差 def genData(numPoints,bias,variance): x = np.zeros(shape=(numPoints,2)) y = np.zeros(shape=numPoints) for i in range(0,numPoints): x[i][0] = 1 x[i][1] = i # uniform隨機產生一些數字 y[i] = (i + bias) + random.uniform(0,1) + variance return x,y x,y = genData(100,25,10) m,n = np.shape(x) print(x,y) theta = np.ones(n) alpha = 0.0005 theta = gradientDescent(x,y,theta,alpha,m,100000) print(theta)

  最終的結果如下,結果顯示,隨着訓練次數的增加,目標函數也在不斷的減小:

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM