Logistic 回归模型有多少个系数作为特征数量的函数?

数据挖掘 scikit-学习 逻辑回归
2022-02-06 22:05:09

我已经使用 Python anaconda 建立了一个逻辑回归模型,并且惊讶地发现模型系数的数量与训练样本大小成正比,即

我的训练数据是:

print('Training data is type %s and shape %s' % (type(os_X_train), os_X_train.shape))

和输出:

Training data is type <class 'pandas.core.frame.DataFrame'> and shape (174146, 11)

那么模型是:

logreg = LogisticRegression(penalty='l2',solver='lbfgs',max_iter=1000)
model = make_pipeline(preprocess, logreg)
model.fit(os_X_train, os_y_train)
print(logreg.coef_.shape)
print("Model coefficients: ", logreg.intercept_, logreg.coef_)

这输出:

(1, 153024)
Model coefficients:  [12.02830778] [[ 0.42926969  0.14192505 -1.89354062 ...  0.008847    0.00884372 -8.15123962]]

据我了解,模型系数的数量应该是预测变量或特征的列数加上一个截距,还是?

1个回答

你是正确的,参数的数量取决于特征的数量和观察的数量。您看到此错误是因为您和计算机不同意您的输入数据的含义。

Sklearn 假设您的数据是n×p,其中每一行代表一个观察值,每一列代表一个变量。如果那样的话,我认为你正在做转置,p×n,其中每一列代表一个观察值。随着你的观察越来越多,你的列也越来越多,告诉 sklearn 有额外的功能。

如果您转置预测变量数据,则函数应按预期运行。

这不是逻辑回归所独有的。任何型号都会发生这种情况。假设您在 6 个特征的 80 次观察上训练了一个 k-NN。然后你测试这 6 个特征的 20 个观察值。Python 应该会说:“你给了我 80 个用于训练的功能,而现在只有 20 个用于测试。是什么赋予了?”