(1)單層感知機
1. 概念介紹:
假設輸入空間(特徵空間)是 ,輸入空間是Y={+1,-1}. 輸入 表示例項的特徵向量,對於應於輸入空間(特徵空間)的點;輸出表示例項的類別.由輸入空間到輸出空間的如下函式:
稱為感知機。其中,w和b為感知機模型引數,叫做權值或者權值向量,叫做偏置,表示w和x的內積,sign是符合函式,即
感知機一種線性分類模型,屬於判別模型。
單層感知機形象化理解:
感知機的幾何解釋:線性方程
對應於特徵空間的中的一個超平面S,其中w是超平面的法向量,b是超平面的截距,這個超平面將特殊空間劃分為兩部分,位於兩部分的點(特徵向量)分別被分為正、負兩類。因此,超平面S成為分離超平面,如圖所示:
2. 感知機的學習策略
2.1關於資料集的線性可分性
定義(資料集的線性可分性)給定一個數據集 ,其中,,如果存在某個超平面S能夠將資料集的正例項點和負例項點完全正確地劃分到超平面的兩側,即對於所有的
2.2感知機的學習策略
假設訓練資料集是線性可分的,感知機學習目標的要求是求得一個能夠將訓練集正例項點和負例項點完全分開的分離超平面。為了找到這樣的超平面,需要知道感知機模型引數w和b,需要確定一個學習策略,即定義經驗損失函式()並將損失函式極小化。
損失函式的一個自然選擇是誤分類點的總數,但是,這樣的損失函式不是引數w和b的連續損失函式,不易優化。我們需要轉變思路,可以使用誤分類點到超平面的總距離來計算損失函式。思路如下:
首先寫入輸入空間中任一點到超平面的距離:
這裡,是w的的範數。
對於正確分類的點滿足,而對於那些誤分類的資料來說,滿足,因為誤分類點線性不可能,那麼誤分類點到超平面S的距離為:
這樣,假設超平面S的誤分類點的集合為M,那麼所有的誤分類點到超平面S的總距離為
不考慮,就得到感知機學習的損失函式。
給定訓練資料集
其中,,,感知機學習的損失函式定義為
其中M為誤分類點的集合,這個損失函式就是感知機學習的經驗風險函式。
損失函式是非負的,如果沒有誤分類點,損失函式值是0,而且,誤分類點越少,誤分類點離超平面的就越近,損失函式值就越小。一個特定的樣本點的損失函式:在誤分類時是引數為w,b的線性函式,在正確分類時0,因此,給定訓練資料集T,損失函式是w,b的連續可導函式。
感知機學習的策略就是在假設空間中選取損失函式式最小的模型引數w,b,即感知機模型。
2.3 感知機學習演算法
2.3.1 感知機學習演算法的原始形式
感知機學習演算法是對以下最優化問題的演算法,給定一個訓練資料集
其中,,,求引數w和b,使其為以下損失函式極小化問題的解
其中M為誤分類點的集合
感知機學習演算法是誤分類點驅動的,具體採用隨機梯度下降演算法。首先,任意選取一個超平面,然後用梯度下降演算法不斷地極小化目標函式(2.5)。極小化過程不是一次使得M中所有誤分類點的梯度下降,而是一次隨機選取一個誤分類點使其梯度下架。
假設誤分類點集合M是固定的,那麼損失函式的梯度由
給出。
隨機選取一個誤分類點,對w,b進行更新:
式中是步長,在統計學習中又稱為學習率,這樣通過迭代可以期待損失函式不斷減小,直到為0.綜上所述,可以得到如下演算法:
感知機學習演算法的原始形式
輸入:訓練資料集,其中,;學習率;
輸出:w,b;感知機模型
(1)選取初值
(2)在訓練集中選取資料
(3)如果
(4)轉至(2),直至訓練集中沒有誤分類點。
例1.如圖所示的訓練資料集,其正例項點是 負例項點是,試用感知機學習演算法的原始形式求感知機模型.這裡,
解構建最優化問題:
按照感知機學習演算法的原始形式,求解w,b。這裡.
(1)去初值
(2)對,,未能被正確分類,更新w,b
得到線性模型
(3)對於顯然,,被正確分類,不修改w,b;
對,,被誤分類,更新w,b.
得到線性模型
如此繼續下去,直到
線性模型:
對於所有的資料點,即沒有誤分類點,損失函式達到極小。
分離超平面為
感知機模型為
程式碼如下:
#!usr/bin/env python3
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
"感知機的原始形式"
x=np.array([[3,3],[4,3],[1,1]]) #建立資料集,共是三個例項
y=np.array([1,1,-1]) #建立標籤
store=[]
w=np.array([0, 0])
b=0 #初始化引數w,b
k=0 #k計算迭代次數
learnrate=1 #設定學習率為1
condition=True
while condition:
count=0
for i in range(len(x)):
if y[i]*(np.dot(w,x[i].T)+b)<=0: #用來檢測誤分類
w=w+learnrate*y[i]*x[i].T #更新w
b=b+learnrate*y[i] #更新b
store.append([w,b])
count=count+1
k=k+1
print('w的值:{0} b的值:{1} 迭代次數:{2}'.format(w, b, k))
if count==0:
k=k+1
print('w的值:{0} b的值:{1} 迭代次數:{2}'.format(w, b, k))
store.append([w,b])
condition=False
print(store)
fig=plt.figure()
ax=plt.axes(xlim=(-7,7),ylim=(-7,7))
line,=ax.plot([],[],'b',linewidth=3)
label=ax.text([],[],'')
#用來畫出是三個例項點
def plot_three_point():
global x, y, line, label
plt.axis([-6,6,-6,6])
p1=plt.scatter(x[0:2,0],x[0:2,1],c='b',marker='o',s=60)
p2=plt.scatter(x[2,0],x[2,1],c='r',marker='x',s=60)
plt.grid(True)
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([p1,p2],['正例項點','負例項點'],loc=1)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('感知機迭代過程圖')
return line,label
#畫出動態的圖形
def animate(index):
global store,ax,line,label
w=store[index][0]
b=store[index][1]
if w[1]==0:
return line,label
x1=-6
y1=-(b+w[0]*x1)/w[1]
x2=6
y2=-(b+w[0]*x2)/w[1]
line.set_data([x1,x2],[y1,y2])
x1=0
y1=-(b+w[0]*x1)/w[1]
label.set_text("w:{}".format(str(store[index][0])) + ' ' +"b:{}".format(str(b)))
label.set_position([x1,y1])
return line,label
ani=animation.FuncAnimation(fig,animate,init_func=plot_three_point,frames=len(store),interval=1000,repeat=True,blit=True)
plt.show()
ani.save('perceptron.gif',fps=200,writer='imagemagick')
2.3.2 演算法的收斂性
關於線性可分資料集感知機學習演算法原始形式收斂問題,我們可以轉換為即通過有限次迭代可以得到一個將訓練資料集完全正確劃分的分離超平面及感知機模型。
為了便於推導,在這裡我們將偏置b併入權重向量w,記作,同樣也將輸入向量加以擴充,加進常數1,記作。這樣,。顯然,
- 定理:設訓練資料集是線性可分的,其中,,則有
(1)存在滿足條件的超平面將訓練資料集完全正確分開;且存在,對所有 則有
(2)令 ,感知機學習演算法的原始形式在誤分類次數k滿足不等式
證明如下圖所示:
證明(1)
證明(2)
2.3.3 感知機學習演算法的對偶形式
對偶形式的基本思想:將w和b表示為例項和標記的線性組合形式,通過求解其係數而求得w和b。不失一般性,在感知機學習演算法的原始形式中,可初始化均為0,對於誤分類點通過
逐步修改w,b,設修改n次,則w,b關於的增量分別是和,這裡。這樣,從學習過程不難看出,最後學習到的w,b可以分別表示為
這裡,,當時,表示第i個例項點由於誤分而進行更新的次數。例項點更新次數越多,意味著它距離分離超平面越近,也就越難正確分類。換句話說,這樣的例項對學習結果影響最大。
感知機學習演算法的對偶形式
輸入:線性可分的資料集,其中,;學習率;
輸出:;感知機模型
其中,.
(1)
(2)在訓練集中選取資料
(3)如果 ,執行
(4)轉至(2)直到沒有誤分類資料
對偶形式中訓練例項僅以內積的形式出現,為了方便,可以預先將訓練集中的例項間的內積計算出來並以矩陣的形式儲存,這個矩陣就是所謂的Gram矩陣
例2.資料同例1,正樣本點是,,負樣本點是,試用感知機學習演算法對偶形式求感知機模型。
解 按照感知機演算法對偶形式求感知機模型
(1)取
(2)計算Gram矩陣
(3)誤分條件
引數更新
(4)經過多次迭代和更新值可以得到最終結果
分離超平面
最終得到感知機模型
執行的程式碼如下所示:
#!usr/bin/env python3
#coding=utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation"感知機的對偶形式"
x=np.array([[3,3],[4,3],[1,1]]) #建立資料集,共是三個例項
y=np.array([1,1,-1]) #建立標籤
list_1=[] #用於儲存w,b引數
list=[] #用於儲存變化的alpha,b值gramMatrix=x.dot(x.T)
alpha=np.zeros(len(x))
b=0 #引數b初始化
k=0 #k計算迭代次數
learnrate=1 #設定學習率為1
condition=True
while condition:
count=0
for i in range(len(x)):
if y[i]*(np.sum(alpha*y*gramMatrix[i])+b)<=0:
alpha[i]=alpha[i]+learnrate
b=b+learnrate*y[i]
list_1.append([(alpha*y.T).dot(x),b])
list.append([np.array(alpha),b])
print(alpha)
k=k+1
count=count+1
print('alpha:{0} b:{1} k:{2}'.format(alpha, b, k))
if count==0:
condition=False
#print(list_1)
#print(list)fig=plt.figure()
ax=plt.axes(xlim=(-7,7),ylim=(-7,7))
line,=ax.plot([],[],'b',linewidth=3)
label=ax.text([],[],'')#用來畫出是三個例項點
def plot_three_point():
global x, y, line, label
plt.axis([-6,6,-6,6])
p1=plt.scatter(x[0:2,0],x[0:2,1],c='b',marker='o',s=60)
p2=plt.scatter(x[2,0],x[2,1],c='r',marker='x',s=60)
plt.grid(True)
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([p1,p2],['正例項點','負例項點'],loc=1)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.title('感知機對偶形式迭代過程圖')
return line,label#畫出動態的圖形
def animate(index):
global list_1,ax,line,label
w=list_1[index][0]
b=list_1[index][1]
if w[1]==0:
return line,label
x1=-6
y1=-(b+w[0]*x1)/w[1]
x2=6
y2=-(b+w[0]*x2)/w[1]
line.set_data([x1,x2],[y1,y2])
x1=0
y1=-(b+w[0]*x1)/w[1]
label.set_text("alpha:{}".format(str(list[index][0])) + ' ' +"b:{}".format(str(b)))
label.set_position([x1,y1])
return line,label
ani=animation.FuncAnimation(fig,animate,init_func=plot_three_point,frames=len(list_1),interval=1000,repeat=True,blit=True)
plt.show()
ani.save('perceptron_dual_form.gif',fps=200,writer='imagemagick')
相關推薦
(1)單層感知機
1. 概念介紹: 假設輸入空間(特徵空間)是 ,輸入空間是Y={+1,-1}. 輸入 表示例項的特徵向量,對於應於輸入空間(特徵空間)的點;輸出表示例項的類別.由輸入空間到輸出空間的如下函式:
詳解SVM系列(一):感知機
什麼是感知機 感知機是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取+1和-1二值。 感知機對應於輸入空間(特徵空間)中將例項分為正負兩類的分離超平面,屬於判別模型。 感知機旨在求出將訓練資料進行線性劃分的分離超平面,為此,匯入基於誤分類的損失函式,利用梯度
人工神經網路(二)單層感知器
本篇文章,我們開始介紹最簡單的神經網路結構,感知器,在瞭解原理的基礎上,下篇部落格我們程式碼實現一個單層感知器: 感知器: 人工神經網路的第一個里程碑是感知機perceptron, 這個名字其實有點誤導, 因為它根本上是做決策的。 一個感知機其實是對神經元最基本概念的
機器學習/深度學習測試題(一) —— 單層感知器的啟用函式
問,更換單層感知器的啟用函式(比如改為 tanh 函式),能否使模型具有解決非線性分類問題的能力。 tanh(s)=exp(s)−exp(−s)exp(s)+exp(−s) 可知,tanh 過原
機器學習演算法原理與實踐(六)、感知機演算法
感知機 感知機是二分類的線性分類模型,輸入為例項的特徵向量,輸出為例項的類別(取+1和-1)。感知機對應於輸入空間中將例項劃分為兩類的分離超平面。感知機旨在求出該超平面,為求得超平面匯入了基於誤分類的損失函式,利用梯度下降法對損失函式進行最優化(最優
統計學習方法 學習筆記(二):感知機
相交 with open read move remove 由於 subset rip span 在這一篇筆記中,來了解一下感知機模型(perceptron),我們將要了解感知機的模型,感知機的學習策略和感知機的學習算法,並且使用Python編程來實現書中的例子。
機器學習回顧篇(10):感知機模型
注:本系列所有部落格將持續更新併發布在github和gitee上,您可以通過github、gitee下載本系列所有文章筆記檔案。 1 引言¶ 感知機是一種簡單且易於實現的二分類判別模型,主要思想是通過誤分類
【機器學習筆記19】神經網路(單層感知機)
【參考資料】 【1】《人工神經網路教程》 【2】《matlab 2015b 神經網路技術》 基本概念 單層感知器可以看成一個線性累加器和一個二值化閾值元器件,通常會在累加一個偏移量。由公式表達為:oj=sgn(∑i=1nwijxi+b)o_j= sgn(\s
MATLAB神經網路學習(1):單層感知器
單層感知器由一個線性組合器和一個二值閾值元件組成。 輸入是一個N維向量 x=[x1,x2,...,xn],其中每一個分量對應一個權值wi,隱含層輸出疊加為一個標量值: 隨後在二值閾值元件中對得到的v值進行判斷,產生二值輸出:
TensorFlow HOWTO 4.1 多層感知機(分類)
4.1 多層感知機(分類) 這篇文章開始就是深度學習了。多層感知機的架構是這樣: 輸入層除了提供資料之外,不幹任何事情。隱層和輸出層的每個節點都計算一次線性變換,並應用非線性啟用函式。隱層的啟用函式是壓縮性質的函式。輸出層的啟用函式取決於標籤的取值範圍。 其本質上相當於
【統計學習方法讀書筆記】感知機的個人理解(1)
寫在前面: 在友人的推薦下,開始入李航老師的坑,《統計學習方法》。 讀到第二章,感知機,李航老師由淺入深讓我有了很好的理解,現在自己總結一下思路。 正文: 感知機用於二分類問題,由淺開始:假定我們有一個平面上存在許許多多的藍色點和紅色點,並且假設存在一條直線可以將藍紅
機器學習筆記(1) 感知機演算法 之 實戰篇
我們在上篇筆記中介紹了感知機的理論知識,討論了感知機的由來、工作原理、求解策略、收斂性。這篇筆記中,我們親自動手寫程式碼,使用感知機演算法解決實際問題。 先從一個最簡單的問題開始,用感知機演算法解決OR邏輯的分類。 import numpy as np import matplotlib.pyplot as
[轉]Jetson TX1 開發教程(1)配置與刷機
uda 密碼 隨著 賬號 自己 一個 路由器 b- 出廠 開箱 Jetson TX1是英偉達公司新出的GPU開發板,擁有世界上先進的嵌入式視覺計算系統,提供高性能、新技術和極佳的開發平臺。在進行配置和刷機工作之前,先來一張全家福: 可以看到,Jetson TX1 包含內容
OpenCV 從入門到放棄(1)虛擬機 Ubuntu16.04+ python安裝opencv
編譯 zip 選擇 tis numpy n-n local pan ase 在opencv官網(http://opencv.org/)下載linux版本的opencv壓縮包。 然後選擇opencv下載文件夾,在終端中輸入:cd (壓縮包地址);將下載的文件解壓
KVM虛擬機&openVSwitch雜記(1)
openVSwitch 虛擬化網絡一、openVSwitch(CentOS7) master1(192.168.1.1),master2(192.168.1.2)作為運行虛擬機的計算節點,master3(10.201.106.133)作為網絡節點 1、配置兩個計算節點 1.1 每個計算節點準備兩塊網卡
虛擬機的使用(1)
圖形 copy all undo 必備 mini sta 不能訪問 機器 本篇主要圍繞以下三個問題展述的 what ----什麽是虛擬機 why ----為什麽要使用虛擬機 how ----怎樣使用虛擬機 1 what ----什麽是虛擬機 虛擬機軟件可
(1)虛擬機管理——在微軟雲Azure新門戶創建虛擬機
虛擬機 雲主機 雲計算 微軟 azure Azure新門戶下如何創建虛擬機。方便管理分為3個步驟:創建存儲管理帳戶、創建虛擬網絡、創建虛擬雲主機。 通過地址https://portal.azure.cn我們打開會看到相應的界面,進入門戶登錄界面,如下圖: 登錄門戶後,我
【JVM虛擬機】(1)---常用JVM配置參數
str spa void 經歷 color borde free TE per 常用JVM配置參數 常用JVM配置參數主要有:Trace跟蹤參數、堆的分配參數、棧的分配參數。 一、Trace跟蹤參數 跟蹤參數用於跟蹤監控JVM,對於開發人員
了解java虛擬機---JVM的基本結構(1)
show 擁有 處理 對象 文章 xss 分享 action 啟動 1. JVM的基本結構 1.1. 類加載子系統 類加載子系統負責從文件或者網絡中加載Class信息,加載的類信息存放於方法區的內存空間。方法區中可能還會存放運行時常量信息,包括字符串與數字常量。(這部分常
TensorFlow 訓練 MNIST (1)—— softmax 單層神經網絡
float 像素點 min nim 精度 show mnist port 格式化 1、MNIST數據集簡介 首先通過下面兩行代碼獲取到TensorFlow內置的MNIST數據集: from tensorflow.examples.tutorials.mnist i