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

2022-05-10 14:42:07 字數 2442 閱讀 7848

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

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

範圍:0<=p<=1

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

條件概率:b發生的條件下,a發生的概率

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

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

假設測試資料為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:重複更新次數

defgradientdescent(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*gradient

return

theta

#生成測試資料

#numpoints:測試資料集行數,bias:偏向,variance:方差

defgendata(numpoints,bias,variance):

x = np.zeros(shape=(numpoints,2))

y = np.zeros(shape=numpoints)

for i in

range(0,numpoints):

x[i][0] = 1x[i][1] =i

#uniform隨機產生一些數字

y[i] = (i + bias) + random.uniform(0,1) +variance

return

x,yx,y = gendata(100,25,10)

m,n =np.shape(x)

print

(x,y)

theta =np.ones(n)

alpha = 0.0005theta = gradientdescent(x,y,theta,alpha,m,100000)

print(theta)

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

day13 Python資料基本型別

x除以y 取整除 返回除法的餘數 不等於 不等於 c a等價於c c a c a等價於c c a and or not 數字 布林值 真或假,1或0 字串 列表 基本操作 name list alex seven eric 或name list list alex seven eric 元祖 age...

DAY13 運算元據庫

一 資料庫 表 資料 sql語言不區分大小寫 1 建立資料庫 create database if not exists hill 2 刪除資料庫 drop database if exists hill 3 使用資料庫 二 資料庫列型別 數值 字串 時間日期 null tinyint smalli...

python之路 day13 模組

1,什麼是模組 模組就是系統功能的集合體,在python中,乙個py檔案就是乙個模組,例如 module.py 其中module叫做模組名 2,使用模組 2.1 import匯入模組 首次帶入模組發生三件事 1,建立乙個模組的命名空間 2,執行模組對應檔案,將產生的名字存放於1中的命名空間 3,在當...