Python梯度下降法實現二元邏輯回歸

2021-08-28 15:08:03 字數 3036 閱讀 8255

定義當函式值大於等於0.5時,結果為1,當函式值小於0.5時,結果為0.函式的值域是(0, 1)。

上圖為二元邏輯回歸的概率公式,則代價函式可以表示為

損失函式求偏倒數為

可以發現和線性回歸的結果是一樣的,只不過是假設函式h發生了變化。

為了避免過擬合,通常在代價函式後加乙個正則化項,針對二元邏輯回歸,填加正則化項,

1 2∑

j=1n

θj2\frac\sum_^\theta _^

21​∑j=

1n​θ

j2​這樣,隨時函式後就應該新增一項

1 m∑

j=1n

θj\frac\sum_^\theta _

m1​∑j=

1n​θ

j​

import numpy as np

import matplotlib.pyplot as plt

# 特徵數目

n =2

# 構造訓練集

x1 = np.arange(-2

.,2.

,0.02

)m =

len(x1)

x2 = x1 + np.random.randn(m)

# print(x1, x2)

one = np.full(m,

1.0)

y =1

/(np.full(m,

1.0)

+ np.exp(-(

0.1* np.random.randn(m)

-np.full(m,

0.6)+5

*x1 +

2* x2)))

# yy = np.array(

[np.

int(

round

(i))

for i in y]

)# 梯度下降法

theta = np.random.rand(n+1)

print

(theta)

x = np.vstack(

[np.full(m,1)

, x1, x2]).t

# 前一次的theta

pre = np.zeros(n +1)

diff =1e-

10max_loop =

10000

alpha =

0.01

lamda =

1now_diff =

0while max_loop >0:

#sum = np.zeros(n + 1)

sum= np.

sum([(

1/(1

.+ np.exp(

- np.dot(theta, x[i]))

)- y[i]

)*x[i]

for i in

range

(m)]

, axis=0)

# for i in range(m):

# sum += (1 / (1. + np.exp(- np.dot(theta, x[i]))) - y[i])*x[i]

theta = theta -

(alpha *

sum+ alpha * lamda * theta)

print

("還差 %d 次"

% max_loop,

"theta = "

, theta)

now_diff = np.linalg.norm(theta - pre)

if(now_diff <= diff)

:break

pre = theta

max_loop -=

1# 列印

print

("find theta : "

, theta,

"now_diff : "

, now_diff)

# 畫出平測試例子圖

x_1 = np.array(

[(x1[i]

, x2[i]

)for i in

range

(m)if y[i]==1

])x_0 = np.array(

[(x1[i]

, x2[i]

)for i in

range

(m)if y[i]==0

])plt.scatter(x_1[:,

0], x_1[:,

1], c=

'r', marker=

'o')

plt.scatter(x_0[:,

0], x_0[:,

1], c=

'g', marker=

'v')

# 畫出求得的模型圖

point1 = np.arange(-2

,2,0.02

)point2 =

(theta[0]

+ theta[1]

* point1)/(

-theta[2]

)plt.plot(point1, point2)

plt.xlabel(

'x1'

)plt.ylabel(

'x2'

)plt.show(

)

效果圖如下

機器學習基礎 梯度下降法之二元線性回歸

二元線性回歸 import numpy as np import matplotlib.pyplot as plt from numpy import genfromtxt from mpl toolkits.mplot3d import axes3d 可以用來畫3d圖 匯入資料 data genf...

Python 梯度下降法

接上篇部落格 題目描述 自定義乙個可微並且存在最小值的一元函式,用梯度下降法求其最小值。並繪製出學習率從0.1到0.9 步長0.1 時,達到最小值時所迭代的次數的關係曲線,根據該曲線給出簡單的分析。coding utf 8 created on tue jun 4 10 19 03 2019 aut...

python實現隨機梯度下降法

一 為什麼要提出隨機梯度下降演算法 也就是說每次更新權值 二 核心思想 對於權值的更新不再通過遍歷全部的資料集,而是選擇其中的乙個樣本即可 對於程式設計師來說你的第一反應一定是 在這裡需要乙個隨機函式來選擇乙個樣本,不是嗎?一般來說其步長的選擇比梯度下降法的步長要小一點,因為梯度下降法使用的是準確梯...