python實現Logistic回歸

2021-10-18 22:11:22 字數 3319 閱讀 1100

本文不涉及邏輯回歸的具體原理,只通過python**實現演算法,並且沒有用到機器學習庫,根據演算法流程一步一步實現。

檔案中沒條資料有兩個屬性,和乙個標籤

# 資料準備

defloaddata()

: x =

y =fr =

open

('data.txt'

)for i in fr.readlines():

i = i.strip(

).split(

)# 分隔

[1.0

,float

(i[0])

,float

(i[1])

])# 輸入資料,增加乙個輸入1

int(i[2]

))# 標籤

return x, y

# sigmoid函式

defsigmoid

(x):

return

1.0/(1

+ np.exp(

-x))

採用梯度上公升演算法來更新權重,又可分為批梯度上公升演算法,一次性使用全部的資料值

# 批梯度下降,更新權重

defga

(x, y)

: x = np.mat(x)

# 轉化為numpy矩陣

y = np.mat(y)

.transpose(

)# 轉化為numpy矩陣

m, n = np.shape(x)

alpha =

0.001

epochs =

500 weights = np.ones(

(n,1))

for k in

range

(epochs)

: z = x * weights

h = sigmoid(z)

# 矩陣乘法

error =

(h - y)

# 殘差

weights = weights - alpha * x.transpose(

)* error

return weights

也可使用隨機梯度上公升演算法,一次使用乙個資料

# 隨機梯度下降,更新權重

defsga

(x, y)

: x = np.array(x)

m, n = np.shape(x)

alpha =

0.01

weights = np.ones(n)

# 初始化權重

for i in

range

(m):

h = sigmoid(

sum(x[i]

* weights)

) error = h - y[i]

weights = weights - alpha * error * x[i]

return weights

上面兩種方式的學習率都是固定的,也可是變化的

# 改進的隨機梯度下降

defsga1

(x, y, numiter=

150)

: m, n = np.shape(x)

x = np.array(x)

weights = np.ones(n)

for j in

range

(numiter)

: dataindex =

list

(range

(m))

for i in

range

(m):

alpha =4/

(1.0

+j+i)

+0.0001

randindex =

int(np.random.uniform(0,

len(dataindex)))

h = sigmoid(

sum(x[randindex]

*weights)

) error = h - y[randindex]

weights = weights - alpha * error * x[randindex]

del(dataindex[randindex]

)return weights

輸入資料完成分類任務

# 分類

defclassify

(x, weights)

: prob = sigmoid(

sum(x * weights)

)if prob >

0.5:

return

1else

:return

0

# 繪圖

defshow

(weights, x_train, y_train)

: x_train = np.array(x_train)

n = np.shape(x_train)[0

]# 座標

x1 =

y1 =

x2 =

y2 =

for i in

range

(n):

ifint

(y_train[i])==

1:1]

)2])

else:1

])2]

) fig = plt.figure(

) ax = fig.add_subplot(

111)

ax.scatter(x1, y1, s=

30, c=

'red'

, marker=

's')

ax.scatter(x2, y2, s=

30, c=

'green'

) x = np.arange(

-3.0

,3.0

,0.1

) weights = np.array(weights)

y =(-weights[0]

- weights[1]

* x)

/ weights[2]

ax.plot(x, y)

plt.xlabel(

'x1'

) plt.ylabel(

'x2'

) plt.show(

)

吳恩達深度學習 2 12向量化logistic回歸

1.不使用任何for迴圈用梯度下降實現整個訓練集的一步迭代。1 logistic回歸正向傳播的步驟 如果有m個訓練樣本,對乙個樣本進行 需要通過下面的方式計算出z值和啟用函式a值,然後用同樣的方法計算第二個和第三個樣本.以此類推,如果有m個樣本的話,這樣可能需要做上m次。可以看出,為了執行正向傳播的...

python實現線性回歸 python實現線性回歸

參考 機器學習實戰 machine learning in action 一 必備的包 一般而言,這幾個包是比較常見的 matplotlib,用於繪圖 numpy,陣列處理庫 pandas,強大的資料分析庫 sklearn,用於線性回歸的庫 scipy,提供很多有用的科學函式 我一般是用pip安裝,...

python爬蟲基礎實現 Python實現基礎爬蟲

初次使用urllib實現爬蟲的資料請求 urllib.request.urlopen url 發起get請求 urllib.parse.quote 將中文進行url編碼 from urllib.request importurlopen,urlretrieve,requestfrom urllib....