2-2 感知机梯度下降法的算法过程

输入:
训练数据集 T = ( x 1 , y 1 ) , ( x 1 , y 1 ) , , ( x n , y n ) T={(x_1, y_1), (x_1, y_1), \cdots, (x_n, y_n)} $,其中
x i R n y i y = 1 , + 1 , i = 1 , 2 , , n x_i \in R^n \\ y_i \in y = {-1, +1}, \\ i = 1, 2, \cdots, n
学习率为 η \eta $
输出:
w, b
感知机模型 f ( x ) = s i g n ( w x + b ) f(x) = sign(w \cdot x + b)
过程:

  1. 选取初值w_0, b_0
  2. 在训练集中选取数据 ( x i , y i ) (x_i, y_i)
  3. 如果 y i ( w x i + b ) 0 y_i(w \cdot x_i + b) \le 0 $,则
    { w w + η y i x i b b + η y i \begin{cases} w \leftarrow w + \eta y_ix_i \\ b \leftarrow b + \eta y_i \end{cases}
  4. 转至2,直至训练集中没有错误分类点
    直观解释:当一个实例点被误分类, 即位于超平面错误的一侧时,则调整w,b的值,使超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超平面越过该误分类点使其被正确划分

代码:
https://github.com/windmissing/LiHang-TongJiXueXiFangFa/blob/master/Chapter2/perceptron.ipynb

# 感知机原始形式
def perceptron(X, y, eta):
    w, b = np.zeros(X.shape[1]),0
    while ((y*(w.dot(X.T)+b))<=0).any():
        index = np.random.randint(X.shape[0])
        if y[index]*(w.dot(X[index])+b) <= 0:
            w = w + eta * y[index] * X[index]
            b = b + eta * y[index]
    def f(x):
        return np.sign(w.dot(x)+b)
    return w, b, f
发布了407 篇原创文章 · 获赞 328 · 访问量 111万+

猜你喜欢

转载自blog.csdn.net/mishifangxiangdefeng/article/details/104313876
2-2