我希望能够检索经过训练的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]])
最佳答案
在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)
关于python - 适合后检索训练数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42476383/