求问我的算法实现到底哪里出错了?

yangz626 2019-08-11 10:09:37
算法:





代码:
vector<double> Duchi_mech(double eps, map<int, pair<double, double>>& Numeric, fmat& NX, vector<double>& truenumeric, double B) {

int d = NX.n_rows;
vector<double> noisynumeric_Duchi;
noisynumeric_Duchi.resize(d, 0);

for (int i_1 = 0; i_1 < NX.n_cols; i_1++) {

fvec tuple = NX.unsafe_col(i_1);
vec v = randu<vec>(Numeric.size());
int j = 0;
for (map<int, pair<double, double>>::iterator itr = Numeric.begin(); itr != Numeric.end(); itr++, j++) {
int i = itr->first;
int bit = 0;

if (v[j] <= 0.5 + tuple[i] / 2.0) bit = 1;
v[j] = 2.0*bit - 1.0;
}

int T = 0;
double pia_double = exp(eps) / (exp(eps) + 1);

if (randu() <= pia_double) T = 1;
vec z;

while (1) {
z = (randi<vec>(Numeric.size(), distr_param(0, 1))) * 2 - 1;

double vl = dot(z, v);

if (T == 1 && vl >= 0) {
break;
}
if (T == 0 && vl <= 0) {
break;
}
}

int k = 0;
for (map<int, pair<double, double>>::iterator itr = Numeric.begin(); itr != Numeric.end(); itr++, k++) {
noisynumeric_Duchi[itr->first] += z(k)*B;
}
}

double error_Duchi = 0;

for (map<int, pair<double, double>>::iterator itr = Numeric.begin(); itr != Numeric.end(); itr++) {
double t = fabs(noisynumeric_Duchi[itr->first] / NX.n_cols - truenumeric[itr->first] / NX.n_cols);
error_Duchi += t * t;
}

error_Duchi /= Numeric.size();
vector<double> rv;
rv.push_back(error_Duchi);
return rv;
}
...全文
11 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