标签: logistic-regression

我的随机梯度下降的实现是否正确?

我正在尝试开发随机梯度下降,但我不知道它是否100%正确.

  • 我的随机梯度下降算法产生的成本有时与FMINUC或批量梯度下降产生的成本相差甚远.
  • 当我将学习率α设置为0.2时,批量梯度下降成本收敛,我被迫为我的随机实现设置学习率α为0.0001,因为它不会发散.这是正常的吗?

以下是我使用10,000个元素和num_iter = 100或500的训练集获得的一些结果

    FMINUC : 
    Iteration  #100 | Cost: 5.147056e-001

    BACTH GRADIENT DESCENT  500 ITER
    Iteration #500 - Cost = 5.535241e-001

    STOCHASTIC GRADIENT DESCENT 100 ITER
    Iteration #100 - Cost = 5.683117e-001  % First time I launched
    Iteration #100 - Cost = 7.047196e-001  % Second time I launched
Run Code Online (Sandbox Code Playgroud)

Logistic回归的梯度下降实现

J_history = zeros(num_iters, 1); 

for iter = 1:num_iters 

    [J, gradJ] = lrCostFunction(theta, X, y, lambda);
    theta = theta - alpha * gradJ;
    J_history(iter) = J;

    fprintf('Iteration #%d - …
Run Code Online (Sandbox Code Playgroud)

matlab machine-learning gradient-descent logistic-regression

9
推荐指数
1
解决办法
9722
查看次数

使用MATLAB进行简单的二元逻辑回归

我正在使用MATLAB进行逻辑回归,以解决一个简单的分类问题.我的协变量是一个介于0和1之间的连续变量,而我的分类响应是0(不正确)或1(正确)的二进制变量.

我正在寻找逻辑回归来建立预测器,该预测器将输出某些输入观察的概率(例如,如上所述的连续变量)是正确的或不正确的.虽然这是一个相当简单的场景,但我在MATLAB中运行它时遇到了一些麻烦.

我的方法如下:我有一个列向量X包含连续变量的值,另一个同等大小的列向量Y包含每个值的已知分类X(例如0或1).我正在使用以下代码:

[b,dev,stats] = glmfit(X,Y,'binomial','link','logit');

然而,这给了我无意义的结果,其中p = 1.000,系数(b)非常高(-650.5,1320.1),并且相关的标准误差值大约为1e6.

然后我尝试使用其他参数来指定二项式样本的大小:

glm = GeneralizedLinearModel.fit(X,Y,'distr','binomial','BinomialSize',size(Y,1));

这给了我更符合我的预期的结果.我提取了系数,用于glmval创建estimate(Y_fit = glmval(b,[0:0.01:1],'logit');),并为fitting(X_fit = linspace(0,1))创建了一个数组.当我使用原始数据和模型的图重叠时,模型figure, plot(X,Y,'o',X_fit,Y_fit'-')的结果图基本上看起来像'S'形图的下1/4,这是典型的逻辑回归图.

我的问题如下:

1)为什么我的使用glmfit给出了奇怪的结果?
2)我应该如何解决我的初始问题:给定一些输入值,它的分类是正确的概率是多少?
3)如何获得模型参数的置信区间?glmval应该能够输入stats输出glmfit,但我的使用glmfit并没有给出正确的结果.

任何评论和意见都非常有用,谢谢!

更新(2014年3月18日)

我发现mnrval似乎给出了合理的结果.我可以用[b_fit,dev,stats] = mnrfit(X,Y+1);这里Y+1只是让我的二元分类为标称之一.

我可以遍历[pihat,lower,upper] = mnrval(b_fit,loopVal(ii),stats);以获得各种pihat概率值,其中loopVal = linspace(0,1)或某些适当的输入范围和"ii = 1:length(loopVal)".

stats参数具有很大的相关系数(0.9973),但p值为b_fit0.0847和0.0845,我不太清楚如何解释.有什么想法吗?另外,为什么会 …

matlab classification probability confidence-interval logistic-regression

9
推荐指数
1
解决办法
2万
查看次数

如何使用多核处理更快地运行glm功能

我对r有点新,我想使用一个允许多核处理的软件包,以便更快地运行glm函数.我想知道是否有一种语法我可以用于此事.这是我写的一个示例glm模型,我可以添加一个使用多核的参数吗?

g<-glm(IsChurn~.,data=dat,family='binomial')
Run Code Online (Sandbox Code Playgroud)

谢谢.

