感知机模型-原始版本【python实现】
生活随笔
收集整理的這篇文章主要介紹了
感知机模型-原始版本【python实现】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概覽
感知機(perceptron)是一個二分類模型。對于輸入的特征向量,會輸出兩個類別(1和-1)。
perceptron是一個判別模型。(在1957年提出。)
數學模型
f(x)=sign(w?x+b)f(x)=sign(w·x+b)
- xx為輸出
- ww為權重
- bb為偏置(bias)
- signsign是符號函數
學習策略
- 定義: 數據集的線性可分性。給定一個數據集合,當能找到一個w?x+1=0w?x+1=0超平面,將整個數據集完全劃分。
感知機采用的是,任何一個點到超平面的距離。
|w?x+b|∥w∥|w·x+b|‖w‖
- 分母處為二范數
考慮誤判的點
- (yi,xi)(yi,xi):誤判就是該是正的適合變成負的,該是負的時候變成正的了
- yi>0yi>0 & w?xi+b<0w·xi+b<0
- yi<0yi<0 & w?xi+b>0w·xi+b>0
整理一下,就是
yi?(w?xi+b)<0yi?(w·xi+b)<0
對于所有的誤判求個和,那就是要保證下面這個函數最小。
L(w,b)=?∑xi∈Myi?(w?xi+b)L(w,b)=?∑xi∈Myi?(w·xi+b)
MM 為誤差分類的集合。
誤差函數特性;
- 非負
- 連續可導(在正確地方為0,原因是這個點沒有被求和啊;在誤差的點上關于w,b是一個線性函數(只是求和了而已),自然連續可導)
通過矩陣求導(在矩陣論會學到,但是提前的話,直接用普通函數式子的求導,算出來的結果是一樣的。)
得到w的梯度和b的梯度。
感知機的原始形式
在所有點集中,選點(xi,yi)(xi,yi),如果yi(w?xi+b)≤0yi(w·xi+b)≤0(有誤差),那就用w+yi?xiw+yi?xi來代替原來的w。同樣,用b+yib+yi代替原來的b。
當然,一般來說會對所加梯度上,乘上一個系數,作為學習系數。(即,順著改變的動力)。
這個算法會一直進行,直到最后沒有誤差就end。
代碼
import numpy as np import matplotlib.pyplot as pltdef draw(w, b, label='before'):fontsize = 15plt.figure(1, figsize=(8, 6))plt.clf() # clear current figureplt.title(label)plt.scatter(data[:, 0], data[:, 1], c=target, cmap=plt.cm.Set1, edgecolors='k')plt.xlabel('Sepal length', fontsize=fontsize)plt.ylabel('Sepal width', fontsize=fontsize)plt.xlim(x_min, x_max)plt.ylim(y_min, y_max)ys = list(map(lambda x: (-w[0] * x + b) / w[1], [x_min, x_max]))plt.plot([x_min, x_max], ys)plt.show()if __name__ == '__main__':data = np.array([[-1, 1], [1, 3], [0, -2]])target = [-1, 1, -1]shape = data.shape# random initialnp.random.seed(5)w = np.random.random(shape[-1])b = np.random.random()x_min, x_max = data[:, 0].min() - 0.5, data[:, 0].max() + 0.5y_min, y_max = data[:, 1].min() - 0.5, data[:, 1].max() + 0.5draw(w, b)lamb = 0.5MAX_TIME = 1000for t in range(MAX_TIME):change = Falsefor i in range(shape[0]):if target[i] * (np.dot(w, data[i]) + b) <= 0:w += lamb * target[i] * data[i]b += lamb * target[i]change = Trueif not change:breakdraw(w, b, 'after')總結
以上是生活随笔為你收集整理的感知机模型-原始版本【python实现】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【笔记】HMM在股票指数中的简单应用
- 下一篇: 【根据网上其他没有解决】XAMPP报错E