从零构建线性分类模型:模型推理步骤咨询
你的线性分类预测思路完全正确!
对于你训练的{-1,1}二分类线性模型,只需要计算输入样本特征与模型参数的点积,根据结果的正负判断类别就可以了——这正是线性分类模型(比如感知机、支持向量机)的核心预测逻辑。
你的示例验证
我们用你给出的例子来确认:
输入样本(5维特征):
[1, 1, -1, -1, -1]
模型参数:
[7, 5, -2, 0, 3]
点积计算:
1*7 + 1*5 + (-1)*(-2) + (-1)*0 + (-1)*3 = 7+5+2+0-3=11
因为11>0,所以预测类别为1,和你的结论完全一致。
关于你的训练代码的补充说明
你的learn_reg_ERM函数实现了带正则化的经验风险最小化训练,这里有几个小细节可以帮你更顺畅地完成预测:
- 确保你的
loss函数是适配{-1,1}分类的损失(比如hinge损失,这是SVM的标准损失),如果用了平方损失,虽然预测逻辑依然成立,但模型的分类效果可能会打折扣。 - 预测阶段可以直接用NumPy的
sign函数简化代码:
这个函数会直接返回-1或1,完美匹配你的类别取值。def predict(x, w): return np.sign(np.dot(x, w)) - 你的正则项(
reg函数)是用来防止模型过拟合的,这部分不影响预测逻辑,训练阶段正常使用即可。
你的训练代码格式化版
import numpy as np def learn_reg_ERM(X,y,lbda): # define consts max_iter = 200 e = 0.001 alpha = 1. # init model w = np.random.randn(X.shape[1]) g_old = None for k in np.arange(max_iter): # dot product/scalar product h = np.dot(X,w) # calculate loss and gradient of loss l,lg = loss(h, y) # print 'loss: {}'.format(np.mean(l)) # calculate regularizers and gradient of regularizer at point w r,rg = reg(w, lbda) # calc loss + regularizer gradient g = np.dot(X.T,lg) + rg if (k > 0): # update alpha alpha = alpha * (np.dot(g_old.T,g_old))/(np.dot((g_old - g).T,g_old)) w = w - alpha * g # check if minimum is found if (np.linalg.norm(alpha * g) < e): break g_old = g return w
内容的提问来源于stack exchange,提问作者User12547645
相关产品推荐
相关产品推荐

