統計学習理論——感知機学習アルゴリズムpython実現(原始形式と対偶形式)
23057 ワード
感知機の学習アルゴリズムは原始形式と対偶形式に分けられる.
具体的なモデル理論:統計学習--感知機本文は本の中の2つのアルゴリズム過程をpythonを利用して実現した.機械学習アルゴリズムの実現を行う際には,強力な数学演算numpyライブラリを利用することができる.しかし、この文章ではnumpyライブラリは使われていません.データセットは配列で入力され,関連するベクトル演算を行う際に配列の下付きを利用して配列中のデータを演算する.
1.感知機学習アルゴリズムの原始形式
さらに,学習したモデルを用いて任意のインスタンス点の分類を判断することも可能である.この関数は簡単なif文だけで実現できます.
2.感知機学習アルゴリズムの対偶形式
対偶アルゴリズムの学習過程において,訓練セットの例は内積の形でしか現れず,訓練セットデータ間の内積を事前に計算し,行列で格納することができる,すなわちGram行列である.
具体的なモデル理論:統計学習--感知機本文は本の中の2つのアルゴリズム過程をpythonを利用して実現した.機械学習アルゴリズムの実現を行う際には,強力な数学演算numpyライブラリを利用することができる.しかし、この文章ではnumpyライブラリは使われていません.データセットは配列で入力され,関連するベクトル演算を行う際に配列の下付きを利用して配列中のデータを演算する.
1.感知機学習アルゴリズムの原始形式
def vectorInnerProduct(vector1,vector2): #
result = 0
length = len(vector1)
for i in range(length):
result += vector1[i] * vector2[i]
return result
def elementAddition(vector1,vector2): #
for i in range(len(vector1)):
vector1[i] += vector2[i]
return vector1
def numberMultiply(num,vector): #
tempVector = []
for i in range(len(vector)):
tempVector.append(vector[i] * num)
return tempVector
# vector, ,
#
""" , ( ) , 。 """
def perceptron(bias,dataSet,learnRate):
# , , , 。
weightVector = [0 for i in range(len(dataSet[0][0]))] # 0
while True:
# , , while , errornum
errorNum = 0
for data in dataSet: # ,
if data[1] * (vectorInnerProduct(weightVector,data[0])+bias) <= 0:
errorNum += 1
weightVector = elementAddition(weightVector,numberMultiply(learnRate * data[1],data[0]))
bias += learnRate * data[1]
if errorNum == 0: # ,
break
return weightVector,bias #
さらに,学習したモデルを用いて任意のインスタンス点の分類を判断することも可能である.この関数は簡単なif文だけで実現できます.
bias = 0
dataSet = [[[3,3],1],[[4,3],1],[[1,1],-1]]
learnRate = 1
print(perceptron(bias,dataSet,learnRate))
# , ([1, 1], -3)
2.感知機学習アルゴリズムの対偶形式
対偶アルゴリズムの学習過程において,訓練セットの例は内積の形でしか現れず,訓練セットデータ間の内積を事前に計算し,行列で格納することができる,すなわちGram行列である.
def vectorInnerProduct(vector1,vector2): #
result = 0
length = len(vector1)
for i in range(length):
result += vector1[i] * vector2[i]
return result
def gramMatrix(dataSet): # gram
length = len(dataSet)
gramMatrix = [[0 for i in range(length)] for i in range(length)]
for i in range(length):
for j in range(length):
gramMatrix[i][j] = vectorInnerProduct(dataSet[i][0],dataSet[j][0])
return gramMatrix
def elementAddition(vector1,vector2): #
for i in range(len(vector1)):
vector1[i] += vector2[i]
return vector1
def numberMultiply(num,vector): #
tempVector = []
for i in range(len(vector)):
tempVector.append(vector[i] * num)
return tempVector
def perceptron(dataSet,learnRate): # ,alpha 0
n = len(dataSet)
alphaList= [0 for i in range(n)]
bias = 0
gram = gramMatrix(dataSet)
while True: # , ( )
errorNum = 0
for i in range(n):
tempSum = 0
for j in range(n):
tempSum += alphaList[j] * dataSet[j][1] * gram[j][i]
if dataSet[i][1] * (tempSum + bias) <= 0:
errorNum += 1
alphaList[i] += learnRate
bias += learnRate * dataSet[i][1]
if errorNum == 0:
break
# alpha, alpha
weightVector = numberMultiply(alphaList[0]*dataSet[0][1],dataSet[0][0])
for i in range(1,n):
weightVector = elementAddition(weightVector,numberMultiply(alphaList[i]*dataSet[i][1],dataSet[i][0]))
return weightVector,bias
dataSet = [[[3,3],1],[[4,3],1],[[1,1],-1]]
print(perceptron(dataSet,1))
# , ([1, 1], -3)