我已经开始使用Vowpal Wabbit进行逻辑回归,但是我无法重现它给出的结果.也许它有一些无证的"魔法",但有没有人能够复制/验证/检查逻辑回归的计算?
例如,通过下面的简单数据,我们的目标是模拟age预测的方式label.很明显,当年龄增加观察到1增加的可能性时,存在强烈的关系.
作为一个简单的单元测试,我使用了下面的12行数据:
age label
20 0
25 0
30 0
35 0
40 0
50 0
60 1
65 0
70 1
75 1
77 1
80 1
Run Code Online (Sandbox Code Playgroud)
现在,使用R,SPSS或甚至手动对此数据集执行逻辑回归,生成一个看起来像的模型 L = 0.2294*age - 14.08.因此,如果我使用年龄,并使用logit变换prob = 1 /(1 + EXP(-L)),我可以获得预测的概率,其范围从0.0001第一行到0.9864最后一行,如合理预期的那样.
如果我在Vowpal Wabbit插入相同的数据,
-1 'P1 |f age:20
-1 'P2 |f age:25
-1 'P3 |f age:30
-1 'P4 |f age:35
-1 'P5 |f age:40 …Run Code Online (Sandbox Code Playgroud) 我有一个我正在尝试使用的模型LogisticRegression,sklearn它具有几千个功能和大约60,000个样本.我正在尝试适应模型,它现在已经运行了大约10分钟.我正在运行它的机器有几千兆字节的RAM和几个核心可供使用我想知道是否有任何方法可以加快这个过程
编辑 该机器有24个核心,这里是顶部的输出,以提供内存的概念
Processes: 94 total, 8 running, 3 stuck, 83 sleeping, 583 threads 20:10:19
Load Avg: 1.49, 1.25, 1.19 CPU usage: 4.34% user, 0.68% sys, 94.96% idle
SharedLibs: 1552K resident, 0B data, 0B linkedit.
MemRegions: 51959 total, 53G resident, 46M private, 676M shared.
PhysMem: 3804M wired, 57G active, 1042M inactive, 62G used, 34G free.
VM: 350G vsize, 1092M framework vsize, 52556024(0) pageins, 85585722(0) pageouts
Networks: packets: 172806918/25G in, 27748484/7668M out.
Disks: 14763149/306G read, 26390627/1017G written. …Run Code Online (Sandbox Code Playgroud) 我正在使用scikit对垃圾邮件/火腿数据进行逻辑回归.X_train是我的训练数据和y_train标签('垃圾邮件'或'火腿'),我训练我的LogisticRegression:
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
如果我想获得10倍交叉验证的准确度,我只想写:
accuracy = cross_val_score(classifier, X_train, y_train, cv=10)
Run Code Online (Sandbox Code Playgroud)
我认为通过这种方式简单地添加一个参数也可以计算精度和召回率:
precision = cross_val_score(classifier, X_train, y_train, cv=10, scoring='precision')
recall = cross_val_score(classifier, X_train, y_train, cv=10, scoring='recall')
Run Code Online (Sandbox Code Playgroud)
但它导致ValueError:
ValueError: pos_label=1 is not a valid label: array(['ham', 'spam'], dtype='|S4')
Run Code Online (Sandbox Code Playgroud)
它与数据有关(我应该对标签进行二值化吗?)还是更改cross_val_score功能?
先感谢您 !
python precision machine-learning scikit-learn logistic-regression
我一直在回顾一下Andrew Ng在机器学习中的一个例子,我在https://github.com/jcgillespie/Coursera-Machine-Learning/tree/master/ex3中找到了这个例子.该示例处理逻辑回归和一对一分类.我对这个功能有疑问:
function [all_theta] = oneVsAll(X, y, num_labels, lambda)
%ONEVSALL trains multiple logistic regression classifiers and returns all
%the classifiers in a matrix all_theta, where the i-th row of all_theta
%corresponds to the classifier for label i
% [all_theta] = ONEVSALL(X, y, num_labels, lambda) trains num_labels
% logisitc regression classifiers and returns each of these classifiers
% in a matrix all_theta, where the i-th row of all_theta corresponds
% to the classifier for label i
% Some useful …Run Code Online (Sandbox Code Playgroud) 我有这个代码用于逻辑回归的成本,在matlab中:
function [J, grad] = costFunction(theta, X, y)
m = length(y); % number of training examples
thetas = size(theta,1);
features = size(X,2);
steps = 100;
alpha = 0.1;
J = 0;
grad = zeros(size(theta));
sums = [];
result = 0;
for i=1:m
% sums = [sums; (y(i))*log10(sigmoid(X(i,:)*theta))+(1-y(i))*log10(1-sigmoid(X(i,:)*theta))]
sums = [sums; -y(i)*log(sigmoid(theta'*X(i,:)'))-(1-y(i))*log(1-sigmoid(theta'*X(i,:)'))];
%use log simple not log10, mistake
end
result = sum(sums);
J = (1/m)* result;
%gradient one step
tempo = [];
thetas_update = 0;
temp_thetas = [];
grad = temp_thetas; …Run Code Online (Sandbox Code Playgroud) 我试图复制从Stata到R的logit回归.在Stata中我使用选项"robust"来获得强大的标准误差(异方差性一致的标准误差).我能够从Stata中复制完全相同的系数,但是我无法使用"三明治"包具有相同的强大标准误差.
我尝试了一些OLS线性回归的例子; 看起来R和Stata的三明治估算器给了我同样强大的OLS标准误差.有没有人知道Stata如何计算非线性回归的三明治估计量,在我的例子中是logit回归?
谢谢!
附加代码:在R中:
library(sandwich)
library(lmtest)
mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")
mydata$rank<-factor(mydata$rank)
myfit<-glm(admit~gre+gpa+rank,data=mydata,family=binomial(link="logit"))
summary(myfit)
coeftest(myfit, vcov = sandwich)
coeftest(myfit, vcov = vcovHC(myfit, "HC0"))
coeftest(myfit, vcov = vcovHC(myfit))
coeftest(myfit, vcov = vcovHC(myfit, "HC3"))
coeftest(myfit, vcov = vcovHC(myfit, "HC1"))
coeftest(myfit, vcov = vcovHC(myfit, "HC2"))
coeftest(myfit, vcov = vcovHC(myfit, "HC"))
coeftest(myfit, vcov = vcovHC(myfit, "const"))
coeftest(myfit, vcov = vcovHC(myfit, "HC4"))
coeftest(myfit, vcov = vcovHC(myfit, "HC4m"))
coeftest(myfit, vcov = vcovHC(myfit, "HC5"))
Run Code Online (Sandbox Code Playgroud)
塔塔:
use http://www.ats.ucla.edu/stat/stata/dae/binary.dta, clear
logit admit gre gpa i.rank, robust
Run Code Online (Sandbox Code Playgroud) 我需要在一个相对较大的数据框架上运行逻辑回归,其中包含480个条目和3个固定效果变量.固定效应var A有3233级,var B有2326级,var C有811级.总而言之,我有6370个固定效果.数据是横截面的.如果我不能使用正常glm函数运行此回归,因为回归矩阵对于我的记忆来说似乎太大了(我得到消息" Error: cannot allocate vector of size 22.9 Gb").我正在寻找在我的Macbook Air(OS X 10.9.5 8GB RAM)上运行此回归的替代方法.我也可以访问具有16GB RAM的服务器.
我试过用几种不同的方法解决这个问题,但到目前为止还没有取得令人满意的结果:
LFE/felm:使用的felm回归函数lfe包减去运行回归之前固定的效果.这完美地工作,并允许我在几分钟内将上述回归作为正常线性模型运行.但是,lfe不支持逻辑回归和glms.所以felm非常适合了解不同模型的模型拟合,但不适用于最终的逻辑回归模型.
biglm/bigglm:我想过bigglm用来将我的功能分解成更易于管理的块.然而,若干来源(例如link1,link2,link3)提到为了使其起作用,因子级别需要在块之间保持一致,即每个块必须包含每个因子变量的每个因子中的至少一个.因子A和B包含仅出现一次的级别,因此我无法将这些集合拆分为具有一致级别的不同块.如果我删除固定效应A的10个因子和B的8个因子(微小的变化),我将只剩下4个级别的因子,并且将我的数据分成4个块将使其更易于管理.然而,我仍然需要弄清楚如何对我的df进行排序,以确保我的480.000条目被分类为4个块,其中3个因子中的每个因子的每个因子级别出现至少一次.
GlmmGS/glmgs:glmmgs具有相同名称的包中的函数执行固定效果减法,如lfe使用"Gauss-Seidel"算法的逻辑回归包.不幸的是,该包已不再开发.对R来说比较新,没有深入的统计经验,我无法理解输出,也不知道如何以一种能给我正常"效果大小","模型拟合","模型拟合"的方式对其进行转换.显着性区间"glm回归摘要提供的指标.
我给包的作者发了一条消息.他们回应如下:
该包不提供与glm对象相同格式的输出.但是,在给定当前输出的情况下,您可以轻松计算大部分拟合统计量(估计的标准误差,拟合度)(在CRAN版本中,我相信当前输出是系数估计的向量,以及相关的向量标准误差;协方差分量相同,但如果你没有随机效应拟合模型,你不必担心它们).只要注意用于计算标准误差的协方差矩阵是与Gauss-Seidel算法相关的精度矩阵的对角线块的倒数,因此它们倾向于低估联合似然的标准误差.我不再维护包裹,我没有时间详细说明; 包装背后的开创性理论可以在手册中引用的论文中找到 ,其他一切都需要用笔和纸来制定:).
如果任何人都可以解释如何"轻松计算大部分拟合统计数据",使得没有任何统计学教育的人能够理解它(可能是不可能的)或者提供R代码,以示例如何实现这一点,我将是非常感谢!
Revolution Analytics:我在一台模拟Mac上的Windows 7的虚拟机上安装了革命分析企业.该程序具有一个被调用的函数RxLogit,该函数针对大型逻辑回归进行了优化.使用RxLogit我得到的功能the error (Failed to allocate 326554568 bytes. Error in rxCall("RxLogit", params) : bad allocation),所以该功能似乎也遇到了内存问题.但是,该软件使我能够在分布式计算集群上运行回归.所以我可以通过在具有大量内存的集群上购买计算时间来"解决问题".但是,我想知道革命分析程序是否提供了我不知道的任何公式或方法,这将允许我做某种类似的lfe固定效果减法操作或类似的bigglm …
短格式:
如何通过R中的梯度下降实现多类Logistic回归分类算法?可optim()当有两个以上的标签可以用吗?
MatLab代码是:
function [J, grad] = cost(theta, X, y, lambda)
m = length(y);
J = 0;
grad = zeros(size(theta));
h_theta = sigmoid(X * theta);
J = (-1/m)*sum(y.*log(h_theta) + (1-y).*log(1-h_theta)) +...
(lambda/(2*m))*sum(theta(2:length(theta)).^2);
trans = X';
grad(1) = (1/m)*(trans(1,:))*(h_theta - y);
grad(2:size(theta, 1)) = 1/m * (trans(2:size(trans,1),:)*(h_theta - y) +...
lambda * theta(2:size(theta,1),:));
grad = grad(:);
end
Run Code Online (Sandbox Code Playgroud)
和...
function [all_theta] = oneVsAll(X, y, num_labels, lambda)
m = size(X, 1);
n = size(X, 2);
all_theta = zeros(num_labels, n + 1); …Run Code Online (Sandbox Code Playgroud) 我无法解释逻辑回归的结果.我的结果变量是Decision和二进制(0或1,分别不采取或采取产品).
我的预测变量是Thoughts并且是连续的,可以是正数或负数,并且向上舍入到第二个小数点.
我想知道服用产品的概率是如何Thoughts变化的.
逻辑回归方程是:
glm(Decision ~ Thoughts, family = binomial, data = data)
Run Code Online (Sandbox Code Playgroud)
根据该模型,Thoughts对Decision(b = .72,p = .02)的概率具有显着影响.确定Decision作为以下函数的比值比Thoughts:
exp(coef(results))
Run Code Online (Sandbox Code Playgroud)
优势比= 2.07.
问题:
我如何解释比值比?
Thoughts会影响服用(或不服用)产品的几率0.07 OR Thoughts增加(减少).01,服用(不服用)产品的几率增加(减少)约2个单位?如何将比值比转换Thoughts为估计的概率Decision?
或者我只能估计Decision某一Thoughts分数的概率(即计算产品何时获得的概率Thoughts == 1)?
在我训练了LogisticRegressionModel之后,我用它转换了测试数据DF并得到了预测DF.然后当我调用prediction.show()时,输出列名称为:[label | features | rawPrediction | probability | prediction].我知道label和featrues意思,但我应该如何理解rawPrediction|probability|prediction?
r ×4
matlab ×3
python ×2
scikit-learn ×2
large-data ×1
microsoft-r ×1
mixed-models ×1
precision ×1
probability ×1
regression ×1
stata ×1
vowpalwabbit ×1