- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我已经阅读了很多关于生成 tagcloud 权重的对数分布的正确方法的教程。他们中的大多数将标签分组为步骤。这对我来说似乎有些愚蠢,所以我根据我所读的内容开发了自己的算法,以便它沿着阈值和最大值之间的对数曲线动态分布标签的计数。这是它在 python 中的本质:
from math import log
count = [1, 3, 5, 4, 7, 5, 10, 6]
def logdist(count, threshold=0, maxsize=1.75, minsize=.75):
countdist = []
# mincount is either the threshold or the minimum if it's over the threshold
mincount = threshold<min(count) and min(count) or threshold
maxcount = max(count)
spread = maxcount - mincount
# the slope of the line (rise over run) between (mincount, minsize) and ( maxcount, maxsize)
delta = (maxsize - minsize) / float(spread)
for c in count:
logcount = log(c - (mincount - 1)) * (spread + 1) / log(spread + 1)
size = delta * logcount - (delta - minsize)
countdist.append({'count': c, 'size': round(size, 3)})
return countdist
基本上,如果不对个体计数进行对数计算,它会在点 (mincount, minsize) 和 (maxcount, maxsize) 之间生成一条直线。
该算法很好地近似了两点之间的曲线,但有一个缺点。 mincount 是一个特例,它的对数为零。这意味着 mincount 的大小将小于 minsize。我曾尝试编造数字来尝试解决这种特殊情况,但似乎无法解决问题。目前,我只是将 mincount 视为一种特殊情况,并将“or 1
”添加到 logcount 行。
有没有更正确的算法来画两点之间的曲线?
3 月 3 日更新:如果我没记错的话,我正在记录计数,然后将其代入线性方程。换句话说,在 y=lnx 中,x=1,y=0 时,对特殊情况进行描述。这就是 mincount 发生的情况。但 mincount 不能为零,标签未被使用 0 次。
尝试代码并插入您自己的数字进行测试。将 mincount 视为特例对我来说很好,我觉得这比解决这个问题的任何实际解决方案都要容易。我只是觉得必须对此有一个解决方案,而且可能有人想出了一个解决方案。
4 月 6 日更新:一个简单的 google搜索出现了很多我读过的教程,但是 this可能是最完整的阶梯标签云示例。
4 月 28 日更新:响应 antti.huima 的解决方案:绘制图形时,您的算法创建的曲线位于两点之间的线下方。我一直在尝试调整周围的数字,但似乎仍然无法想出一种方法将该曲线翻转到该线的另一侧。我猜想如果将函数更改为某种形式的对数而不是指数,它将完全满足我的需要。那是对的吗?如果是这样,谁能解释如何实现这一目标?
最佳答案
感谢 antti.huima 的帮助,我重新思考了我想做的事情。
采用他的解题方法,我想要一个等式,其中 mincount 的对数等于两点之间的线性方程。
weight(MIN) = ln(MIN-(MIN-1)) + min_weight
min_weight = ln(1) + min_weight
虽然这给了我一个很好的起点,但我需要让它通过点 (MAX, max_weight)。它需要一个常量:
weight(x) = ln(x-(MIN-1))/K + min_weight
求解 K 我们得到:
K = ln(MAX-(MIN-1))/(max_weight - min_weight)
因此,将这一切放回到一些 python 代码中:
from math import log
count = [1, 3, 5, 4, 7, 5, 10, 6]
def logdist(count, threshold=0, maxsize=1.75, minsize=.75):
countdist = []
# mincount is either the threshold or the minimum if it's over the threshold
mincount = threshold<min(count) and min(count) or threshold
maxcount = max(count)
constant = log(maxcount - (mincount - 1)) / (maxsize - minsize)
for c in count:
size = log(c - (mincount - 1)) / constant + minsize
countdist.append({'count': c, 'size': round(size, 3)})
return countdist
关于algorithm - 两点之间的对数分布曲线的正确算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604953/
我有两个项目。一个项目正在运行,没有任何问题。它是从 gitlab 下载的。另一个项目是从 github 下载的。 github项目有这个问题。我想使用默认的 gradle 分布。我想知道我做错了什么
我正在通过我学习的大学提供的 VNC 软件(远程访问)使用 IBM bigInsights,但我无法通过该桌面访问 Internet。为了使用互联网上的一些数据样本,我决定安装 Hadoop 在我的笔
所以,这非常简单,我有一个包含嵌套列表的列表,如下所示: List( *list1* List(List("n1", "n3"), List("n1", "n4"), List("n3", "n4")
我有以下示例。 prefix = ['blue ','brown '] suffix = [('dog','shoes','bike'), ('tree','cat','car')] 我想获得一个如下
我创建了一项调查并将其发送出去。该调查要求用户提供电子邮件,然后要求他们从包含 8 个不同选项的下拉菜单中选择要吃哪顿饭。有些人使用同一封电子邮件多次填写调查,但食物选择不同。 我有一个如下所示的 M
我在 Python 中使用 plotly 来创建由某些分类变量着色的美国县的等值线。由于县非常小,因此图像中的边界线占主导地位。我怎样才能摆脱它们(或将它们的宽度设置为零)? 到目前为止的代码和输出(
我们有qgamma在 R 和 gamm.inv在 excel 中,我无法使用 invgamma 获得相同的结果python中的函数。例如在excel中GAMMA.INV(0.99,35,0.08)=4
过去几年我经常使用 Docker,但对于 Kubernetes 来说我还是个新手。我从今天开始,与我以前使用 Docker swarm 的方式相比,我正在努力思考 Pod 概念的实用性。 假设我有一个
我有一个 UIStackView然而,subViews的第一个 View 是 UILabel它没有相应地调整它的大小。 我的代码如下; private let stackView: UIStackVi
我想绘制自由度为 1、2、5 和 10 的 Student t 分布;所有在一个图中,并为图中的每个分布使用不同的颜色。此外,在 Canvas 的左上角创建一个图例,并增加 df = 1 的曲线线宽。
我对 Python 很陌生,我在互联网上浏览过,但找不到任何可以帮助我解决问题的逻辑。 我在图中有降水值,现在我需要根据图中的这些值拟合 GEV 分布。每个值等于从 1974 年到 2017 年的一年
我正在尝试复制此图 https://wind-data.ch/tools/weibull.php 我编写的代码是 import matplotlib.pyplot as plt import nump
对于家庭作业,我必须绘制文本的词频并将其与最佳 zipf 分布进行比较。 根据对数对数图中的排名绘制文本的词频计数似乎效果很好。 但是我在计算最佳 zipf 分布时遇到了麻烦。结果应该如下所示: 我不
Mathematica 具有四参数广义逆 Gamma 分布: http://reference.wolfram.com/mathematica/ref/InverseGammaDistribution
正在用 C 语言开发一个学校项目,使用 Pthreads 将一维数组分解为 tRows 和 tCols 的子矩阵。整个数组的大小为 wRows 和 wCols。假设 wCols = 4、wRows =
有没有办法得到制服int32_t没有警告的分发?我用这个uniform_int_distribution在我的代码中,但我收到警告: 54988961.cpp: In function ‘int ma
在花了相当多的时间试图了解如何在 postgresql 数据库服务器之间实现负载平衡(分配数据库处理负载)之后,我来到这里。 我有一个 postgresql 系统,每秒吸引大约 100 笔交易,而且这
所以标题已经说明了一切。我们正在开发一个开始获得大量依赖项的项目。到目前为止,我们一直在使用 setuptools,但越来越多的依赖项要么不容易安装(例如 wxPython),要么在某些使用 easy
我有以下代码: #include #include #include using namespace boost::numeric; using namespace interval_lib;
我有一个对象列表,我想以随机顺序连续访问这些对象。 我想知道是否有一种方法可以确保随机值并不总是相似。 例子。 我的列表是队列列表,我试图交错这些值以生成用于测试的真实场景。 我并不是特别想要队列 1
我是一名优秀的程序员,十分优秀!