标签: logistic-regression

Logistic回归 - 定义R中的参考水平

我想解决这个问题.我如何在R中定义在二元逻辑回归中使用的参考水平?那么多项逻辑回归呢?现在我的代码是:

logistic.train.model3 <- glm(class~ x+y+z,
                         family=binomial(link=logit), data=auth, na.action = na.exclude)
Run Code Online (Sandbox Code Playgroud)

我的响应变量是"YES"和"NO".我想预测某人回答"是"的可能性.

我不想将变量重新编码为0/1.有没有办法告诉模型预测"是"?

谢谢您的帮助.

r logistic-regression

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

使用逻辑回归分析R,statmodel,sklearn的分类任务

我在R,python statmodels和sklearn中进行了逻辑回归的一些实验.虽然R和statmodels给出的结果是一致的,但sklearn返回的结果有些不一致.我想了解为什么这些结果不同.据我所知,它可能与木材下使用的优化算法不同.

具体来说,我使用标准Default数据集(在ISL书中使用).以下Python代码将数据读入数据帧Default.

import pandas as pd
 # data is available here
Default = pd.read_csv('https://d1pqsl2386xqi9.cloudfront.net/notebooks/Default.csv', index_col=0)
 #
Default['default']=Default['default'].map({'No':0, 'Yes':1})
Default['student']=Default['student'].map({'No':0, 'Yes':1})
 #
I=Default['default']==0
print("Number of 'default' values :", Default[~I]['balance'].count())
Run Code Online (Sandbox Code Playgroud)

"默认"值的数量:333.

总共有10000个例子,只有333个阳性

R中的逻辑回归

我使用以下内容

library("ISLR")
data(Default,package='ISLR')
 #write.csv(Default,"default.csv")
glm.out=glm('default~balance+income+student', family=binomial, data=Default)
s=summary(glm.out)
print(s)
#
glm.probs=predict(glm.out,type="response") 
glm.probs[1:5]
glm.pred=ifelse(glm.probs>0.5,"Yes","No")
 #attach(Default)
t=table(glm.pred,Default$default)
print(t)
score=mean(glm.pred==Default$default)
print(paste("score",score))
Run Code Online (Sandbox Code Playgroud)

结果如下

调用:glm(formula ="default~balance + income + student",family = binomial,data = Default)

Deviance Residuals:Min 1Q Median 3Q Max
-2.4691 -0.1418 -0.0557 -0.0203 3.7383

系数:

Estimate …
Run Code Online (Sandbox Code Playgroud)

python r scikit-learn logistic-regression

11
推荐指数
2
解决办法
2965
查看次数

在matlab中规范化逻辑回归代码

我正在尝试使用正规化的LR,在matlab中使用这个公式很简单:

成本函数:

J(theta) = 1/m*sum((-y_i)*log(h(x_i)-(1-y_i)*log(1-h(x_i))))+(lambda/2*m)*sum(theta_j)
Run Code Online (Sandbox Code Playgroud)

渐变:

