我正在开发一个机器学习分类模型,用户可以提供标签实例来帮助改进模型。需要对用户最新提供的实例赋予更高的相关性,而非那些之前用于训练的实例。
特别是,我正在使用Python的Sklearn库开发我的机器学习模型。
到目前为止,我只找到了通过过采样特定实例作为解决方案的策略。使用这种策略,我将为那些我想赋予更高相关性的实例创建多个副本。
我还找到了另一种策略,但似乎在这些条件下无效:
- 专注于为每个类别分配权重的策略。这种策略在许多库中如Sklearn默认广泛使用。然而,这种方法将想法泛化到类别级别,并不能帮助我聚焦于特定实例
我寻找了多种可能帮助为单个实例提供特定权重的策略,但大多数都集中在类别级别而非实例级别的权重上。
我读到了一些建议,在TensorFlow模型中通过一些因子乘以损失函数来处理实例,但这似乎主要适用于TensorFlow中的神经网络模型。
我想知道是否有人知道其他可能帮助解决这个问题的途径
回答:
我寻找了多种可能帮助为单个实例提供特定权重的策略,但大多数都集中在类别级别而非实例级别的权重上。
这不准确;大多数scikit-learn分类器在它们的fit
方法中提供了sample_weight
参数,这正是为了这个目的。例如,这是逻辑回归的文档参考:
sample_weight : array-like, shape (n_samples,) optional
分配给各个样本的权重数组。如果未提供,则每个样本被赋予单位权重。
大多数scikit-learn分类器都有类似的参数,例如决策树、随机森林等,甚至对于线性回归(不是分类器)。请务必查看文档中的SVM: Weighted samples示例。
其他框架的情况大致相似;例如,请查看在PySpark中是否有相当于scikit-learn的sample_weight参数?中的回答
此外,scikit-learn还提供了一个实用函数,用于在不平衡数据集的情况下计算sample_weight
:sklearn.utils.class_weight.compute_sample_weight