我的任务是使用 Python 对 Dantzig Selector 进行编程,但我没有得到任何指导,也没有太多线性编程或数据科学方面的经验。我在 LP 模块手册或本网站的其他问题中找不到我需要的信息。
这就是问题。我正在寻找列向量^β。抱歉,我的程序的这一部分没有任何代码,因为我不知道如何解决这个问题。我尝试了几种方法,但都没有正确反映问题,所以我拒绝并删除了它们。
min||^β||l1 st ||xT(y-x^β(||l(inf) <= δ
^β 是一个 kx1 列向量和我正在寻找的 Dantzig 选择器。
- y 是观察/响应的 nx1 列向量
- X 是一个 nxk 样本矩阵,其中 k >> n
- δ 是噪声变量
到目前为止,这是我的工作代码。数据值都只是样本/占位符。我已经准备好了 X、y 和一些 δ 值。但是,我找不到合适的 LP 函数来给我 ^β。
import numpy as np
import random
import math
#n = no. runs = 5
n = 5
#k = no. variables = 23
k = 23
#y = vector of observations/responses (nx1, binary decisions)
y = np.array([[1],
[0],
[0],
[1],
[0]])
#X = predictor/sample matrix (nxk)
X = np.array([[1.1, 0, 0.7, 0.8, 0.9, 0.2, 0.3, 0.5, 0.2, 0.2, 1.2, 1.1, 0.5, 0.5, 0.7, 1.2, 1.3, 0.8, 0.9, 1.7, 1.2, 1.9, 0.9],
[0.3, 0.1, 0.7, 0.4, 0.9, 0.9, 0.1, 0.8, 0.1, 0.2, 1.1, 0, 0.9, 0.4, 1.4, 1.4, 0.1, 0.5, 1.8, 1.6, 1.2, 1.8, 0.3],
[0.1, 0.1, 0.3, 0.9, 0.7, 0.8, 0, 0.7, 0.8, 0.2, 1.1, 1.1, 0.5, 0.5, 0.8, 1.5, 0.2, 0.5, 1.6, 1.5, 1.2, 1.7, 0.5],
[1.2, 0.2, 0.9, 0.8, 0.6, 0.2, 0.3, 0.5, 0.3, 0.2, 1.2, 1.1, 0.5, 0, 0.7, 1.2, 1.3, 0.8, 0.9, 1.7, 1.2, 1.9, 0.9],
[0.2, 0.1, 0.6, 0, 0.5, 1.1, 0.2, 0.5, 0.9, 0.2, 1.2, 1.1, 0.8, 1.6, 0.5, 1.3, 0.2, 0.5, 1.7, 1.2, 1.2, 1.9, 0.1]])
#estimate missing data (0)
X_row_minima = np.where(X>0,X,X.max()).min(1)
X[X==0] = X_row_minima/2
#unit length normalize X
X = X/np.linalg.norm(X, ord=2, axis=1, keepdims=True)
#standardize y to zero mean
y = y - np.mean(y) / np.std(y)
#transpose X (kxn)
Xt = np.transpose(X)
#solve d0
Xty = np.matmul(Xt,y)
d0 = max(abs(Xty))
#generate 100 evenly-spaced d values
d = np.linspace(0, d0, 100)
这是我在这个网站上的第一篇文章。与其他人相比,我对帖子中缺乏细节表示歉意。