在引入問題前,我們先複習下數學裡面關於概率的基本概念
概率:對一件事發生的可能性衡量
範圍: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)
(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,在當...