【问题标题】:Is it possible to run a logit model with only ones and no zeros?是否可以运行只有 1 而没有 0 的 logit 模型?
【发布时间】:2019-04-07 07:50:46
【问题描述】:

对于我的论文,我正在尝试构建一个模型,该模型通过 logit 模型正确预测我的样本。首先遇到python没有logit模型,只有logistic模型的问题。但是使用这个逻辑模型,我在[logreg.fit(X_train,y_train)] 下面的代码中遇到错误。
我的错误如下:此求解器需要数据中至少 2 个类的样本。好吧,我的数据只包含一,不包含零。所以这个错误是正确的,在某种意义上它应该是这样的。有没有办法绕过这个错误,这样我就可以继续我的分析,而不必寻找各种数据来获得零,由于我的数据库的复杂性,这将太耗时了。

我已经尝试修复它,但还没有找到任何可以解决此问题的方法。删除提供错误的行也不是一种选择,因为这在代码中进一步产生了许多新问题。

feature_cols =['RSIZE','EXRETAVG','NIMTAAVG','TLMTA','CASHMTA','SIGMA','PRICE','MB']
X = df[feature_cols]
y = df.Bankrupt
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)
logreg = LogisticRegression()
logreg.fit(X_train,y_train)
y_pred=logreg.predict(X_test)



cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
print(cnf_matrix)
class_names=[0,1] # name  of classes
fig, ax = plt.subplots()
tick_marks = np.arange(len(class_names))
plt.xticks(tick_marks, class_names)
plt.yticks(tick_marks, class_names)
sns.heatmap(pd.DataFrame(cnf_matrix), annot=True, cmap="YlGnBu" ,fmt='g')
ax.xaxis.set_label_position("top")
plt.tight_layout()
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual label')
plt.xlabel('Predicted label')
print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
print("Precision:",metrics.precision_score(y_test, y_pred))
print("Recall:",metrics.recall_score(y_test, y_pred))
y_pred_proba = logreg.predict_proba(X_test)[::,1]
fpr, tpr, _ = metrics.roc_curve(y_test,  y_pred_proba)
auc = metrics.roc_auc_score(y_test, y_pred_proba)
plt.plot(fpr,tpr,label="data 1, auc="+str(auc))
plt.legend(loc=4)
plt.show()

【问题讨论】:

  • 这对我来说似乎没有意义。在这种情况下,您不会训练监督模型,因为该模型只会预测一个类别。
  • 没错,我目前只尝试预测 1 而不是 0。但仍有可能在对样本外的模型进行回测时,它预测为 0,而实际上它是 1。

标签: python logistic-regression mlogit


【解决方案1】:

简短的回答是你总是需要不止一门课

任何模型所做的都是尝试确定每个变量(特征,您的 X)如何影响因变量(Y,您的类别)的结果。现在,如果您的因变量中只有一个类别,那么无论您的 X 具有什么值和值组合,您将始终得到相同的结果。
这意味着如果你只在一个类(你的类)上训练你的模型,那么在测试时它总是会返回 1(你基本上不需要训练和测试任何东西)。

一个玩具示例可能是:Y 是观察是否在一年内违约。 X 通过某种模型计算的纯违约概率。

假设如果您的模型预测 Y=1(默认在一年内)如果 X>0.5,那么您会很高兴。
然后,您只对 Y=1 的情况进行二次抽样并训练您的模型。无论X 取什么值,您都会得到一条简单的平线 (Y=1)。
这意味着在测试您的模型时,无论 X 的值是什么以及因变量的实际结果是什么,您总是会估计 Y=1

【讨论】:

  • 现在可以使用了,谢谢 Gio。我花了一些时间来扩展我的数据库,但它确实有效。
  • 很高兴听到您解决了问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2017-08-27
  • 2011-05-27
相关资源
最近更新 更多