李航的統計學習方法上寫的不是很詳細,這個部落格寫的還可以。**
自己嘗試把感知機對偶形式的**寫了一下,假設學習率
# -*- coding:utf-8 -*-
import numpy as np # 感知機對偶形式學習演算法demo
data = np.array([[3, 3, 1], [4, 3, 1], [1, 1, -1]]) #生成資料
x_data = data[:, :2]
y_data = data[:, -1]
def getgram(x_data): #計算得到gram矩陣
gram_matrix =
for i in range(x_data.shape[0]):
for j in range(x_data.shape[0]):
gram_matrix = np.array(gram_matrix)
gram_matrix.resize([x_data.shape[0], x_data.shape[0]])
return gram_matrix
#對偶形式的感知機學習演算法
n = np.array([0]*len(x_data))
key = true
while key:
key = false
for i in range(len(x_data)):
x_i = x_data[i, :]
y_i = y_data[i]
s = 0
for j in range(len(x_data)):
s += n[j]*y_data[j]*getgram(x_data)[j][i]+n[j]*y_data[j]
if y_i*s <= 0:
n[i]+=1
key = true
print("n的值:", n) # n中存放了每個樣本點被修改的次數
w_d = 0
b_d = 0
for i in range(len(x_data)): #根據每個樣本點的修改次數計算w_d和b_d的值
w_d += n[i]*y_data[i]*x_data[i]
b_d += n[i]*y_data[i]
print("最終w_d的值:", w_d)
print("最終b_d的值", b_d)
最後的答案和新版統計學習方法給的答案一樣。
感知機學習演算法的對偶形式
感知機學習演算法的對偶形式,演算法2.2參考李航 統計學習方法 書中第二章的演算法 clear all clcx 3,3 4,3 1,1 y 1,1,1 訓練資料集及標記 learnrate 1 學習率 0,1 alpha zeros 1,size x,1 b 0 alpha和b的初值 g x x ...
感知機學習演算法的原始形式和對偶形式
原始形式和對偶形式是從兩個方面去計算梯度下降的問題,兩種方法找誤分點的個數是一樣的,區別在於,找到乙個誤分點時兩者接下來的計算方法 n為訓練集大小,n為特徵數量 1 對偶形式 掃一遍n,計算每條資料在之前被加了幾 ai 次 當 取1時,ai相當於第i組資料的梯度xiyi被加了幾次,找到乙個誤分點後直...
ML 8 感知機演算法 傳統和對偶形式
感知機模型 感知機模型損失函式 感知機模型損失函式的優化方法 感知機模型的演算法 感知機模型的演算法對偶形式 我們知道較早的分類模型 感知機 1957年 是二類分類的線性分類模型,也是後來神經網路和支援向量機的基礎。感知機模型是一種二分類的線性分類器,只能處理線性可分的問題,感知機的模型就是嘗試找到...