这道题要求在只使用 numpy、pandas 的前提下,手写实现二分类的 Logistic Regression,并且训练方法固定为 IRLS,也就是迭代重加权最小二乘。
设训练集特征矩阵为 X,标签为 y,参数为 w。
为了表示截距项,需要先在特征矩阵最左侧拼接一列全 1。这样模型形式为:
小美正在为美团的优惠券推荐业务开发一个预测模型,她需要使用对数几率回归(Logistic Regression)来预测用户是否会购买某个优惠券。请你帮助她,在仅使用 numpy、pandas 的前提下,手写实现该模型并对测试样本给出类别预测。
具体流程
1.读取数据
train:二维列表,代表用户历史行为数据。最后一列为标签 y∈{0,1}(1 代表购买,0 代表未购买),前 m 列为用户的数值特征
test:二维列表,仅包含与训练集同维度的用户特征
2.模型训练(IRLS 闭式迭代)
给训练特征矩阵最左侧拼接全 1 列(截距项)
使用迭代重加权最小二乘(IRLS)求极大似然解 w(t+1)=w(t)−(X⊤WX+εI)−1X⊤(p−y)
p=σ(Xw),σ(z)=1/(1+e−z)
W=diag(pi(1−pi))
微扰项 ε=10−8 加在 Hessian 对角,防止矩阵奇异
收敛判据:∥w(t+1)−w(t)∥2<10−6 或迭代 30 次即停
3.预测
测试集同样拼接截距列
计算 p^=σ(Xtast w^),,取 y^=1[p^≥0.5] 作为预测标签
标准输入仅一行 JSON,例如:
{
"train": [[1,2,0],
[2,1.8,0],
[5,5,1],
[4.5,2,1]],
"test": [[1.5,1.9],
[5.0,5.1]]
}
训练部分最后一列是标签
所有值均为整数 / 浮点数,无空行
仅输出一行:[0,1]
长度等于测试样本数
使用合法 JSON,逗号后加空格
为确保通过测试用例,仅允许使用 Numpy 和 Pandas
输入
{"train": [[1,2,0],[2,1.8,0],[5,5,1],[4.5,5.2,1]],"test":[[1.5,1.9],[5,5.1]]}
输出
[0,1]