日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python开机号_感知机(python实现)

發(fā)布時間:2023/12/4 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python开机号_感知机(python实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

感知機(perceptron)是二分類的線性分類模型,輸入為實例的特征向量,輸出為實例的類別(取+1和-1)。感知機對應(yīng)于輸入空間中將實例劃分為兩類的分離超平面。感知機旨在求出該超平面,為求得超平面導入了基于誤分類的損失函數(shù),利用梯度下降法 對損失函數(shù)進行最優(yōu)化(最優(yōu)化)。感知機的學習算法具有簡單而易于實現(xiàn)的優(yōu)點,分為原始形式和對偶形式。感知機預測是用學習得到的感知機模型對新的實例進行預測的,因此屬于判別模型。感知機由Rosenblatt于1957年提出的,是神經(jīng)網(wǎng)絡(luò)和支持向量機的基礎(chǔ)。

行文脈絡(luò)

感知機模型

感知機學習策略

感知機學習算法

原始形式

對偶形式

4. Github地址

1. 感知機模型

定義

假設(shè)輸入空間(特征向量)為X?Rn,輸出空間為Y={-1, +1}。輸入x∈X表示實例的特征向量,對應(yīng)于輸入空間的點;輸出y∈Y表示示例的類別。由輸入空間到輸出空間的函數(shù)為

f(x)=sign(w·x + b)(1)

稱為感知機。其中,參數(shù)w叫做權(quán)值向量,b稱為偏置。w·x表示w和x的內(nèi)積。sign為符號函數(shù),即

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (2)

幾何解釋

感知機模型是線性分類模型,感知機模型的假設(shè)空間是定義在特征空間中的所有線性分類模型,即函數(shù)集合{f|f(x)=w·x+b}。線性方程 w·x+b=0對應(yīng)于特征空間Rn中的一個超平面S,其中w是超平面的法向量,b是超平面的截踞。這個超平面把特征空間劃分為兩部分。位于兩側(cè)的點分別為正負兩類。超平面S稱為分離超平面,如下圖:

學習與預測

感知機學習即由訓練數(shù)據(jù)集T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N)求得感知機模型(1),即求得參數(shù)w,b;感知機預測即根據(jù)得到的感知機模型(1),對新的輸入實例給出對應(yīng)的類型。

2. 感知機學習策略

假設(shè)訓練數(shù)據(jù)集是線性可分的,感知機學習的目標是求得一個能夠?qū)⒂柧殧?shù)據(jù)的正負實例點完全分開的分離超平面,即最終求得參數(shù)w、b。這需要一個學習策略,即定義(經(jīng)驗)損失函數(shù)并將損失函數(shù)最小化。

損失函數(shù)的一個自然的選擇是誤分類的點的總數(shù)。但是這樣得到的損失函數(shù)不是參數(shù)w、b的連續(xù)可導函數(shù),不宜優(yōu)化。損失函數(shù)的另一個選擇是誤分類點到分里面的距離之和。

首先,對于任意一點xo到超平面的距離為

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(3)

其次,對于誤分類點(xi,yi)來說 -yi(w·xi+b)>0

這樣,假設(shè)超平面S的總的誤分類點集合為M,那么所有誤分類點到S的距離之和為

? ? ? ? ? ? ? ? ? ? ? ? ? ?(4)

不考慮1/||w||,就得到了感知機學習的損失函數(shù)。

經(jīng)驗風險函數(shù)

給定數(shù)據(jù)集T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N),感知機sign(w·x+b)學習的損失函數(shù)定義為

? ? ? ? ? ? ? ? ? ? ?(5)

其中M為誤分類點的集合,這個損失函數(shù)就是感知機學習的經(jīng)驗風險函數(shù)。

顯然,損失函數(shù)L(w,b)是非負的。如果沒有誤分類點,那么L(w,b)為0,誤分類點數(shù)越少,L(w,b)值越小。一個特定的損失函數(shù):在誤分類時是參數(shù)w,b的線性函數(shù),在正確分類時,是0.因此,給定訓練數(shù)據(jù)集T,損失函數(shù)L(w,b)是w,b的連續(xù)可導函數(shù)。

3. 感知機學習算法

最優(yōu)化問題:給定數(shù)據(jù)集T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N),求參數(shù)w,b,使其成為損失函數(shù)的解(M為誤分類的集合):

? ? ? ? ? ? ? ? ?(6)

3.1 感知機學習的原始形式