parallel-processing r logistic-regression

9
推荐指数
2
解决办法
4290
查看次数

不同版本的sklearn给出了截然不同的训练结果

我们将sklearn从旧的0.13-git升级到0.14.1,并发现我们的逻辑回归分类器的性能发生了很大变化.用相同数据训练的两个分类器具有不同的系数,因此经常给出不同的分类结果.

作为实验,我使用5个数据点(高维)训练LR分类器,结果如下:

0.13的git:

clf.fit(data_test.data, y)
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l2', tol=0.0001)
np.sort(clf.coef_)
array([[-0.12442518, -0.11137502, -0.11137502, ..., 0.05428562,
0.07329358, 0.08178794]])
Run Code Online (Sandbox Code Playgroud)

0.14.1:

clf1.fit(data_test.data, y)
LogisticRegression(C=10, class_weight='auto', dual=False, fit_intercept=True,
intercept_scaling=1, penalty='l2', random_state=None, tol=0.0001)
np.sort(clf1.coef_)
array([[-0.11702073, -0.10505662, -0.10505662, ..., 0.05630517,
0.07651478, 0.08534311]])
Run Code Online (Sandbox Code Playgroud)

我会说差异很大,在10 ^( - 2)的范围内.显然,我在这里使用的数据并不理想,因为特征的维度远大于条目的数量.但是,实际情况也是如此.它与功能选择有关吗?如何使结果与以前一样?我理解新结果不一定比以前更差,但现在重点是尽可能使它们保持一致.谢谢.

python scikit-learn logistic-regression

9
推荐指数
1
解决办法
421
查看次数

解释sklearn中的逻辑回归特征系数值

我已经为我的数据拟合了逻辑回归模型。想象一下,我有四个特征:1)参与者收到的条件,2)参与者是否对所测试的现象有任何先验知识/背景(实验后问卷中的二元反应),3)在实验任务上花费的时间,以及4) 参与者年龄。我试图预测参与者最终是选择选项 A 还是选项 B。我的逻辑回归输出以下特征系数 clf.coef_

[[-0.68120795 -0.19073737 -2.50511774  0.14956844]]
Run Code Online (Sandbox Code Playgroud)

如果选项 A 是我的正类,这个输出是否意味着特征 3 是二元分类中最重要的特征,并且与选择选项 A 的参与者有负相关(注意:我没有标准化/重新缩放我的数据)?我想确保我对系数的理解以及我可以从中提取的信息是正确的,因此我不会在我的分析中做出任何概括或错误假设。

谢谢你的帮助!

python feature-selection scikit-learn logistic-regression coefficients

9
推荐指数
1
解决办法
1万
查看次数

如何在逻辑回归中使用权重

我想用 Python 计算(加权)逻辑回归。计算权重以调整样本关于总体的分布。然而,如果我使用权重,结果不会改变。

\n
import numpy as np\nimport pandas as pd  \nimport statsmodels.api as sm  \n
Run Code Online (Sandbox Code Playgroud)\n

数据看起来像这样。目标变量是VISIT. 这些特征是除WEIGHT_both(这是我想使用的权重)之外的所有其他变量。

\n
df.head() \n\nWEIGHT_both VISIT   Q19_1   Q19_2   Q19_3   Q19_4   Q19_5   Q19_6   Q19_7   Q19_8   ... Q19_23  Q19_24  Q19_25  Q19_26  Q19_27  Q19_28  Q19_29  Q19_30  Q19_31  Q19_32\n0   0.022320    1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 ... 4.0 4.0 1.0 1.0 1.0 1.0 2.0 3.0 3.0 2.0\n1   0.027502    1.0 3.0 2.0 2.0 2.0 3.0 4.0 3.0 2.0 ... 3.0 2.0 …
Run Code Online (Sandbox Code Playgroud)

python weighted statsmodels logistic-regression

9
推荐指数
1
解决办法
8797
查看次数

响应是一个比例时的逻辑回归(使用JAGS)

我试图在JAGS中使用逻辑回归模型,但我有(#success y,#attempts n)形式的数据,而不是二进制变量.在R中,可以通过使用glm(y/n~)和"weights"参数将模型拟合到这些数据,但我不确定如何在JAGS中使用它.

这是一个简单的例子,我希望解决我想要问的问题.请注意,我使用的是rjags包.谢谢你的帮助!

y <- rbinom(10, 500, 0.2)
n <- sample(500:600, 10)
p <- y/n
x <- sample(0:100, 10) # some covariate

data <- data.frame(y, n, p, x)

model <- "model{
# Specify likelihood
for(i in 1:10){
    y[i] ~ dbin(p[i], n[i])
    logit(p[i]) <- b0 + b1*x
}

# Specify priors
b0 ~ dnorm(0, 0.0001)
b1 ~ dnorm(0, 0.0001)
}"
Run Code Online (Sandbox Code Playgroud)

