【发布时间】:2018-02-08 12:39:18
【问题描述】:
我正在开展一个项目,该项目涉及将一些算法实现为 python 类并测试它们的性能。我决定将它们写成 sklearn 估计器,以便我可以使用 GridSearchCV 进行验证。
但是,我的 Inductive Matrix Completion 算法之一不仅仅是将 X 和 y 作为参数。这成为GridSearchCV.fit 的一个问题,因为似乎没有办法将更多的X 和y 传递给估计器的拟合方法。源代码显示GridSearchCV.fit 的以下参数:
def fit(self, X, y=None, groups=None, **fit_params):
当然,下游方法只需要这两个参数。显然,修改我的 GridSearchCV 的本地副本以满足我的需要并非易事(或可取的)。
作为参考 IMC 基本上声明 $ R \approx XW^THY^T $。所以我的 fit 方法采用以下形式:
def fit(self, R, X, Y):
因此尝试以下操作失败,因为 Y 值永远不会传递给 IMC.fit 方法:
imc = IMC()
params = {...}
gs = GridSearchCV(imc, param_grid=params)
gs.fit(R, X, Y)
我通过像这样修改IMC.fit 方法为此创建了一个解决方法(这也必须插入到score 方法中):
def fit(self, R, X, Y=None):
if Y is None:
split = np.where(np.all(X == 999, axis=0))[0][0]
Y = X[:, split + 1:]
X = X[:, :split]
...
这允许我使用numpy.hstack 水平堆叠X 和Y,并在它们之间插入一列所有999。然后可以将该数组传递给GridSearchCV.fit,如下所示:
data = np.hstack([X, np.ones((X.shape[0],1)) * 999, Y])
gs.fit(R, data)
这种方法有效,但感觉很hacky。因此我的问题是这样的:
使用GridSearchCV 将超过 2 个参数传递给 fit 方法是否有普遍接受的方法或最佳实践?
【问题讨论】:
-
你自己上面提到的**fit_params有什么问题?见:scikit-learn.org/stable/modules/generated/…
-
@MarcusV。我相信我误解了你昨天的评论。我返回并使用
**fit_params进行了测试,但最终遇到了记分员的问题。显然fit_params不会级联到评分方法,并且由于我在课堂上使用默认的score方法,因此不会传入其他矩阵。请参阅sklearn.model_selection._validation._score
标签: python numpy machine-learning scikit-learn grid-search