感知機學習是誤分類驅(qū)動的,具體采用隨機梯度下降法。首先,任意選定w0、b0,然后用梯度下降法不斷極小化目標函數(shù)(6),極小化的過程不知一次性的把M中的所有誤分類點梯度下降,而是一次隨機選取一個誤分類點使其梯度下降。

假設(shè)誤分類集合M是固定的,那么損失函數(shù)L(w,b)的梯度由(7)(8)給出

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (7)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (8)

隨機選取一個誤分類點(xi,yi),對w,b進行更新:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (9)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? (10)

式中η(0≤η≤1)是步長,在統(tǒng)計學是中成為學習速率。步長越大,梯度下降的速度越快,更能接近極小點。如果步長過大,有可能導致跨過極小點,導致函數(shù)發(fā)散;如果步長過小,有可能會耗很長時間才能達到極小點。

算法(感知機學習算法的原始形式)

輸入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N,學習速率為η)

輸出:w, b;感知機模型f(x)=sign(w·x+b)

(1) 初始化w0,b0

(2) 在訓練數(shù)據(jù)集中選取(xi, yi)

(3) 如果yi(w xi+b)≤0w= w +ηyixi

b= b +ηyi

(4) 轉(zhuǎn)至(2)

直觀解釋:當一個實例點被誤分類時,調(diào)整w,b,使分離超平面向該誤分類點的一側(cè)移動,以減少該誤分類點與超平面的距離,直至超越該點被正確分類。

例1

對于訓練數(shù)據(jù)集,其中正例點是x1=(3,3)T,x2=(4,3)T,負例點為x3=(1,1)T,用感知機學習算法的原始形式求感知機模型f(x)=w·x+b。這里w=(w(1),w(2))T,x=(x(1),x(2))T

解:構(gòu)建最優(yōu)化問題:

按照算法求解w, b。η=1

(1)取初值w0=0, b0=0

(2)對于(3,3):-(0+0)+0=0未被正確分類。更新w,b

w1=w0+1*y1·x1 = (0,0)T+1(3,3)T=(3,3)T

b1=b0+y1=1

得到線性模型w1x+b1 = 3x(1)+3x(2)+1

(3)返回(2)繼續(xù)尋找yi(w·xi+b)≤0的點,更新w,b。直到對于所有的點yi(w·xi+b)>0,沒有誤分類點,損失函數(shù)達到最小。

分離超平面為x(1)+x(2)-3=0

感知機模型為 f(x)=sign(x(1)+x(2)-3)

在迭代過程中,出現(xiàn)w·xi+b=-2,此時,取任意一個點,都會是其小于0,不同的取值順序會導致最終的結(jié)果不同,因此解并不是唯一的。為了得到唯一的超平面,需要對分離超平面增加約束條件,這就是支持向量機的想法。

實現(xiàn)代碼

importosimportsys#An example in that book, the training set and parameters' sizes are fixed

training_set =[]

w=[]

b=0

lens=0

n=0#update parameters using stochastic gradient descent

defupdate(item):globalw, b, lens, nfor i inrange(lens):

w[i]= w[i] + n * item[1] *item[0][i]

b= b + n * item[1]print w, b #you can uncomment this line to check the process of stochastic gradient descent

#calculate the functional distance between 'item' an the dicision surface

defcal(item):globalw, b

res=0for i inrange(len(item[0])):

res+= item[0][i] *w[i]

res+=b

res*= item[1]returnres#check if the hyperplane can classify the examples correctly

defcheck():

flag=Falsefor item intraining_set:if cal(item) <=0:

flag=True

update(item)if not flag: #False

print "RESULT: w:" + str(w) + "b:"+str(b)

tmp= ''

for keys inw:

tmp+= str(keys) + ' 'tmp=tmp.strip()

modelFile.write(tmp+ '\n')

modelFile.write(str(b)+ '\n')

modelFile.write(str(lens)+ '\n')

modelFile.write(str(n)+ '\n')

modelFile.close()

os._exit(0)

flag=Falseif __name__=="__main__":if len(sys.argv) != 4:print "Usage: python perceptron.py n trainFile modelFile"exit(0)

n= float(sys.argv[1])

trainFile= file(sys.argv[2])

modelFile= file(sys.argv[3], 'w')

lens=0for line intrainFile:

chunk= line.strip().split(' ')

lens= len(chunk) - 1tmp_all=[]

tmp=[]for i in range(1, lens+1):

tmp.append(int(chunk[i]))