r jags logistic-regression

8
推荐指数
1
解决办法
1100
查看次数

分类器中的 scikit-learn 改装/部分拟合选项

我想知道 sklearn 分类器中是否有任何选项可以使用一些超参数进行拟合,并在更改一些超参数后,通过节省计算(拟合)成本来重新拟合模型。

让我们说,逻辑回归适合使用C=1e5( logreg=linear_model.LogisticRegression(C=1e5)),我们只更改CC=1e3。我想节省一些计算,因为只更改了一个参数。

parameters machine-learning scikit-learn logistic-regression

8
推荐指数
1
解决办法
4575
查看次数

Python:逻辑回归max_iter参数降低了准确性

我正在做多类/多标签文本分类。我试图摆脱“ConvergenceWarning”。

当我将max_iter从默认值调整为4000 时,警告消失了。然而,我的模型精度从78降低到75

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score


logreg = Pipeline([('vect', CountVectorizer()),
            ('tfidf', TfidfTransformer()),
            ('clf', LogisticRegression(n_jobs=1, C=1e5, solver='lbfgs',multi_class='ovr' ,random_state=0, class_weight='balanced' )),
           ])
logreg.fit(X_train, y_train)


y_pred = logreg.predict(X_test)

print('Logistic Regression Accuracy %s' % accuracy_score(y_pred, y_test))

cv_score = cross_val_score(logreg, train_tfidf, y_train, cv=10, scoring='accuracy')
print("CV Score : Mean : %.7g | Std : %.7g | Min : %.7g | Max : %.7g" % (np.mean(cv_score),np.std(cv_score),np.min(cv_score),np.max(cv_score)))
Run Code Online (Sandbox Code Playgroud)

为什么当 max_iter = 4000 时我的准确率会降低?有没有其他方法可以修复 *“ConvergenceWarning:lbfgs 未能收敛。增加迭代次数。“迭代次数。”,ConvergenceWarning)”*

python cross-validation logistic-regression multiclass-classification

8
推荐指数
1
解决办法
3万
查看次数

使用 python sklearn 进行逻辑回归和 GridSearchCV

我正在尝试此页面中的代码。我跑到这个部分LR (tf-idf)并得到了类似的结果

之后我决定尝试一下GridSearchCV。我的问题如下:

1)

#lets try gridsearchcv
#https://www.kaggle.com/enespolat/grid-search-with-logistic-regression

from sklearn.model_selection import GridSearchCV

grid={"C":np.logspace(-3,3,7), "penalty":["l2"]}# l1 lasso l2 ridge
logreg=LogisticRegression(solver = 'liblinear')
logreg_cv=GridSearchCV(logreg,grid,cv=3,scoring='f1')
logreg_cv.fit(X_train_vectors_tfidf, y_train)

print("tuned hpyerparameters :(best parameters) ",logreg_cv.best_params_)
print("best score :",logreg_cv.best_score_)

#tuned hpyerparameters :(best parameters)  {'C': 10.0, 'penalty': 'l2'}
#best score : 0.7390325593588823
Run Code Online (Sandbox Code Playgroud)

然后我手动计算了f1分数。为什么不匹配?

logreg_cv.predict_proba(X_train_vectors_tfidf)[:,1]
final_prediction=np.where(logreg_cv.predict_proba(X_train_vectors_tfidf)[:,1]>=0.5,1,0)
#https://www.statology.org/f1-score-in-python/
from sklearn.metrics import f1_score
#calculate F1 score
f1_score(y_train, final_prediction)
0.9839388145315489
Run Code Online (Sandbox Code Playgroud)
  1. 如果我尝试scoring='precision'为什么会出现以下错误?我不清楚主要是因为我有相对平衡的数据集(55-45%)并且f1需要precision计算没有任何问题

#lets try gridsearchcv #https://www.kaggle.com/enespolat/grid-search-with-logistic-regression

from sklearn.model_selection import GridSearchCV

grid={"C":np.logspace(-3,3,7), …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn logistic-regression

8
推荐指数
1
解决办法
5109
查看次数