> For the complete documentation index, see [llms.txt](https://windmising.gitbook.io/lihang-tongjixuexifangfa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://windmising.gitbook.io/lihang-tongjixuexifangfa/perceptron2/6.md).

# 梯度下降法的算法过程

输入：\
训练数据集$$T={(x\_1, y\_1), (x\_1, y\_1), \cdots, (x\_n, y\_n)}$$，其中

$$
\begin{aligned}
x\_i \in R^n \\
y\_i \in y = {-1, +1}, \\
i = 1, 2, \cdots, n
\end{aligned}
$$

学习率为$$\eta$$\
输出：\
a, b\
感知机模型$$f(x) = sign(\sum\_{j=1}^ma\_jy\_jx\_j \cdot x + b)$$ 过程：\
1\. 选取初值a*0 = 0, b\_0 = 0*\
*2. 在训练集中选取数据*$$(x\_i, y\_i)$$ *3. 如果$$y\_i(\sum*{j=1}^ma\_jy\_jx\_j \cdot x\_i + b) \le 0$$，则

$$
\begin{cases}
a\_i \leftarrow a\_i + \eta \\
b \leftarrow b + \eta y\_i
\end{cases}
$$

1. 转至2，直至训练集中没有错误分类点 &#x20;

对偶形式中训练数据仅以内积的形式出现。为了方便，可以预先将训练集中的特征向量的内积计算出来，并以矩阵的形式存储。这个矩阵就所谓的Gram矩阵（Gram matrix）

$$
G = \[x\_i \cdot x\_j]\_{m \times m}
$$

代码：\
<https://github.com/windmissing/LiHang-TongJiXueXiFangFa/blob/master/Chapter2/perceptron-2.ipynb>

```python
def calcGramMaxtrix(X):
    m = X.shape[0]
    gram = np.zeros((m, m))
    for i in range(m):
        for j in range(i, m):
            gram[i, j] = X[i].dot(X[j])
            gram[j, i] = X[i].dot(X[j])
    return gram

def calcI(X, y, a, b, i, gram):
    #print (X.shape, y.shape, a. shape)
    sum = 0
    for j in range(X.shape[0]):
        sum += a[j] *y[j] * gram[j, i]
    return (sum + b)*y[i]

# 感知机原始形式
def perceptron(X, y, eta):
    a, b = np.zeros(X.shape[0]),0
    gram = calcGramMaxtrix(X)
    isFinished = False
    while not isFinished:
        isFinished = True
        for i in range(X.shape[0]):
            if calcI(X, y, a, b, i, gram) <= 0:
                isFinished = False
                a[i] += eta
                b += eta * y[i]
    def f(x):
        sum = 0
        for j in range(X.shape[0]):
            sum += a[j] *y[j] * X[j].dot(x)
        return sum + b
    return a, b, f
```
