按权重多维度排序,熵对结果的影响

昨天做数据分析遇到个有趣的问题。下面是我把实际问题虚构下的场景:

我们是古代农场主,有一群奴隶给我们种地。我们想统计出表现较好的奴隶并给他们自由。要从2个方面考量,劳动时间和劳动产量,并且希望劳动产量更重要一些。

原来的统计方式是:

order by 0.3*奴隶劳动时间/总劳动时间 + 0.7*奴隶劳动产量/总劳动产量 desc

0.3和0.7是权重。

但这样会有一个问题,就是熵的影响。因为时间基本是差不多的,奴隶没有太多假期,所以不会太少,但一个月劳动最多也是30天不会是40天。但产量是很随机的,有的人忙活一个月只有一粒米,有人有几座小山一样的谷堆。所以在这种情况下,后者的分母->∞ 则后者对结果的影响有可能忽略不计,生产一把米和生产一麻袋米的两个人,在总的谷堆山面前没太大分别,而前者的影响就很明显了,结果可能就是生产一把米的人,因为劳动时间多了几小时,结果贡献反而比一麻袋米的人大,不合理。

熵反映了数据的混乱程度。在这个场景里,时间很有序,熵不大,产量的熵很大。从统计学来说,可以计算平均值和均方差,然后用正态分布来获取合理的样本。不过这样做太复杂,我们的做法是分别取时间前100和产量前100的做中间表,这样人为减小了熵,再做统计并join结果

时间: 2024-10-09 07:36:17

按权重多维度排序,熵对结果的影响的相关文章

js数组排序,支持正反排序以及多维度排序

工作中遇到js数组排序问题,数组中存储的都是对象,于是就百度了下,利用别人的代码进行修改,最终完成可以倒序.反序,可以进行多维度排序的功能源码如下: /** * js数组排序 支持数字和字符串 * @param params * @param arrObj obj 必填 数组对象 * @param keyName string 必填 要排序的属性名称 * @param type int 选填 默认type:0 正顺 type:1反顺 */ function arrItemSort(arrObj,

指标权重确定方法之熵权法

熵最先由申农引入信息论,目前已经在工程技术.社会经济等领域得到了非常广泛的应用. 熵权法的基本思路是根据指标变异性的大小来确定客观权重. 一般来说,若某个指标的信息熵越小,表明指标值得变异程度越大,提供的信息量越多,在综合评价中所能起到的作用也越大,其权重也就越大.相反,某个指标的信息熵越大,表明指标值得变异程度越小,提供的信息量也越少,在综合评价中所起到的作用也越小,其权重也就越小. 二.熵权法赋权步骤 1. 数据标准化 将各个指标的数据进行标准化处理. 假设给定了k个指标,其中.假设对各指标

spark中自定义多维度排序

在spark中,原始的sortByKey是以map为操作对象,按照key进行排序,value跟随 如果我们要设置多维排序,就需要自定义这个key对象 该class需要 extends Ordered[T] with Serializable , 然后将这个类的对象作为sortByKey的第一个key参数,进行sort val conf = new SparkConf() conf.setAppName("thirdSort") conf.setMaster("local&qu

复合索引字段的排序对搜素的影响

索引是对数据库大数据的查询优化的一种有效的手段,索引又可分为唯一索引和复合索引 单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上面. 用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引).复合索引的创建方法与创建单一索引的方法完全一样.但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引.而且在表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度. (1)对一张表来说,如果有一个复合索引 on (col1,col2),就没有必要同时建立一个单索引

关于TreeSet的排序对于删除操作的影响

先贴上准备的代码: TreeSet<Node> list = new TreeSet<>(); Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(3); Node n4 = new Node(4); Node n5 = new Node(5); 这是Node,继承Comparable接口 protected static class Node implements Comparable<Node&

solr权重排序

在Solr权重的设置中,所有权重标准为1,意思是当权重设置大于1时,代表这个字段的权重变大,如果权重设置小于1并且大于0的时候,代表这个字段权重变小 . Map<String, Object> map = new HashMap<String, Object>();map.put(QUERY_FIELDS, "house_addr^2,owner_name");map.put(QUERY_KEYWORD, "房屋");{house_addr=

solr特点三: 排序样例汇总

目的是提供solrj 实现 查询的样例参考 单维度排序 //查询条件 query.setQuery(queryString); // add 是添加 query.addSortField(field_price, ORDER.asc); //set是覆盖,也就是后面的覆盖前面的. query.setSortField(field_price,ORDER.desc); //如果需要第一维度值相等,按第二维度继续排序的话,继续add query.addSortField(field_fans_cou

lucene 自定义评分 影响排序

前记 这段时间需要修改一个别人写的一个搜索有关的项目,恰好底层使用的是lucene搜索框架. 为什么要去修改呢,当然是搜索结果不太令人满意啦,于是去研读了项目中关于搜索的代码...... 正文 经过了几天代码的研读,最终总结出来了几条问题: 创建索引的过程,相当简单,感觉仅仅是把lucene当成关键词匹配的工具去了(需要修改索引策略) 搜索的过程也是比较简单,没有结合项目的需求,定制化搜索(搜索策略需要修改) 额,感觉上面两条好像是在说废话,感觉lucene的和核心就是索引和搜索 为了能尽快解决

达观数据搜索引擎排序实践

前言 随着互联网的深入发展,人类已然进入大数据时代.如何在浩瀚的数据海洋里高速有效的获取有价值的信息,正是促使大数据技术具备走向众多企业的潜力.搜索引擎作为获取信息的有效入口,已然经历了20多年的发展,并一直试图理解用户搜索意图以及提升搜索的精准性. Google是全球性的搜索引擎,看似简单的搜索框背后隐藏的是极其复杂的系统架构和搜索算法,其中排序(以下统称Ranking)的架构和算法更是关键部分.Google正是通过PageRank算法深刻改变搜索排序而一举击败众多竞争对手. Ranking是