MLJ: 在evaluate中选择行和列进行训练

我想实现一个在MLJ中也能工作的核岭回归。此外,我希望能够选择使用特征向量或像Python中的sklearn那样使用预定义的核矩阵。

当我运行这段代码时

const MMI = MLJModelInterface    MMI.@mlj_model mutable struct KRRModel <: MLJModelInterface.Deterministic        mu::Float64 = 1::(_ > 0)        kernel::String = "linear"endfunction MMI.fit(m::KRRModel,verbosity::Int,K,y)    K = MLJBase.matrix(K)    fitresult = inv(K+m.mu*I)*y    cache = nothing    report = nothing    return (fitresult,cache,report)end   N = 10K = randn(N,N)K = K*Ka = randn(N)y = K*a + 0.2*randn(N)m = KRRModel()kregressor = machine(m,K,y)cv = CV(; nfolds=6,  shuffle=nothing, rng=nothing)evaluate!(kregressor, resampling=cv, measure=rms, verbosity=1)

evaluate!函数会对K的不同行子集进行评估。由于表示定理,核岭回归的非零系数数量等于样本数量。因此,可以使用缩减尺寸的矩阵K[train_rows,train_rows]来代替K[train_rows,:]

为了表示我正在使用核矩阵,我会设置m.kernel = ""。当m.kernel = ""时,如何让evaluate!同时选择列和行来形成一个较小的矩阵?

这是我第一次使用MLJ,我希望尽可能少地进行修改。


回答:

引用我在Julia Discourse上从@ablaom那里得到的答案

evaluate!的预期用途是通过子抽样观察来估计与某些监督学习模型相关的泛化误差,就像交叉验证中的常见用例一样。遗憾的是,evaluate!没有自然的方式来进行特征子抽样。

https://alan-turing-institute.github.io/MLJ.jl/dev/evaluating_model_performance/

仅供参考:有一个实现了MLJ模型接口的核回归版本,即来自包https://github.com/lalvim/PartialLeastSquaresRegressor.jl的核偏最小二乘回归

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注