tmp_all.append(tmp)

tmp_all.append(int(chunk[0]))

training_set.append(tmp_all)

trainFile.close()for i inrange(lens):

w.append(0)for i in range(1000):

check()print "The training_set is not linear separable."

View Code

3.2 感知機學習的對偶形式

對偶形式的基本想法是,將w,b表示成為實例xi和標記yi的線性組合的形式,通過求解其系數(shù)而得到w和b。不失一般性,將初始值w0,b0設(shè)為0.對誤分類點(xi,yi)通過

w = w + ηyixi

b = b + ηyi

的轉(zhuǎn)換逐步修該w,b,設(shè)修改了n次,則w,b關(guān)于(xi,yi)的增量分別為aiyixi和aiyi,這里ai=niη最終學習到的w,b可以表示為

實例點更新次數(shù)越多,意味著它距離分離超平面越近,也就越難正確分類。換句話說,這樣的實例對學習結(jié)果影響很大。

算法(感知機學習算法的對偶形式)

輸入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},i=1,2...N,學習速率為η)

輸出:a,b;感知機模型f(x)=sign(w·x+b)

(1) 初始化w0,b0

(2) 在訓練數(shù)據(jù)集中選取(xi, yi)

(3) 如果

ai = ai + η

b = b + ηyi(4) 轉(zhuǎn)至(2)

對偶形式中訓練數(shù)據(jù)僅以內(nèi)積的形式出現(xiàn),為了方便可以預先把訓練數(shù)據(jù)間內(nèi)積計算出來并以矩陣的形式存儲起來,這個矩陣就是所謂的Gram矩陣。

實現(xiàn)代碼

importosimportsys#An example in that book, the training set and parameters' sizes are fixed

training_set =[]

w=[]

a=[]

b=0

lens=0

n=0

Gram=[]defcalInnerProduct(i, j):globallens

res=0for p inrange(lens):

res+= training_set[i][0][p] *training_set[j][0][p]returnresdefAddVector(vec1, vec2):for i inrange(len(vec1)):

vec1[i]= vec1[i] +vec2[i]returnvec1defNumProduct(num, vec):for i inrange(len(vec)):

vec[i]*=numreturnvecdefcreateGram():globallensfor i inrange(len(training_set)):

tmp=[]for j inrange(0, len(training_set)):

tmp.append(calInnerProduct(i, j))

Gram.append(tmp)#update parameters using stochastic gradient descent

defupdate(k):globala, b, n

a[k]+=n

b= b + n * training_set[k][1]print a, b #you can uncomment this line to check the process of stochastic gradient descent

#calculate the functional distance between 'item' an the dicision surface

defcal(k):globala, b

res=0for i inrange(len(training_set)):

res+= a[i] * int(training_set[i][1]) *Gram[i][k]

res+=b

res*= training_set[k][1]returnres#check if the hyperplane can classify the examples correctly

defcheck():globalw, a

flag=Falsefor i inrange(len(training_set)):if cal(i) <=0:

flag=True

update(i)if not flag: #False

for i inrange(len(training_set)):

w= AddVector(w, NumProduct(a[i] * int(training_set[i][1]), training_set[i][0]))print "RESULT: w:", w, "b:", b

tmp= ''

for keys inw:

tmp+= str(keys) + ' 'tmp=tmp.strip()

modelFile.write(tmp+ '\n')

modelFile.write(str(b)+ '\n')

modelFile.write(str(lens)+ '\n')

modelFile.write(str(n)+ '\n')

modelFile.close()

os._exit(0)

flag=Falseif __name__=="__main__":if len(sys.argv) != 4:print "Usage: python perceptron_duality.py n trainFile modelFile"exit(0)

n= float(sys.argv[1])

trainFile= file(sys.argv[2])

modelFile= file(sys.argv[3], 'w')

lens=0for line intrainFile:

chunk= line.strip().split(' ')

lens= len(chunk) - 1tmp_all=[]

tmp=[]for i in range(1, lens+1):

tmp.append(int(chunk[i]))

tmp_all.append(tmp)

tmp_all.append(int(chunk[0]))

training_set.append(tmp_all)

trainFile.close()

createGram()for i inrange(len(training_set)):

a.append(0)for i inrange(lens):

w.append(0)for i in range(1000):

check()print "The training_set is not linear separable."

View Code

4. GitHub地址

總結(jié)

以上是生活随笔為你收集整理的python开机号_感知机(python实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。