1.パーセプトロン
パーセプトロンは2クラスの線形分類モデルです。私が理解している限り、「線形回帰」に類似した超平面を見つけ、すべてのインスタンスを2つのカテゴリに分割し、勾配降下最適化アルゴリズムを使用して誤分類ポイントを最小限に抑えます。誤分類ポイントが超平面に近いほど、損失値は小さくなります。
1.1パーセプトロンモデル
どこに署名するs i g nシンボリック関数。つまり、
パーセプトロンモデルは最初にw ∗ x + bw * x + bを変換できます。w∗バツ+bは線形モデルと見なされます。ここで、wは重みベクトル、bはバイアスです。次に、線形モデル出力の結果を符号signに代入しますSI G Nシンボリック関数、対応するカテゴリが出力されます。
1.2学習戦略
損失関数:超平面への誤分類点(wx + b = 0 wx + b = 0w x+b=0)合計距離。
次に、任意の点から超平面までの距離は次のとおりです。
ここで∣ ∣ w ∣ ∣ || w ||∣ ∣ w ∣ ∣はwwwはl 2 l_2l2ノルム。
なぜなら、誤分類ポイントについては:
したがって、誤って分類された点から超平面
までの距離は次のとおりです。したがって、すべての誤って分類された点から超平面までの合計距離は次のようになります。
ここでは考慮しません1 ∣ ∣ w ∣ ∣ \ frac {1} {|| w ||}∣ ∣ w ∣ ∣1、それで、
必要な損失関数を取得しました:したがって、損失関数を最小化し、勾配降下法を使用して、モデルに必要な最適なパラメーターを取得する必要があります。
2.パーセプトロンプリミティブモード
勾配降下法の詳細についてはあまり説明しません。ここでは、モデルの損失関数値を最小化して、モデルパラメーター "w、b"を取得する必要があります。次に、損失関数式の偏微分を取得するだけでよく、勾配降下法と以下に従ってください。アルゴリズムはモデルの最適なパラメーターを見つけます。
2.1オリジナルモードアルゴリズムの実装
# 感知机算法实现
import numpy as np
import time
# 定义时间装饰器
def timmer(func):
def wrapper(*args,**kwargs):
start_time = time.time()
res = func(*args, **kwargs)
stop_time = time.time()
print('Func %s,run time :%s' %(func.__name__,stop_time-start_time))
return res
return wrapper
class Perceptron:
def __init__(self):
self.weights=None
self.bias=None
def sign(self,value):
return 1 if value>=0 else -1
@timmer
def train(self,dataSet,labels,iter=50):
# 学习率
lr=0.9
dataSet = np.array(dataSet)
n,m = np.shape(dataSet)
# 初始化参数
w = np.zeros(m)
b=0
# 迭代
for k in range(iter):
print("Round{0}:{1}".format(k,iter))
# 使用随机梯度下降
for i in range(n):
if (-labels[i]*self.sign(np.dot(w,dataSet[i])+b)>=0):
w=w+lr*labels[i]*dataSet[i]
b=b+lr*labels[i]
self.weights=w
self.bias=b
def predict(self, data):
if (self.weights is not None and self.bias is not None):
return self.sign(np.dot(self.weights, data) + self.bias)
else:
return 0
if __name__ == '__main__':
data_set = [[3, 3],
[4, 3],
[1, 1]]
labels = [1, 1, -1]
perceptron = Perceptron()
perceptron.train(data_set, labels,30)
print("weights is:", perceptron.weights)
print("bias is:", perceptron.bias)
result = perceptron.predict([3, 3])
print("prediction:", result)