【模式识别与机器学习】L1 感知器
·
PLA输出【离散类别】
核心公式
h(x) = sign(∑i=1dwixi−threshold)sign(∑_{i=1}^{d}w_ix_i-threshold)sign(∑i=1dwixi−threshold)
增广形式:x0=1,w0=−threshold,h(x)=sign(wTx)x_0 = 1,w_0 = -threshold,h(x) = sign(w^Tx)x0=1,w0=−threshold,h(x)=sign(wTx)
其中w是权重向量,x是输入特征向量,sign是符号函数
1.PLA感知器算法
寻找最优权重w,使得损失函数lin=0l_{in}=0lin=0
【损失函数】ℓin=[[yn≠yn^]]ℓ_{in}=[[y_n≠\hat{y_n}]]ℓin=[[yn=yn^]] 即0-1损失函数
【步骤】
- 初始化:w0=0
- 迭代:对于错分样本 (xn,yn)(x_n,y_n)(xn,yn),更新权重wt+1=wt+ynxnw_{t+1}=w_t+y_nx_nwt+1=wt+ynxn
- 终止:所有样本都被正确分类或达到最大迭代次数
注意:迭代结果与样本遍历顺序相关
2.收敛性分析
【证明】线性可分情况下,PLA 经有限次迭代必收敛到正确分类面。
证明逻辑:wtw_twt与wfw_fwf方向逐步接近,且wtw_twt模长增长有界,迭代次数上界:T≤R2ρ2T≤\frac{R^2}{ρ^2}T≤ρ2R2
其中R2=maxn∣∣xn∣∣2R^2=max_n||x_n||^2R2=maxn∣∣xn∣∣2(样本最大模长平方),ρ=minnynwfT∣∣wf∣∣xnρ=min_ny_n\frac{w_f^T}{||w_f||}x_nρ=minnyn∣∣wf∣∣wfTxn(样本最小规范间隔)
3.Pocket算法——处理线性不可分问题
【步骤】
- 初始化:w0=0w_0=0w0=0,口袋权重w^=w0\hat{w}=w_0w^=w0
- 迭代更新:若wtw_twt错分样本,更新wt+1=wt+ynxnw_{t+1}=w_t+y_nx_nwt+1=wt+ynxn;若wt+1w_{t+1}wt+1错分样本数少于w^\hat ww^,则替换w^=wt+1\hat w=w_{t+1}w^=wt+1
- 停止条件:达到迭代次数
附录:
PLA关键代码(以二维数据为例)
# PLA算法实现
def pla_train(X, y, max_iter=1000, random_state=None):#max_iter指最大迭代次数
n_samples, n_features = X.shape
# 样本增广:第一列加1,增广后格式[1, x1, x2]
X_augmented = np.hstack([np.ones((n_samples, 1)), X])
# 初始化增广权向量:维度n_features+1
w_augmented = np.zeros(n_features + 1)
for _ in range(max_iter):
# 寻找误分类样本
misclassified = []
for i in range(n_samples):
if y[i] * np.dot(w_augmented, X_augmented[i]) <= 0:
misclassified.append(i)
# 若所有样本正确分类,停止迭代
if not misclassified:
print(f"PLA在第{_+1}次迭代收敛,所有样本正确分类")
break
# 随机选择一个误分类样本更新权向量
i = np.random.choice(misclassified)
w_augmented += y[i] * X_augmented[i]
return w_augmented
def pla_predict(X, w_augmented): # 预测函数
n_samples = X.shape[0]
# 预测函数增广
X_augmented = np.hstack([np.ones((n_samples, 1)), X])
# 决策值计算:w0*1 + w1*x1 + w2*x2
scores = np.dot(X_augmented, w_augmented)
return np.where(scores >= 0, 1, -1)
更多推荐

所有评论(0)