【发布时间】:2014-09-09 15:41:47
【问题描述】:
我有一个 Python 数组,其中包含 日期,表示某一现象在特定年份的发生次数。该向量包含 200 个不同的日期,每个日期重复一定次数。重复是现象发生的次数。我设法使用以下代码 sn-p 计算并绘制了 matplotlib 的累积和:
counts = arange(0, len(list_of_dates))
# Add the cumulative sum to the plot (list_of_dates contains repetitions)
plt.plot(list_of_dates, counts, linewidth=3.0)
蓝色表示累积和的曲线,其他颜色表示我想获得的参数。但是,我需要蓝色曲线的数学表示才能获得这些参数。我知道这种类型的曲线可以使用逻辑回归进行调整,但是我不明白如何在 Python 中做到这一点。
首先我尝试使用来自 Scikit-learn 的
LogisticRegression,但后来我意识到他们似乎正在使用此模型进行机器学习 classification(和其他类似的东西),不是/strong> 我想要什么。-
然后我想我可以直接进入逻辑函数的定义,并尝试自己构建它。我找到了this thread,建议使用
scipy.special.expit来计算曲线。看来这个功能已经实现了,所以我决定使用它。所以我这样做了:target_vector = dictionary.values() Y = expit(target_vector) plt.plot(list_of_dates, y, linewidth=3.0)
我得到了一个包含 209 个元素(与 target_vector 相同)的向量,如下所示:[ 1. 0.98201379 0.95257413 0.73105858 ... 0.98201379 1. ]。然而,图形输出看起来就像一个孩子在抓纸,而不是像图片中那样漂亮的 sigmoid 曲线。
我还检查了其他 Stack Overflow 线程(this、this),但与它们相比,我想我需要做的只是一个玩具示例。我只需要数学公式来计算一些快速简单的参数。
有没有办法做到这一点并获得 sigmoidal 函数的数学表示?
非常感谢!
【问题讨论】:
-
逻辑回归确实是一个分类问题。我认为您正在寻找具有 logit 链接函数的广义线性模型。我从来没有在 python 中这样做过,但
statsmodels为 GLM 提供了许多不同链接功能的实现。我很确定你也会在那里找到一个 logit 回归模型。 -
我一直在检查您在逻辑回归类别中提到的包,据我(可怜的)知识,似乎更倾向于“机器学习分类”问题,而不是“曲线拟合”问题,到目前为止,我认为这是我需要的:曲线的数学描述。也许我在最初的帖子中滥用了这些条款。 :)
标签: python numpy matplotlib scipy logistic-regression