python - sklearn LogisticRegressionCV 是否将所有数据用于最终模型

标签 python machine-learning scikit-learn cross-validation

我想知道 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).我有几个可能的选择:

  1. clf.coef_ 中的参数来自对所有数据训练模型
  2. clf.coef_ 中的参数来自最佳得分折叠
  3. clf.coef_ 中的参数以某种方式对折叠进行平均。

我想这是一个重复的问题,但就我的生活而言,我无法在网上、sklearn 文档或 LogisticRegressionCV 的源代码中找到直接的答案。我发现的一些相关帖子是:

  1. GridSearchCV final model
  2. scikit-learn LogisticRegressionCV: best coefficients
  3. Using cross validation and AUC-ROC for a logistic regression model in sklearn
  4. Evaluating Logistic regression with cross validation

最佳答案

您弄错了超参数和参数。所有最终具有 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 所做的:

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

这就是所有超参数调谐器所做的,无论是 GridSearchCV、LogisticRegressionCV 还是 LassoCV 等。

coef_的初始化和更新特征权重在 fit() 中完成超出超参数调整范围的算法函数。该优化部分取决于流程的内部优化算法。例如solver param 在 LogisticRegression 的情况下.

希望这能让事情变得清晰。如有任何疑问,请随时询问。

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

相关文章:

python - 对组内的数据进行排序 - Pandas Dataframe

python - 在 sklearn 中使用 anymodel.fit() 时出现 MemoryError : Unable to allocate MiB for an array with shape and data type,

python - Pytorch - 如何提取 MLP 网络的特征(权重、偏差、节点数、隐藏层)?

python - sklearn 提升 : cross-validation to find optimal number of estimators without restarting everytime

Python 3 导入错误 : cannot import name 'model selection' OS X 10. 11.3, python

python - 在函数中动态创建Python子类

python - 为什么nodejs和python中符号 '😃'的unicode值不同?

Python:删除字符串中的反斜杠

python - pytorch 模型在第一轮后返回 NAN

python - 如何从流水线网格搜索和 cross_val_score 中获得最佳估计器和参数?