本文不涉及邏輯回歸的具體原理,只通過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....