2

问题就像标题一样简单。

我想根据我的得分函数而不是使用的最小二乘距离来训练模型LinearRegression

我发现声明自己的分数函数的唯一地方是模型评估算法。

我要使用的 score 函数是一个根据两个数据集的单调性(一个测试,一个训练)的接近程度返回分数的函数。

def monotony_score_signed(y_true, y_pred):

    assert y_true.ndim == 1
    assert y_true.shape == y_pred.shape
    true_order = y_true.argsort(0);

    pred_sign = np.sign(np.diff(y_pred[true_order]))
    true_sign = np.sign(np.diff(y_true[true_order]))
    accuracy = float(np.count_nonzero(pred_sign == true_sign)/float(pred_sign.shape[0] - 1))
    return accuracy
4

2 回答 2

2

你的损失/得分函数是什么?您是否正在寻找某种提供梯度(用于批量或随机梯度上升)以及可能还提供 Hessian(用于准牛顿方法)的自动微分例程?

如果您的评分函数不是传统的,那么库不太可能接受它,因为scikits.learn它不是优化库,而是常见推理和机器学习算法的包装器。

如果您的成本函数具有众所周知的梯度和 Hessian 函数形式,那么可能已经有一个内置例程用于拟合该格式的模型。但是在我们确定之前,我们需要知道成本函数。

更新后添加

您描述的问题不适合您所谓的“线性回归”(这是一种学习适用于特征输入以预测相关输出的权重的方法)。回归中隐含的目标是学习函数形式。并且在存在噪声的情况下,如果您想同时学习函数形式并确保函数形式保留数据集的等级顺序,则需要进行极其严格和不自然的假设。

您似乎只对根据您描述的成本函数保留数据等级排序的问题感兴趣。

这被称为“学习排名”问题。如果你用谷歌搜索“scikits.learn 排名模型”,你会看到一些结果,包括这个例子,这可能对你有帮助。

不过,我认为不会有一种简单的方法可以将您的成本函数插入到现有方法中。而且我也不确定您的成本函数是否真的是建模嘈杂的等级顺序保存的最佳方法。

于 2013-09-03T14:18:31.363 回答
0

如果要在单调输出与一维输入的约束下构建回归模型,可以使用IsotonicRegression类。

如果您真的想为自定义目标函数优化线性模型(或非线性模型),您可以使用通用优化器,例如scipy.optimizeclimincvxopt可用的优化器。

于 2013-09-03T21:31:53.043 回答