如何解决线性规划与迭代加权最小二乘法的运行时间
我试图进行最小绝对偏差回归(L1回归)。我通过设计一个线性程序并使用CVXOPT(在Python中)解决了这一问题。特征数量(包括常数)为13,样本数量约为100K。花了许多小时才能完成。
然后我意识到可以使用statsmodels' QuantReg
运行q=0.5
。花了几秒钟。
我读到他们使用迭代加权最小二乘法(IRLS)。
为此目的,IRLS是否比线性编程要快,或者线性优化问题的表达方式不同,并且在更好的求解器(如Gurobi)上使用,会大大减少线性程序的运行时间吗?
我问的原因是因为我想尝试一个损失函数,该函数涉及两个具有不同权重的绝对函数的总和。我相信我也可以使用IRLS来解决该问题,但是我不确定,我对线性编程更满意。
我用于线性程序的公式如下:
CVXOPT的结果代码如下:
def l1_fit(x,y):
'''
:param x: feature matrix
:param y: label vector
:return: LAD coefficients
The problem I construct is:
min c'*(v|A)
subject to:
(-I|x)*(v|A)<=y
(-I|-x)*(v|A)<=-y
'''
c = matrix(np.concatenate((np.ones(y.shape[0]),np.zeros(x.shape[1]))).astype(float).tolist(),(y.shape[0]+x.shape[1],1),'d')
G = scipy_sparse_to_spmatrix(np.transpose(hstack((vstack((-identity(y.shape[0]),np.transpose(x))),vstack((-identity(y.shape[0]),np.transpose(-x))))).astype(float)))
h = matrix(np.concatenate((y,-y)).astype(float).tolist(),(2*y.shape[0],'d')
sol = lp(c,G,h)
return sol[1][y.shape[0]:]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。