关注
第一题,信息增益代码 #include <bits/stdc++.h>
#include <map>
#include <math.h>
using namespace std;
typedef struct data{
int clas[2];
}data;
int n;
map<int,data> mp;
int classify[2] = {0};
double cpt_entroy(int m[]){
int nu = m[0] + m[1];
double first = 0;
double second = 0;
if(m[0] != 0){
double tmp = 1.0 * m[0] / nu;
first = -1 * tmp * log(tmp) / log(2);
}
if(m[1] != 0){
double tmp = 1.0 * m[1] / nu;
second = -1 * tmp * log(tmp) / log(2);
}
double entroy = 1.0 * nu / n * (first + second);
return entroy;
}
int main() {
int a, b;
char indep;
cin >> n;
for(int i=0; i<n; ++i){
cin>>a>>indep>>b;
classify[b]++;
if(mp.find(a) == mp.end())
mp[a].clas[b] = 0;
mp[a].clas[b] += 1;
}
double gain_all = cpt_entroy(classify);
double ans = gain_all;
map<int, data>::iterator it;
for(it = mp.begin(); it != mp.end(); ++it) {
double pro = cpt_entroy(it->second.clas);
ans -= pro;
}
int dans = (ans + 0.005) * 100;
double res = double(dans) / 100;
printf("%.2f\n",res);
return 0;
}
查看原帖
点赞 2
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 打工人的工作餐日常 #
51634次浏览 402人参与
# 哪些公司真双非友好? #
15055次浏览 81人参与
# 追觅科技求职进展汇总 #
17741次浏览 120人参与
# 你觉得技术面多长时间合理? #
98744次浏览 716人参与
# 26届的你们有几段实习? #
39558次浏览 449人参与
# 月薪多少能在一线城市生存 #
22366次浏览 271人参与
# 双非能在秋招上岸吗? #
220873次浏览 1168人参与
# 你后悔自己读研吗? #
17312次浏览 229人参与
# 非技术2023笔面经 #
248479次浏览 2412人参与
# 你以为的实习VS真实的实习 #
24434次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
117143次浏览 808人参与
# 你认为哪些项目算烂大街? #
16081次浏览 265人参与
# 机械校招之路总结 #
93509次浏览 1893人参与
# 学历贬值真的很严重吗? #
23409次浏览 166人参与
# 你被哪些公司秒挂过? #
29463次浏览 237人参与
# 产品实习,你更倾向大公司or小公司 #
159378次浏览 1964人参与
# 网申一定要掌握的小技巧 #
10672次浏览 66人参与
# 找工作时的取与舍 #
82595次浏览 589人参与
# 最难的技术面是哪家公司? #
8898次浏览 71人参与
# 机械人,你拿到几个offer啦 #
38739次浏览 320人参与