【问题标题】:Retrieving training data after fit拟合后检索训练数据
【发布时间】:2017-02-27 01:22:32
【问题描述】:

我希望能够检索训练 scikit-learn 估计器的数据(即拟合后)。

例如,如果我适合这样的 RandomForestClassifier:

rf = RandomForestClassifier()
train_X = np.asarray([[0, 1, 0], [1, 1, 1], [0, 1, 1]])
train_y = np.asarray([1, 0, 1])
rf.fit(train_X, train_y)

有没有办法从估算器返回我的训练数据和类标签?

类似......

rf.X_
>>>array([[0, 1, 0],
          [1, 1, 1],
          [0, 1, 1]])

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    docs 中,我看不到任何真正允许这样做的东西。但是,您可以尝试像这样定义一个类:

    class RFClassifierWithData:
        def __init__(self):
            self.clf = RandomForestClassifier()
        def fit(self, train_X, train_y):
            self.train_X = train_X
            self.train_y = train_y
            self.clf.fit(self.train_X, self.train_y)
    

    试一试:

    >>> model = RFClassifierWithData()
    >>> model.fit(train_X, train_y)
    >>> model.train_X
    array([[0, 1, 0],
           [1, 1, 1],
           [0, 1, 1]])
    >>> model.train_y
    array([1, 0, 1])
    

    你仍然可以访问拟合的分类器:

    >>> model.clf
    RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
                max_depth=None, max_features='auto', max_leaf_nodes=None,
                min_samples_leaf=1, min_samples_split=2,
                min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
                oob_score=False, random_state=None, verbose=0,
                warm_start=False)
    

    请注意,这可能不是最安全或最可靠的方法,但它应该为您提供了一个很好的起点。您可能希望使传递给此类中 __init__ 的参数与基类 RandomForestClassifier 中的参数相等。

    编辑:

    我仍然认为这是一个有效的选项,即使您尝试从腌制分类器获取数据:

    from sklearn.externals import joblib
    
    joblib.dump(model, 'model.pkl')
    same_model = joblib.load('model.pkl')
    

    一切都还在:

    In [19]: same_model.train_X
    Out[19]: 
    array([[0, 1, 0],
           [1, 1, 1],
           [0, 1, 1]])
    
    same_model.train_y
    Out[20]: array([1, 0, 1])
    In [21]: same_model.clf
    Out[21]: 
    RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
                max_depth=None, max_features='auto', max_leaf_nodes=None,
                min_samples_leaf=1, min_samples_split=2,
                min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
                oob_score=False, random_state=None, verbose=0,
                warm_start=False)
    

    【讨论】:

    • 感谢您的回复!在我需要自己的分类器制作的情况下,我以前使用过你的建议。不幸的是,它不适用于我当前的问题。我需要从一些旧的腌制估计器中检索数据。
    • 保存数据会很浪费......(我的意思是如果它作为默认行为完成)
    • 好吧,我认为没有办法从旧的腌制估计器中检索数据,但将来我上面提供的内容可以满足您给出的非常简单的基本情况。请参阅上文,了解使用 sklearn.externals.joblib 完成此类工作的难易程度。
    猜你喜欢
    • 2018-12-25
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多