# 机器学习之感知机

\$\$
f(x)=sign(wx+b)
\$\$

\$\$
sign(x)=/begin{cases}
+1, & x/geq0 //
-1, & x<0
/end{cases}
\$\$

## 如何实现

\$\$
/frac{1}{/mid/mid{w}/mid/mid}/mid{w}{x_0}+b/mid
\$\$

\$\$
-y_i(w{x_i}+b)>0
\$\$

\$\$
L=-/frac{1}{/mid/mid{w}/mid/mid}y_i(w{x}_i+b)
\$\$

\$\$
/frac{/partial}{/partial{w}}L=-{y_i}{x_i}
\$\$
\$\$
/frac{/partial}{/partial{b}}L=-{y_i}
\$\$

\$\$
/frac{/partial}{/partial{W}}L=-{y_i}{x_i}
\$\$

\$\$
W=W+/alpha{y_i}{x_i};
\$\$

## 具体实现

`load data;X = [ones(size(train_feature,1),1) train_feature]; %增加一列1，表示增广的特征n = size(X,2); %特征数+1m = size(X,1); %样本数Y = train_label; %真实类别W = zeros(n,1);  %增广的权重向量，初始全为0alpha = 1;   %学习率count = 0;  %连续正确分类的样本记数converge = 0; %是否已经收敛while converge == 0    for i=1:m        % 当前训练样本分类错误，更新参数        if Y(i)*(W'*X(i,:)') <= 0            W = W + alpha*Y(i)*X(i,:)';            count = 0;        else            count = count + 1;            if count == m                converge = 1;                break;            end;        end;    end;end;% 测试样本的特征也增加一列1test_feature = [ones(size(test_feature,1),1) test_feature];% 进行预测predict = sign(W'*test_feature')';`

1 《统计学习方法》by 李航