使用Python进行Logistic回归编程的建议

时间:2019-06-03 11:19:57

标签: logistic-regression

作为一个培训项目,我被要求编写一个多项式逻辑回归Python程序,在数据集上运行它,并将其与“标准”逻辑回归程序进行比较。

数据集(经过我自己的格式化和编码后)由3175个二进制序列组成,每个序列的长度为240。共有三类,我将其编码为[1,0,0],[0,1, 0]和[0,0,1]。目标是建立逻辑回归模型,以预测任何给定序列的类别。更具体地说,模型将采用以下形式:

$(e ^ {\ theta \ cdot x} / d,e ^ {\ mu \ cdot x} / d,1 / d)$ 其中$ d = e ^ {\ theta \ cdot x} + e ^ {\ mu \ cdot x} + 1 $ 和$ \ theta,\ mu $是参数向量

我想找到最小化以下成本函数的$ \ theta,\ mu $

$ \ Sum_i -y_i ^ 0 log(p_0(x_i))-y_i ^ 1 log(p_1(x_i))-y_i ^ 2 log(p_2(x_i))$ 其中y_i ^ j是第i个序列是否在类j中的指示符 p_j(x_i)是第i个序列在类j中的概率(根据模型)

我用来比较程序的标准是来自Pytorch。

这是我想到的最简单的方法:

  • 导入numpy
  • 创建可变序列以将序列存储为列表
  • 创建变量结果以将分类存储为列表
  • 定义函数e_theta_x(t,code)返回$ e ^ {t \ cdot code} $和e_mu_x(m,code),它们执行相同的操作
  • 根据上述公式定义预测(code,t,m)a
  • 根据上述公式定义成本(x,y,t,m)
  • 根据成本函数偏导数的公式来定义cost_gradient_theta(t,m,x,y)和cost_gradient_mu(t,m,x,y),我手工计算并使用Mathematica进行了确认
  • 定义gradient_descent(t,m,x,y,alpha,迭代)。在这里,t和m是theta和mu的初始猜测。通过减去alpha * cost_gradient迭代更新t和m的值;进行多次迭代。返回t和m的结束值。

我运行了10,000次代码迭代。大约花了4天18小时。我最终得到的参数值产生了0.367的成本,准确度(使用模型进行分类的可能性最大的时间比例是真实分类)为95.5%。

我认为那可能已经足够了;但是后来我运行了Pytorch逻辑回归程序。在短短几分钟内,它产生的参数值的成本为0.0488,准确度为98.3%。我的主管不满意,希望我写一个更好的程序。

我认为我不能独自写出像Pytorch一样高效的东西。据推测,他只是希望我将性能差异的数量级从4+降低到更受人尊敬的水平(也许是2?)。但是我不确定该怎么做。请给我一些建议吗?

谢谢

0 个答案:

没有答案