機器學習 感知機模型(pocket演算法)實現

2021-09-01 13:22:50 字數 1786 閱讀 3055

這裡使用pocket演算法:

pocket演算法的思想非常簡單,在搜尋w的時候,不斷記錄最好的準確率和w。這樣即使資料不是線性可分的,也可以得到比較好的測試結果(只要不斷的提高迭代的次數)

資料:計算準確率函式:

# 計算錯誤率

def checkerrorrate(testmatdata, testlabeldata, w):

accuracycount = 0

for i in range(len(testmatdata)):

vect = testmatdata[i, :]

resulty = vdot(w, extrabiasvect)

if (resulty <= 0):

labely = -1

else:

labely = 1

if (labely == testlabeldata[i]):

accuracycount += 1

return accuracycount / len(testlabeldata)

pocket演算法

# 資料非線性可分的情況下,pocketperceptron實現

def pocketperceptronlearn(trainmatdata, trainlabeldata, testmatdata, testlabeldata):

# 設定最大迭代次數

maxiteration = 100000

# 初始向量

w = [0, 0, 0, 0, 0]

# labely

iterationfinish = false

# 當前迭代次數

times = 0

bestw = w

bestaccuracyrate = 0

for interationcount in range(maxiteration):

for dataindex in range(len(trainmatdata)):

# 計算向量內積

vect = trainmatdata[dataindex, :]

resulty = vdot(w, extrabiasvect)

if (resulty <= 0):

labely = -1

else:

labely = 1

if (labely != trainlabeldata[dataindex]):

w = w + trainlabeldata[dataindex] * extrabiasvect

times += 1

rate = checkerrorrate(testmatdata, testlabeldata, w)

if (rate > bestaccuracyrate):

bestaccuracyrate = rate

bestw = w

else:

if (dataindex == (len(trainmatdata) - 1)):

iterationfinish = true

if (iterationfinish == true):

break

# 驗證測試

if (times >= 50):

print(bestw)

print(bestaccuracyrate)

return bestw, bestaccuracyrate

剛開始用python,好多矩陣/陣列等數學操作比較囉嗦,效率也不好。在使用中不斷惡補吧。

機器學習 感知機模型

感知機模型,主要的思想是用乙個函式,通過不斷的調節權值和偏置的數值,將乙個線性可分的集合分類 感知機演算法 fx sign w x b sign 1 x 0,1 x 0 對於最優的w,b的值,採用了損失函式 l w,b sum xi 屬於 m yi w xi b m 為錯誤分類點的集合 感知機學習演...

機器學習 感知機模型

目錄感知機 perceptron 是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1 和 1 二值.感知機對應於輸入空間 特徵空間 中將例項劃分為正負兩類的分離超平面,屬於判別模型.感知機學習旨在求出將訓練資料進行線性劃分的分離超平面,為此匯入基於誤分類的損失函式,利用梯度下...

機器學習 手寫感知機模型

資料集來自mnist資料集,主要利用numpy裡的matrix矩陣計算。演算法的實現主要在於對引數w和b的求解。演算法的推導過程參考李航 統計學習方法 推導最優化函式然後更新引數的過程。import numpy as np import pandas as pd import time defdat...