?J(theta)/?theta_0 = [(1/m)*(sum((h(x_i)-y_i)*x_j)] if j=0

?j(theta)/?theta_n = [(1/m)*(sum((h(x_i)-y_i)*x_j)]+(lambda/m)*(theta_j) if j>1
Run Code Online (Sandbox Code Playgroud)

这不是matlab代码只是公式.

到目前为止我已经这样做了:

function [J, grad] = costFunctionReg(theta, X, y, lambda)

J = 0;
grad = zeros(size(theta));

temp_theta = [];

%cost function

%get the regularization term

for jj = 2:length(theta)

    temp_theta(jj) = theta(jj)^2;
end

theta_reg = lambda/(2*m)*sum(temp_theta);

temp_sum =[];

%for the sum in the cost function

for ii =1:m

   temp_sum(ii) = -y(ii)*log(sigmoid(theta'*X(ii,:)'))-(1-y(ii))*log(1-sigmoid(theta'*X(ii,:)'));

end

tempo = sum(temp_sum);

J = (1/m)*tempo+theta_reg;

%regulatization
%theta 0

reg_theta0 = 0; …
Run Code Online (Sandbox Code Playgroud)

matlab machine-learning regularized logistic-regression

10
推荐指数
3
解决办法
2万
查看次数

什么是Gradient Descent的替代品?

Gradient Descent存在局部最小值的问题.我们需要运行梯度下降指数时间来找到全局最小值.

任何人都能告诉我梯度下降的任何替代方案的优缺点.

谢谢.

machine-learning neural-network gradient-descent logistic-regression

10
推荐指数
2
解决办法
3976
查看次数

scikit learn:如何检查系数的意义

我试图用SKLearn做一个LR,用于一个相当大的数据集,其中有600个虚拟数据集,只有很少的区间变量(我的数据集中有300 K行),结果混淆矩阵看起来很可疑.我想检查返回系数和ANOVA的重要性,但我找不到如何访问它.有可能吗?对于包含大量虚拟变量的数据,最佳策略是什么?非常感谢!

anova dummy-data scikit-learn logistic-regression

10
推荐指数
1
解决办法
8816
查看次数

如何修复 Statsmodel 警告:“已超过最大迭代次数”

我正在使用 Anaconda 并且我正在尝试逻辑回归。加载训练数据集并执行回归后。然后我收到以下警告消息。

train_cols = data.columns[1:]
logit = sm.Logit(data['harmful'], data[train_cols])
result = logit.fit() 
Warning: Maximum number of iterations has been exceeded.
     Current function value: 0.000004
     Iterations: 35
C:\Users\dell\Anaconda\lib\site-packages\statsmodels\base\model.py:466: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals"Check mle_retvals", ConvergenceWarning)
Run Code Online (Sandbox Code Playgroud)

为什么我会收到此警告以及如何解决此问题?谢谢!

python warnings statsmodels anaconda logistic-regression

10
推荐指数
2
解决办法
3万
查看次数

使用分类数据作为sklean LogisticRegression中的功能

我想了解如何使用分类数据为特征sklearn.linear_modelLogisticRegression.

我理解当然我需要编码它.

  1. 我不明白的是如何将编码特征传递给Logistic回归,以便将其作为分类特征处理,而不是解释编码作为标准可量化特征时获得的int值.

  2. (不太重要)有人可以解释两者的区别preprocessing.LabelEncoder(),DictVectorizer.vocabulary或者只是一个简单的字典编码自己分类数据?Alex A.的评论涉及这个主题,但不是很深刻.

尤其是第一个!

python regression data-modeling scikit-learn logistic-regression

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

分层分割数据

我有一个大型数据集,并且喜欢为每个城市拟合不同的逻辑回归,这是我数据中的一列.以下70/30拆分工作未考虑City组.

indexes <- sample(1:nrow(data), size = 0.7*nrow(data))

train <- data[indexes,]
test <- data[-indexes,]
Run Code Online (Sandbox Code Playgroud)

但这并不能保证每个城市的70/30分割.

假设我有城市A和城市B,城市A有100行,城市B有900行,共1000行.用上面的代码拆分数据将给我700列火车和300行测试数据,但它不能保证我在城市A有70行,在列车数据中有城市B有630行.我怎么做?

一旦我将每个城市的训练数据分成70/30时尚,我将为每个城市运行逻辑回归(我知道如果我有列车数据怎么做)

split r logistic-regression

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

不同版本的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
查看次数

LogisticRegressionModel手动预测

我试图预测一个标签在每一行DataFrame,但不使用LinearRegressionModeltransform方法,由于醉翁之意不在酒,而不是我试图通过使用经典公式手动计算它1 / (1 + e^(-h?(x))),请注意,我是从复制的代码Apache Spark的存储库并将几乎所有东西从private对象复制BLAS到它的公共版本中.PD:我没有使用任何regParam,我只是安装了模型.

//Notice that I had to obtain intercept, and coefficients from my model
val intercept = model.intercept
val coefficients = model.coefficients

val margin: Vector => Double = (features) => {
  BLAS.dot(features, coefficients) + intercept
}

val score: Vector => Double = (features) => {
  val m = margin(features)
  1.0 / (1.0 + math.exp(-m))
}
Run Code Online (Sandbox Code Playgroud)

在定义了这些函数并获得模型的参数后,我创建了一个UDF来计算预测(它接收与a相同的特征 …

scala logistic-regression apache-spark

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