私は Python を使用してダンツィヒ セレクターをプログラミングする任務を負っていますが、ガイドラインは与えられておらず、線形計画法やデータ サイエンスの経験もあまりありません。LP モジュールのマニュアルや、このサイトの他の質問で必要な情報が見つかりません。
これが問題です。列ベクトル ^β を探しています。この問題に対処する方法がわからないため、プログラムのこの部分のコードがありません。いくつかのアプローチを試しましたが、問題を正しく反映したものはなかったため、拒否して削除しました。
分||^β||l1 st ||xT(y-x^β(||l(inf) <= δ)
^β は kx1 列ベクトルであり、私が探しているダンツィヒ セレクターです。
- 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)
これは、このサイトでの私の最初の投稿です。他の投稿と比較して、投稿の詳細が不足していることをお詫び申し上げます。