20180904 携程 KL散度 和 单变量信息增益,求讨论




KL距离,两分布距离不一样长咋搞?
单变量信息增益是和决策树有关么。。。

#携程#
全部评论
信息增益直接计算两个类的概率,计算信息熵就可以了吧
点赞 回复 分享
发布于 2018-09-04 20:56
概率统计题,但是我也只过了66.67%
点赞 回复 分享
发布于 2018-09-04 20:56
KL也是一样的,计算每个类的概率,按照公式把每一类加起来就可以
点赞 回复 分享
发布于 2018-09-04 20:57
我感觉没有ac是因为精度问题,对于题目我觉得我的理解应该是对的
点赞 回复 分享
发布于 2018-09-04 20:57
膜拜中,已经慌得不行,感觉没理解题目。。
点赞 回复 分享
发布于 2018-09-04 20:59
三道题都是把公式打一遍
点赞 回复 分享
发布于 2018-09-04 21:00
不明白为什么KL散度一直是66.7%?大佬有知道为什么么的吗
点赞 回复 分享
发布于 2018-09-04 21:04
第一题信息熵稳定0%,劝退,第二题66.7%,第三题90%,选择随便选233
点赞 回复 分享
发布于 2018-09-04 21:08
第一题,信息增益代码 #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; }
点赞 回复 分享
发布于 2018-09-05 09:22

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务