是否可以运行只有一个而没有零的logit模型?

问题描述 投票:0回答:1

对于我的论文,我正在尝试构建一个模型,通过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()
python logistic-regression mlogit
1个回答
0
投票

简短的回答是你总是需要不止一个班级。

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

一个玩具的例子可能是:Y,如果观察在一年内违约。 X通过某种模型计算的纯默认概率。

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

© www.soinside.com 2019 - 2024. All rights reserved.