學習目標:
損失函式推導過程:
最終優化函式:
min l(w,b)
推導過程:
假設空間 ,即特徵空間中的所有線性分類器。模型的複雜度主要體現在例項特徵向量的維度d上或者特徵數量上。
(1) 用python 自程式設計實現感知機模型,對訓練資料集進行分類,並對比誤分類點選擇次序不同對最終結果的影響。可採用函式式程式設計或物件導向的程式設計。
import numpy as np
class
perceptron
:def
__init__
(self, x, y, n, eta)
: self.x = x # 例項點
self.y = y # 例項點的分類
self.n = n # 例項點個數
self.eta = eta # 學習率
# 隨機梯度下降法
defsgd
(self)
:# 對w,b取初值
w = np.array([0
,0])
b =0# 記錄一次迭代是否有誤分類點
flag =
1while flag ==1:
flag =
0for i in
range
(n):
# 如果有誤分類點
if self.y[i]
*(w.dot(self.x[i]
)+ b)
<=0:
# 更新w,b,設定flag為1
w = w + self.eta * self.y[i]
* self.x[i]
b = b + self.eta * self.y[i]
flag =
1return w, b
if __name__ ==
"__main__"
: x = np.array([[
3,3]
,[4,
3],[
1,1]
])y = np.array([1
,1,-
1]) n =
3 eta =
1 perceptron = perceptron(x, y, n, eta)
w, b = perceptron.sgd(
)print
("模型引數w:"
, w,
"b:"
, b)
模型引數w:[1
1] b:
-3
(2)試呼叫sklearn.linear_model 的perceptron模組,對訓練資料集進行分類,並對比不同學習率h對模型學習速度及結果的影響。
)# fit用於訓練資料集
perceptron.fit(x, y)
# coef_:權重w,intercept_:b,n_iter:迭代次數
("w:"
, perceptron.coef_,
"\n"
,"b:"
, perceptron.intercept_,
"\n"
,"n_iter:"
, perceptron.n_iter)
# score用來評價訓練效果
res = perceptron.score(x, y)
("correct rate:{}"
.format
(res)
)
w:[[
1.0.
]] b:[-2
.] n_iter:
none
correct rate:
1.0
(3)附加題:對比傳統感知機演算法及其對偶形式的執行速度。
樣本數n
特徵維度
d原始形式的複雜度:o(d)
對偶形式的複雜度:o(n)
故,樣本量較大時使用原始形式;特徵維度較大時,使用對偶形式。
統計學習方法二 感知機
一 什麼是感知機?感知機是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1和 1二值。特性 1 二分類 2 線性分類模型 3 判別模型模型 4 假設空間 定義在特徵空間 有時可以理解為輸入空間 中的所有線性分類模型或線性分類器,即函式集合 4 學習目的 求出分離超平面二 感知...
感知機 統計學習方法
一 感知機適用問題以及它的輸入,輸出,求解方法 1 感知機 perceptron 適用於二類分類問題 該分類問題是線性可分問題 2 感知機模型是線性分類模型 3 感知機的幾何解釋,感知機對應的是乙個超平面 4 輸入 例項的特徵向量 5 輸出 例項的類別,取 1和 1二值 6 求解方法 有監督學習 給...
《統計學習方法》 感知機
最近終於有開始看 統計學習方法 了,畢竟無腦調參確實沒有什麼意義。一方面是作為看書的筆記,一方面作為比部落格或許能起到一點參考作用吧。希望可以日更。由輸入空間到輸出空間的函式 f x si gn w x b f x sign w cdot x b f x s ign w x b 稱為感知機。感知機是...