我一直在尝试在Ruby中实现局部加权逻辑回归算法。据我所知,这个算法目前还没有库,而且可用信息很少,所以很难。
我的主要资源是dissertation of Dr. Kan Deng,他在其中描述了我觉得非常清晰的细节算法。到目前为止,我在图书馆的工作是here。
我在尝试计算B
(测试版)时遇到了麻烦。据我所知,B
是一个(1+d x 1)
向量,表示特定点的局部加权。之后,该点的pi
(正输出的概率)是基于该点的B
的sigmoid函数。要获得B
,请递归使用Newton-Raphson算法一定次数,可能不超过十次。
第66页的公式4-4,Newton-Raphson算法本身对我没有意义。根据我对X
和W是什么的理解,(x.transpose * w * x).inverse * x.transpose * w
应该是(1+d x N)
矩阵,与B
不匹配,(1+d x 1)
。那么,唯一可行的方法是,如果e是(N x 1)
向量。
在第67页的顶部,在图片下方,邓医生只是说e是一个比例,这对我来说没有意义。是Eu Euler's Constant,恰好这个比例总是为2.718:1,还是其他的呢?无论哪种方式,对我而言,解释似乎并没有暗示它是一个载体,让我感到困惑。
使用pi'
对我来说也很困惑。公式4-5,sigmoid函数的导数w.r.t. B,给出常数乘以向量或向量。但是,根据我的理解,pi'
应该是一个数字,乘以w并形成权重算法W的对角线。
所以,我的两个主要问题是,第67页的e
是什么,我需要1xN
矩阵,以及4-5中的pi'
怎么样?一个数字?
我意识到这是一个难以回答的问题,所以如果有一个好的答案,那么我会在几天后回来并给它五十分的赏金。我会给邓博士发一封电子邮件,但是我无法知道他在1997年后发生了什么事。
如果任何人对此算法有任何经验或知道任何其他资源,我们将非常感谢您的帮助!
答案 0 :(得分:5)
据我所知,这只是Logistic回归的一个版本,其中对数似然函数中的项具有乘法权重,具体取决于它们与您尝试分类的点的距离。我首先要熟悉逻辑回归的解释,例如http://czep.net/stat/mlelr.pdf。你提到的“e”似乎与Euler的常量完全无关 - 我认为他正在使用e来表示错误。
如果你可以从Ruby调用Java,你可以使用http://weka.sourceforge.net/doc.stable/weka/classifiers/functions/Logistic.html中描述的Weka中的逻辑分类器 - 这说“虽然原始Logistic回归不处理实例权重,但我们修改了算法稍微处理实例权重。“如果没有别的,你可以下载它并查看它的源代码。如果你这样做,请注意它是一种相当复杂的方法 - 例如,他们事先检查是否所有点实际上都在输入空间的某个子空间中,并且如果它们那么向下投影。