今天把感知機的演算法用python實現了一下。
主要依據的演算法流程是《統計學習方法》中關於感知機的演算法過程,具體如下。
隨機生成訓練資料,測試資料也可同樣方法生成
m:樣本的個數
n:每個樣本具有的特徵維數
y: ±1
'''x = np.random.random(
(m,n)
)#x2 = np.random.random((m,n))
y1 = np.ones(m)
#y2 = np.ones(m)*(-1)
start =
int(m /2)
y1 [start:
]= y1[start:]*
(-1)
return x, y1
defjudge_func
(self, x, y, w, b)
:'''
來判斷是否對引數進行更新的函式
x: xi
y: yi
w: wi
b: bi
'''value = y *
(np.dot(w, x)
+ b)
#print(value)
return value
defmlp_train
(self, x, y, w, b, yita)
:'''
感知機x: 輸入資料矩陣
y:輸入標籤矩陣
'''error_sample =
error_label =
for i in
range
(len
(x))
:if self.judge_func(x[i]
, y[i]
, w, b)
<=0:
w = w + yita * y[i]
*x[i]
b = b + yita * y[i]))
iflen
(error_sample)
>0:
self.mlp_train(error_sample,error_label, w, b, yita)
return w, b
deftest
(self, x_test, w, b)
: y_pre =
for i in
range
(len
(x_test)):
value = np.dot(w, x_test[i]
.t)+ b
y_temp = np.sign(value)
return y_pre
defcal_accuracy
(self, y_pre, y_test)
: num =
0for i in
range
(len
(y_pre)):
if y_pre[i]
== y_test[i]
: num +=
1 accuracy = num /
len(y_test)
return accuracy
if __name__ ==
'__main__'
: m, n =
1000,3
#輸入生成樣本的數量和維度
train = mlp(
) x_train, y_train = train.generate_data(m, n)
#m, n = np.shape(x)
#print(y_train.shape)
#print((np.transpose(x_train[1])).shape)
w = np.zeros((1
, n)
) b =
0 yita =
0.1 w, b = train.mlp_train(x_train, y_train,w,b,yita)
x_test, y_test = train.generate_data(m, n)
y_pre = train.test(x_test, w, b)
('感知機的準確率為: '
, train.cal_accuracy(y_pre, y_test)
)在實現的過程中其實有很長的時間在糾結關於引數w和b的維數的問題,因為不太清楚怎麼確定。
後來想明白了,w的維數應該和每乙個樣本的維度是一樣的,這樣才能保證樣本的在每乙個特徵上都有乙個權重引數,而最終的目標也是對這些權重引數擬合,其實有點像多項式的係數。
機器學習 感知機演算法
感知機 perception 是一種二類線性模型,主要用於分類問題。目標函式 f x sgn w x b 其中sgn為符號函式 其中向量w為目標函式向量,向量x為樣本。向量w 向量x 超平面 w x b 0 所構成的平面 向量w為超平面上的法向量。訓練集 t x1,y1 x2,y2 x3,y3 xn...
機器學習 感知機
感知機是一種簡單的二類分類的線性分類模型,用於處理可以線性可分的二分類問題。感知機對應於輸入空間 特徵空間 中將例項劃分為正負兩類的分離超平面,屬於判別模型。模型。從輸入空間到輸出空間有如下函式 f x s ign wtx b 其中w 為權值,b為偏執。生成的超平面為 wt x b 0 其中w 為超...
機器學習 感知機
r nx rn 輸出空間為y 輸入x x x x表示例項的特徵向量,對應於輸入空間的點 輸出y y表示示例的類別。由輸入空間到輸出空間的函式為 x si gn w x b f x sign w x b x w x表示w和x的點積i 1mwi xi w 1x1 w2x2 wnx n i 1mwixi ...