資料集來自mnist資料集,主要利用numpy裡的matrix矩陣計算。演算法的實現主要在於對引數w和b的求解。演算法的推導過程參考李航《統計學習方法》,推導最優化函式然後更新引數的過程。
import numpy as np
import pandas as pd
import time
defdata_load
(filename)
:'''
:param filename:
:return: dataarr,labelarr
'''print
('start read file'
) dataarr,labelarr =
,with
open
(filename,
'r')
as f:
lines = f.readlines(
)for line in lines:
line = line.strip(
).split(
',')
ifint
(line[0]
)>=5:
1)else:-
1)[int
(num)
/255
for num in line[1:
]])print
('end'
)return dataarr,labelarr
defperception
(dataarr,labelarr,
iter=50
,lr=
0.001):
datamat = np.mat(dataarr)
m,n = datamat.shape
labelmat = np.mat(labelarr)
.t w = np.zeros((1
,n))
b =0# loss = 0
for k in
range
(iter):
loss =
0for i in
range
(len
(dataarr)):
x_i = datamat[i]
y_i = labelmat[i]
if y_i *
(w * x_i.t + b)
<=0:
w = w + lr * y_i * x_i
b = b + lr * y_i
new_y = w * x_i.t + b
loss +=
abs(new_y - y_i)
print
('iter:{}'
.format
(k))
return w,b
defdata_test
(dataarr,labelarr,w,b)
: datamat = np.mat(dataarr)
labelmat = np.mat(labelarr)
.t sum
=len
(dataarr)
rigsum =
0for i in
range
(len
(dataarr)):
x_i = datamat[i]
y_i = labelmat[i]
result =-1
* y_i *
(w * x_i.t + b)
if result <=0:
rigsum +=
1return rigsum/
sum*
100if __name__ ==
'__main__'
: dataarr, labelarr = data_load(
'../dataset/mnist_train.csv'
) start = time.time(
) w,b = perception(dataarr,labelarr)
end = time.time(
)print
(data_test(dataarr,labelarr,w,b)
)print
(end - start)
機器學習 感知機模型
感知機模型,主要的思想是用乙個函式,通過不斷的調節權值和偏置的數值,將乙個線性可分的集合分類 感知機演算法 fx sign w x b sign 1 x 0,1 x 0 對於最優的w,b的值,採用了損失函式 l w,b sum xi 屬於 m yi w xi b m 為錯誤分類點的集合 感知機學習演...
機器學習 感知機模型
目錄感知機 perceptron 是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1 和 1 二值.感知機對應於輸入空間 特徵空間 中將例項劃分為正負兩類的分離超平面,屬於判別模型.感知機學習旨在求出將訓練資料進行線性劃分的分離超平面,為此匯入基於誤分類的損失函式,利用梯度下...
機器學習筆記 感知機模型
knn演算法matlab實現 感知機模型 感知機介紹 感知機 假設輸入空間 特徵空間 是 chi subseteq r n 輸出空間是 y 輸入 x in chi 表示例項的特徵向量,對應於輸入空間 特徵空間 的點 輸出 y in gamma 表示例項的類別 由輸入空間到輸出空間的函式 f x si...