【问题标题】:How to duplicate an estimator in order to use it on multiple data sets?如何复制估算器以便在多个数据集上使用它?
【发布时间】:2012-11-22 00:03:03
【问题描述】:

这是一个创建两个数据集的示例:

from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

# data set 1
X1, y1 = make_classification(n_classes=2, n_features=5, random_state=1)
# data set 2
X2, y2 = make_classification(n_classes=2, n_features=5, random_state=2)

我想使用具有相同参数值的LogisticRegression 估计器在每个数据集上拟合分类器:

lr = LogisticRegression()

clf1 = lr.fit(X1, y1)
clf2 = lr.fit(X2, y2)

print "Classifier for data set 1: "
print "  - intercept: ", clf1.intercept_
print "  - coef_: ", clf1.coef_

print "Classifier for data set 2: "
print "  - intercept: ", clf2.intercept_
print "  - coef_: ", clf2.coef_

问题是两个分类器是一样的:

Classifier for data set 1: 
  - intercept:  [ 0.05191729]
  - coef_:  [[ 0.06704494  0.00137751 -0.12453698 -0.05999127  0.05798146]]
Classifier for data set 2: 
  - intercept:  [ 0.05191729]
  - coef_:  [[ 0.06704494  0.00137751 -0.12453698 -0.05999127  0.05798146]]

对于这个简单的例子,我可以使用类似的东西:

lr1 = LogisticRegression()
lr2 = LogisticRegression()

clf1 = lr1.fit(X1, y1)
clf2 = lr2.fit(X2, y2)

避免这个问题。但是,问题仍然存在:如何复制/复制具有特定参数值的估计器?

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:
    from sklearn.base import clone
    
    lr1 = LogisticRegression()
    lr2 = clone(lr1)
    

    【讨论】:

    • 谢谢!我错过了,因为参考文献中没有记录 sklearn.base:scikit-learn.org/dev/modules/classes.html
    • 我猜这是因为它们被认为是内部的。我想克隆应该被记录在案,不过......
    • 当遍历列表中的估计器时,Python 迭代会在列表中生成估计器的副本(而不是引用),在这种情况下是否仍然需要克隆估计器?在这种环境下不克隆它有什么危险吗?
    • 请注意,如果您想复制“训练”模型,请使用deepcopyclone 不会保留任何“训练”参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2020-12-23
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 2013-06-20
    相关资源
    最近更新 更多