我想知道如何计算sklearn中LogisticRegressionCV的最终模型(即决策边界)。所以说我有一些Xdata和ylabel这样

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的源代码中找到一个简单的答案。我发现一些相关的帖子是:
  • GridSearchCV final model
  • scikit-learn LogisticRegressionCV: best coefficients
  • Using cross validation and AUC-ROC for a logistic regression model in sklearn
  • Evaluating Logistic regression with cross validation
  • 最佳答案

    您在 super 参数和参数之间产生了误解。最后所有具有CV的scikit-learn估计器(例如LogisticRegressionCVGridSearchCVRandomizedSearchCV)都会调整超参数。

    无法从数据训练中学到超参数。在学习之前设置它们,前提是它们将有助于最佳学习。更多信息是present here:



    在LogisticRegression的情况下,C是一个超参数,它描述了正则化强度的倒数。 C越高,对训练进行的正则化越少。并不是说C会在训练期间更改。它将被修复。

    现在进入coef_coef_包含特征的系数(也称为权重),这些系数在训练过程中学习(并更新)。现在,根据C的值(以及构造器中存在的其他超参数),这些值在训练过程中可能会有所不同。

    现在还有另一个主题,关于如何获得coef_的最佳初始值,从而使训练更快,更好。多数民众赞成在优化。一些以0-1之间的随机权重开始,另一些以0等等开始,依此类推。但是对于您的问题范围,这是无关紧要的。 LogisticRegressionCV不用于此目的。

    这是LogisticRegressionCV的作用:

  • 从构造函数中获取不同C的值(在您的示例中,您传递了1.0)。
  • 对于C的每个值,对提供的数据进行交叉验证,其中LogisticRegression将是当前折页训练数据上的fit(),并在测试数据上打分。来自所有折叠的测试数据的分数被平均,并成为当前C的分数。这是对您提供的所有C值完成的,并且平均得分最高的C将被选择。
  • 现在,将所选的C设置为最终的C,并再次对整个数据(此处为fit())进行LogisticRegression训练(通过调用Xdata,ylabels)。

  • 这就是所有超参数调谐器的功能,无论是GridSearchCV还是LogisticRegressionCV或LassoCV等。
    coef_特征权重的初始化和更新是在算法的fit()函数内部完成的,该功能超出了超参数调整的范围。该优化部分取决于过程的内部优化算法。例如solverLogisticRegression参数。

    希望这可以弄清楚。随时询问是否还有任何疑问。

    关于python - sklearn LogisticRegressionCV是否将所有数据用于最终模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51830558/

    10-12 16:42
    查看更多