2017-02-27 77 views
1

我期待能够检索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]]) 

回答

0

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) 
+0

感谢您的回复!在我需要用自己的分类器制作的情况下,我以前使用过您的建议。不幸的是,它不适用于我目前的问题。我需要从一些旧的腌制估计器中检索数据。 – Dan

+0

保存数据将是非常浪费..(我的意思是,如果它是作为默认行为完成) – user2717954

+0

嗯,我不认为有一种方法来从旧的腌制估计器中检索数据,但在未来我所做的上面提供的满足您提供的非常简单的基础案例。请参阅上文,了解如何轻松地使用'sklearn.externals.joblib'来完成此类工作。 – blacksite