https://zhuanlan.zhihu.com/p/462734871
int main() {
vector<int> label = { 1,0,0 };
vector<double> pre = { 0.9, 0.8, 0.3 };
vector<double> pos;
vector<double> neg;
int n = label.size();
double auc = 0;
int num = 0;
for (int i = 0; i < n; ++i) {
if (label[i] == 0) neg.push_back(pre[i]);
else pos.push_back(pre[i]);
}
for (auto i : pos) {
for (auto j : neg) {
num++;
if (i > j) auc += 1;
else if (i == j) auc += 0.5;
}
}
cout << auc<<endl;
auc /= num;
cout << auc << endl;
return 0;
}
bool f(pair<int, double> p1, pair<int, double> p2) {
if (p1.second < p2.second) return true;
return false;
}
int main() {
vector<int> label = { 1,0,0 };
vector<double> pre = { 0.9, 0.8, 0.3 };
vector<pair<int, double>> v;
int n = label.size();
double auc = 0;
for (int i = 0; i < n; ++i) {
v.push_back({ label[i], pre[i] });
}
// for (int i = 0; i < n;++i) {
// cout << v[i].first << " " << v[i].second << endl;
//}
sort(v.begin(), v.end(), f);
//for (int i = 0; i < n; ++i) {
// cout << v[i].first << " " << v[i].second << endl;
//}
int pos = 0, neg = 0;
for (int i = 0; i < n; ++i) {
if (v[i].first == 1) {
pos++;
auc = auc + i + 1;
}
else neg++;
}
auc = (auc - pos * (pos + 1) / 2) / (pos * neg);
cout << auc;
}
缺一个分数相同加0.5