我想知道如何计算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的源代码中找到一个简单的答案。我发现一些相关的帖子是:
最佳答案
您在 super 参数和参数之间产生了误解。最后所有具有CV的scikit-learn估计器(例如LogisticRegressionCV
,GridSearchCV
或RandomizedSearchCV
)都会调整超参数。
无法从数据训练中学到超参数。在学习之前设置它们,前提是它们将有助于最佳学习。更多信息是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()
函数内部完成的,该功能超出了超参数调整的范围。该优化部分取决于过程的内部优化算法。例如solver
的LogisticRegression
参数。希望这可以弄清楚。随时询问是否还有任何疑问。
关于python - sklearn LogisticRegressionCV是否将所有数据用于最终模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51830558/