我想知道 sklearn 中 LogisticRegressionCV 的最终模型(即决策边界)是如何计算的。所以说我有一些 Xdata 和 ylabels 这样
Xdata # shape of this is (n_samples,n_features)
ylabels # shape of this is (n_samples,), and it is binary
现在我跑
from sklearn.linear_model import LogisticRegressionCV
clf = LogisticRegressionCV(Cs=[1.0],cv=5)
clf.fit(Xdata,ylabels)
这只查看一个正则化参数和 CV 中的 5 倍。所以 clf.scores_
将是一个字典,其中一个键的值是一个形状为 (n_folds,1) 的数组。通过这五次折叠,您可以更好地了解模型的性能。
但是,我对您从 clf.coef_
得到的结果感到困惑(并且我假设 clf.coef_
中的参数是 >clf.predict
).我有几个可能的选择:
clf.coef_
中的参数来自对所有数据训练模型clf.coef_
中的参数来自最佳得分折叠clf.coef_
中的参数以某种方式对折叠进行平均。
我想这是一个重复的问题,但就我的生活而言,我无法在网上、sklearn 文档或 LogisticRegressionCV 的源代码中找到直接的答案。我发现的一些相关帖子是:
最佳答案
您弄错了超参数和参数。所有最终具有 CV 的 scikit-learn 估计器,例如 LogisticRegressionCV
, GridSearchCV
, 或 RandomizedSearchCV
调整超参数。
超参数不是从数据训练中学习到的。它们是在学习之前设置的,假设它们将有助于优化学习。更多信息是present here :
Hyper-parameters are parameters that are not directly learnt within estimators. In scikit-learn they are passed as arguments to the constructor of the estimator classes. Typical examples include C, kernel and gamma for Support Vector Classifier, alpha for Lasso, etc.
如果是 LogisticRegression,C
是描述正则化强度倒数的超参数。 C 越高,训练中应用的正则化越少。不是那个C
会在训练中改变。它将被修复。
现在来到coef_
. coef_
包含特征的系数(也称为权重),这些特征在训练期间被学习(和更新)。现在,根据 C 的值(以及构造函数中存在的其他超参数),这些在训练期间可能会发生变化。
现在还有一个话题是如何得到coef_
的最优初值。 ,让训练更快更好。那就是优化。有些以 0-1 之间的随机权重开头,有些以 0 开头,等等。但是对于您的问题范围,这无关紧要。 LogisticRegressionCV 不用于此目的。
这是 LogisticRegressionCV 所做的:
- 获取不同
C
的值来自构造函数(在您的示例中,您传递了 1.0)。 - 对于
C
的每个值, 对提供的数据进行交叉验证,其中 LogisticRegression 将为fit()
在当前折叠的训练数据上,在测试数据上打分。所有折叠的测试数据的分数被平均,成为当前的分数C
.这是为所有C
完成的您提供的值,以及C
平均分最高的将被选中。 - 现在选择
C
设置为最终的C
并且 LogisticRegression 再次在整个数据(此处为fit()
)上进行训练(通过调用Xdata,ylabels
)。
这就是所有超参数调谐器所做的,无论是 GridSearchCV、LogisticRegressionCV 还是 LassoCV 等。
coef_
的初始化和更新特征权重在 fit()
中完成超出超参数调整范围的算法函数。该优化部分取决于流程的内部优化算法。例如solver
param 在 LogisticRegression
的情况下.
希望这能让事情变得清晰。如有任何疑问,请随时询问。
关于python - sklearn LogisticRegressionCV 是否将所有数据用于最终模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51830558/