2017-02-27 74 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