Python 是否可以运行只有1而没有0的logit模型?

Python 是否可以运行只有1而没有0的logit模型?,python,logistic-regression,mlogit,Python,Logistic Regression,Mlogit,在我的论文中,我试图建立一个模型,通过logit模型正确预测我的样本。首先,我遇到了一个问题,python没有logit模型,只有logistic模型。但是使用这个逻辑模型,我在下面的代码中得到一个错误[logreg.fitX\u train,y\u train]。 我的错误如下:此解算器需要数据中至少两个类的样本。嗯,我的数据只包含1,不包含0。所以这个错误是正确的,从某种意义上说应该是这样的。有没有办法绕过这个错误,这样我就可以继续我的分析,而不必寻找所有类型的数据也可以得到零,因为我的数据

在我的论文中,我试图建立一个模型,通过logit模型正确预测我的样本。首先,我遇到了一个问题,python没有logit模型,只有logistic模型。但是使用这个逻辑模型,我在下面的代码中得到一个错误[logreg.fitX\u train,y\u train]。 我的错误如下:此解算器需要数据中至少两个类的样本。嗯,我的数据只包含1,不包含0。所以这个错误是正确的,从某种意义上说应该是这样的。有没有办法绕过这个错误,这样我就可以继续我的分析,而不必寻找所有类型的数据也可以得到零,因为我的数据库非常复杂,这将非常耗时

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

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()
简而言之,你总是需要不止一门课

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

一个很好的例子是:Y表示观察值在一年内默认。通过某种模型计算的违约概率

如果你的模型预测X>0.5,一年内Y=1违约,那么你会很高兴。 然后,只对Y=1的情况进行子采样,并训练模型。无论X取什么值,都将得到一条简单的平线Y=1。
这意味着,在测试模型时,无论X的值是多少,因变量的实际结果是什么,您都会估计Y=1。

这对我来说似乎没有意义。在这种情况下,你不会训练一个有监督的模型,因为该模型只会预测一个类。没错,我目前只尝试预测1,而不是0。但是,当从样本中对模型进行回溯测试时,仍然有可能预测为零,而实际上是一。它现在正在工作,谢谢Gio。我需要一段时间来扩展我的数据库,但它工作正常。很高兴听到你解决了你的问题