感知機模型
感知機模型損失函式
感知機模型損失函式的優化方法
感知機模型的演算法
感知機模型的演算法對偶形式
我們知道較早的分類模型——感知機(2023年)是二類分類的線性分類模型,也是後來神經網路和支援向量機的基礎。
感知機模型是一種二分類的線性分類器,只能處理線性可分的問題,感知機的模型就是嘗試找到乙個超平面將資料集分開,在二維空間這個超平面就是一條直線,在三維空間就是乙個平面。
這樣我們就得到了初步的感知機模型的損失函式。
我們研究可以發現,分子和分母都含有θ,當分子的θ擴大n倍時,分母的l2範數也會擴大n倍。也就是說,分子和分母有固定的倍數關係。那麼我們可以固定分子或者分母為1,然後求另乙個即分子自己或者分母的倒數的最小化作為損失函式,這樣可以簡化我們的損失函式。在感知機模型中,我們採用的是保留分子,即最終感知機模型的損失函式簡化為:
14 print("迭代次數為:%d w=[%d,%d] b=%d"%(j,w[0],w[1],b))
15 if y[i]*(np.dot(w,x[i])+b)<=0: #未被正確分類
16 #更新w,b
17 w=w+y[i]*x[i]
18 b=b+y[i]
19 count+=1
20 j+=1
21 if count==0:
22 f="f(x)=sign(%d*x+%d*x+%d)"%(w[0],w[1],b)
23 print("感知機模型為:%s"%f)
24 return w,b,f
25 w,b,f=train(x,y,w,b)
26
27 #畫分離超平面圖
28 def fun(x):
29 y=(-b-w[0]*x)/w[1]
30 return y
31 x_data=np.linspace(0,5)
32 y_data=fun(x_data)
33 plt.plot(x_data,y_data,color='r')
34 plt.title("perceptron")
35
36 #畫散點圖
感知機的對偶形式與原始形式並沒有多大的區別,運算的過程都是一樣的,但通過對偶形式會事先計算好一些步驟的結果並儲存到gray矩陣中,因此可以加快一些運算速度,資料越多節省的計算次數就越多,因此比原始形式更加的優化
import numpy as npimport matplotlib.pyplot as plt
x = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([[1], [1], [-1]])
# 建立gram矩陣
z = np.transpose(x)
m = np.dot(x,z)
print("構建的gram矩陣為:\n",m)
print("-------------------------")
a = np.zeros((x.shape[0], 1))
b = 0
def train(x,y,m,a,b):
length = x.shape[0]
while true:
count = 0
for i in range(length):
n = np.dot(m[i], a * y ) + b
if n* y[i] <= 0:
a[i] = a[i] + 1
b = b + y[i]
count += 1
if count == 0:
w = np.sum(x * a* y, axis=0)
print(w,b)
print("感知機模型:\nf(x) = sign(%dx+%dy+(%d))\n"%(w[0],w[1],b))
return w,b
w,b = train(x,y,m,a,b)
def fun(x):
y = (-b -w[0] * x) / w[1]
return y
x_data = np.linspace(0, 5, 100) # 建立等差陣列
感知機學習演算法的原始形式和對偶形式
原始形式和對偶形式是從兩個方面去計算梯度下降的問題,兩種方法找誤分點的個數是一樣的,區別在於,找到乙個誤分點時兩者接下來的計算方法 n為訓練集大小,n為特徵數量 1 對偶形式 掃一遍n,計算每條資料在之前被加了幾 ai 次 當 取1時,ai相當於第i組資料的梯度xiyi被加了幾次,找到乙個誤分點後直...
感知機學習演算法的對偶形式
感知機學習演算法的對偶形式,演算法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 ...
人工神經網路 感知機學習演算法的對偶形式
from matplotlib import pyplot as plt from mpl toolkits.mplot3d import axes3d import numpy as np from sklearn.neural network import mlpclassifier from ...