我正在使用“seuclidean”指标执行网格搜索。传递给网格搜索的这个指标的参数是:
seuclidean = {'metric': ['seuclidean'],
'metric_params':[ {'V':V} ],
'algorithm': ['brute', 'ball_tree'],
'n_neighbors': list(k_range), 'weights': weights,
'leaf_size': list(leaf_sizes) }
现在k_range
和leaf_size
是独立于所用数据的列表。然而,在 中metric_params':[ {'V':V} ]
,V
是通常计算如下的方差:
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.33, random_state=1)
V = X.var().values
但是,我在估计之前对数据进行了标准化。更具体地说,我为此使用了管道:
pipe = Pipeline([
('standardize', preprocessing.MinMaxScaler()),
('sfs', sfs1),
('knn', knn)])
(注意:'sfs' 进行功能和参数选择)。在这样的设置中,我假设我们需要根据实际传递给估计器进行训练和验证的数据集来计算方差向量。
所以我的问题是:如何V
在拆分后对训练数据动态执行参数的计算和设置?这可能吗?如果没有,我应该如何设置这些“数据相关”参数?
TIA。