這裡使用pocket演算法:
pocket演算法的思想非常簡單,在搜尋w的時候,不斷記錄最好的準確率和w。這樣即使資料不是線性可分的,也可以得到比較好的測試結果(只要不斷的提高迭代的次數)
資料:計算準確率函式:
pocket演算法# 計算錯誤率
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)
剛開始用python,好多矩陣/陣列等數學操作比較囉嗦,效率也不好。在使用中不斷惡補吧。# 資料非線性可分的情況下,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
機器學習 感知機模型
感知機模型,主要的思想是用乙個函式,通過不斷的調節權值和偏置的數值,將乙個線性可分的集合分類 感知機演算法 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...