1. 程式人生 > >Digression:The perceptron learning algorithm(感知機學習演算法)

Digression:The perceptron learning algorithm(感知機學習演算法)

'''
Author :Chao Liu
Data:2013/12/9
Algorithm: perceptron
'''
import numpy
import matplotlib.pyplot as plt


'''
decision function
'''
def h_function(W,x):
    value = numpy.dot(W,x)
    if value >= 0.0:
        return 1
    else:
        return 0


'''
cost function
'''
def Jcost_function(W,X,Y):
    sum = 0.0
    for i in range(len(Y)):
        sum += (h_function(W,X[i]) - Y[i]) * numpy.dot(W,X[i])
    return sum
    
'''
SGD method
'''
def SGD(W,X,Y,learning_rate,limit,max_iter):
    cnt = 0
    Jcost_pre = Jcost_function(W,X,Y)
    print 'init cost = ',Jcost_function(W,X,Y)
    x = [-2.5,2.5]
    y = [0.0]*2
    while cnt < max_iter:
        for i in range(len(Y)):
            if (Y[i] == 1 and h_function(W,X[i]) == 0):
                W = W + numpy.dot(learning_rate,X[i])
                print 'W = ',W
                print 'cost = ',Jcost_function(W,X,Y)
            elif (Y[i] == 0 and h_function(W,X[i]) == 1):
                W = W - numpy.dot(learning_rate,X[i])
                print 'W = ',W
                print 'cost = ',Jcost_function(W,X,Y)
            else:
                print 'this point ',X[i],' do not need to update!'
        if (Jcost_pre - Jcost_function(W,X,Y)) < limit:
            print 'this Algotithm is convergence!!'
            break;
        Jcost_pre = Jcost_function(W,X,Y)
        cnt += 1
        for i in range(len(Y)):
            if Y[i] == 1:
                plt.plot(X[i][0],X[i][1],'*')
            else:
                plt.plot(X[i][0],X[i][1],'or')
        plt.xlim(-3,3)
        plt.ylim(-3,3)
        for i in range(len(x)):
            y[i] = -((W[0]*x[i]+W[2])/W[1])
        plt.plot(x,y)
        plt.show()    
        
    
    
    
if __name__ == '__main__':
    # W = [theta1,theta2,theta0]
    W = [1.0,1.0,1.0]
    X = [(0,0,1),(-0.5,-1,1),(-1,-2,1),(0,-1,1),(1,-1.5,1),(2,0,1),(1.5,-1,1),(1,-2,1)]
    Y = [1,1,1,1,0,0,0,0]
    SGD(W,X,Y,0.1,0.001,10)

相關推薦

DigressionThe perceptron learning algorithm感知學習演算法

''' Author :Chao Liu Data:2013/12/9 Algorithm: perceptron ''' import numpy import matplotlib.pyplot as plt ''' decision function ''' def h_function(W,x):  

閒談感知學習演算法(The perceptron learning algorithm)

