我一直在尝试用Ruby实现一个局部加权逻辑回归算法。据我所知,目前还没有这个算法的库,而且可用的信息很少,所以这很困难。
我的主要资源是Kan Deng博士的论文,他在论文中对算法进行了描述,我觉得这是一个相当轻松的细节。到目前为止,我在图书馆的工作就在这里。
我在计算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是一个比值,这对我来说没有意义。e是欧拉常数吗?恰好这个比值总是2.718:1,还是其他什么?不管怎样,对我来说,这种解释似乎并没有表明它是一个向量,这让我感到困惑。
pi'
的使用也让我感到困惑。方程4-5是S形函数w.r.t.B的导数,它给出了一个常数乘以一个向量或一个向量。然而,根据我的理解,pi'
只是一个数字,乘以w,形成权重算法w的对角线。
所以,我在这里的两个主要问题是,第67页的e
是什么?我需要的1xN
矩阵是什么?方程4-5中的pi'
是如何得到一个数字的?
我意识到这是一个很难回答的问题,所以如果有一个好的答案,我会在几天后回来,给它50分的奖励。我会给邓发一封电子邮件,但我一直没能弄清楚1997年后他发生了什么。
如果有人对这个算法有任何经验或知道任何其他资源,任何帮助都将不胜感激!
据我所见,这只是Logistic回归的一个版本,其中对数似然函数中的项具有乘法权重,取决于它们与您试图分类的点的距离。我首先要熟悉逻辑回归的解释,比如http://czep.net/stat/mlelr.pdf.你提到的"e"似乎与欧拉常数完全无关——我认为他用e来表示错误。
如果您可以从Ruby调用Java,那么您可能可以使用Weka中的逻辑分类器,如http://weka.sourceforge.net/doc.stable/weka/classifiers/functions/Logistic.html-上面写着"虽然最初的逻辑回归不处理实例权重,但我们对算法进行了一点修改,以处理实例权重。"如果没有其他内容,你可以下载它并查看其源代码。如果你这样做,请注意,这是一种相当复杂的方法-例如,他们事先检查是否所有点都位于输入空间的某个子空间中,如果确实如此,则向下投影几个维度