這一節我們簡單地介紹歷史上的著名演算法——感知器演算法,這在後面的學習理論中也會有所提及。設想我們改變邏輯迴歸演算法,“迫使”它只能輸出-1或1抑或其他定值。在這種情況下,之前的邏輯函式ggg就會變成閾值函式signsignsign: sign(z)={1if 

機器學習——感知學習演算法The perceptron learning algorithm

現在,讓我們簡要地談論一個歷史上曾經令人很感興趣的演算法,當學習到學習理論章節的時候我們將還會提到這個。試想一下修改logistic迴歸的方法,來“迫使”它能夠輸出除了0或1亦或是其它以外的輸出值。為了達到這個目的,自然而然地會想到去改變閾值函式 gg 的定義:接下來,如果我

感知學習演算法PLA的修正過程的理解機器學習基石

原理 首先,PLA修正過程的數學表示: 在一個迴圈中,t代表當前的迭代次數 1. 找到一個錯誤分類的點(xt,ytxt,yt): sign(wTtxn(t))≠yn(t)sign(wtTxn(t))≠yn(t) 2. 修正該錯誤 Wt+1←Wt+yn

python實現感知學習演算法的原始形式

感知機 感知機(perceptron)是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取+1和-1二值。感知機對應於輸入空間(特徵空間)中將例項劃分為正負兩類的分離超平面,屬於判別模型。感知機學習旨在求出將訓練資料進行線性劃分的分離超平面。 感知機學習演算法的原始

KNN演算法有監督學習演算法

一、KNN演算法簡介   KNN演算法又稱k近鄰分類(k-nearest neighbor classification)演算法。它是根據不同特徵值之間的距離來進行分類的一種簡單的機器學習方法,它是一種簡單但是懶惰的演算法。他的訓練資料都是有標籤的資料,即訓練

[python]感知學習演算法實現

模型 感知機模型是屬於二分類的線性判別模型,旨在找到一個線性超平面,能將正負例項劃分開來。 f(x)=sign(w∗x+b) 學習策略 學習策略即定義(經驗)損失函式並將損失函式最小化 感知機的學習策略是基於誤分類點到超平面的距離之和 經驗損

寫給大家看的機器學習書【Part3】直觀易懂的感知學習演算法PLA

本篇綜述前兩篇我們已經學習了機器學習的概念和組成: 學習演算法 (Learning Algorithm) 根據訓練資料,從假設集合 (Hypothesis Set) 中選出最優的那個對映g : χ → Y 作為最終學得的模型,使得 g 越接近 f 越好( g

2-感知學習演算法

感知機(perceptron)是一個線性二分類模型,其目的是尋找一個超平面將正負示例劃分開,屬於判別模型,也是神經網路與SVM的基礎。 感知機模型 假設輸入空間為χ⊆Rnχ⊆Rn,輸出空間為Υ⊆{+1,−1}Υ⊆{+1,−1}。輸入x∈χx∈χ表示

感知演算法Perceptron Learning Algorithm和程式碼實現Python

PLA演算法是機器學習中最為基礎的演算法,與SVM和Neural Network有著緊密的關係。                            &n

PLA演算法的理解perceptron learning algorithm

最近在學習臺大林軒田教授的課程,一開始就講到了perceptron learning algorithm,這個演算法是用來對線性可分資料進行分類的。要注意這裡是線性可分的資料,這個也是PLA演算法的侷限的地方,如果PLA演算法運用線上性不可分的資料中的時候,演算法將會無限迴圈下去,還有就

統計學習方法筆記二---感知(Perceptron Learning Algorithm,PLA)

簡介 感知機(perceptron)是二分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取+1和-1二值。感知機對應於輸入空間(特徵空間)中將例項劃分為正負兩類的分離超平面,屬於判別模型,解決的問題是分類問題。 目標/目的:求出將訓練資料進行線

感知:Perceptron Learning Algorithm

PLA 感知機是一個二分類器,輸入為特徵空間,輸出表示所屬類別。 感知機表示的將輸入空間的例項劃分為兩類的超平面。 感知機學習模型 假設輸入空間是X⊆Rn,其中特徵向量x∈X;輸出空間是Y={+1,−1},輸出y∈Y。那麼感知機模型可以表示為

BZOJ3296Learning Languages簡單並查集

3296: [USACO2011 Open] Learning Languages Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 436  Solved: 239[Subm

機器學習筆記 perceptron感知 在ex4Data資料集上的實現

慣例的ML課堂作業,第四個也是最後一個線性分類模型,感知機。 感知機是一個非常簡單的線性分類模型,簡單來說就是一個神經元,其啟用函式是門限函式,有n個輸入和一個輸出,和神經元結構十分相似。 感知機的損失函式是看作是分類錯的所有樣本的輸出值的和 hw的輸出就是

[Python]超簡單版perceptron learning algorithm實作及範例 « Terrence的宅宅幻想

最近復習機器學習的課程 PLA演演算法一直說很簡單,想說做個numpy版本的範例試試看 程式碼如下,可以直接執行 pla.py import matplotlib.pyplot as plt

Perceptron感知

感知機原理: 為了使線性迴歸能用於分類,引入了logistic函式對映成比率來進行分類。但是從人的直觀視角來看,對於如上圖所示的點,能否在空間中直接就找到一條分割線呢?感知機學習的目標就是求得一個

【深度學習perceptron感知

[TOC] 個人學習筆記,有興趣的朋友可參考。 ### 1.感知機的描述 感知機(perceptron)由美國學者Frank Rosenblatt在1957年提出來的。是作為神經網路(深度學習)的起源的演算法、 學習感知機的構造也就是學習通向神經網路和深度學習的一種重要思想 感知機接收多個輸入訊號

題目1013開門人和關門人字符串處理

代碼 nbsp 字符串處理 博客園 簽到 style tdi reat sca 問題來源   http://ac.jobdu.com/problem.php?pid=1013 問題描述   每個人有一個簽到時間和一個簽退時間,找到最早簽到和最晚簽退的那個人的ID。

POJ2826An Easy Problem?!——題解配特殊情況圖

while 一次 mes bsp print 情況下 queue blank using http://poj.org/problem?id=2826 題目大意:給兩條線,讓它接豎直下的雨,問其能裝多少橫截面積的雨。 ———&mdas