RandomizedSearchCV 中 class_weight 的采样值

机械

我正在尝试在 Scikit 学习 SVM 分类器中使用类权重RandomizedSearchCV

clf= svm.SVC(probability=True, random_state=0)
parameters = {'clf__C': scipy.stats.expon(scale=100), 'clf__gamma': scipy.stats.expon(scale=.1),
    'clf__kernel': ['rbf'], 'clf__class_weight':['balanced', None]}
search=RandomizedSearchCV(estimator=clf, param_distributions=parameters, scoring='f1_micro',
                                       cv=5, n_iter=100, random_state=0)
search.fit(features,labels)

我有4节课。现在对于 class_weight,我希望四个类中的每一个都有 0 到 1 之间的随机值。可以用

'class_weight':[{0: w} for w in [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]]

但这仅适用于一类,并且值是离散的,而不仅仅是在 0 和 1 之间采样。

我该如何解决这个问题?

最后但并非最不重要的是,如果我使用 0 到 1 之间或 1 到 10 之间的值(即权重是否重新调整),这有关系吗?

并且所有 4 个类的权重总和应该总是相同的值(例如 1)吗?

马丁

我不知道将分布作为字典键传递的可能性。作为对您提出的解决方法的改进,您可以使用:

from sklearn.utils.class_weight import compute_class_weight
from scipy.stats import lognorm

class_weight = compute_class_weight("balanced", np.unique(y), y)
class_weights = []
for mltp in lognorm(s = 1, loc = 1, scale = class_weight[0]).rvs(50):
    class_weights.append(dict(zip([0, 1], class_weight * [mltp, 1/mltp])))

然后你可以传递class_weightsfor 中clf__class_weight条目将此扩展到多类场景或使用不同的分布很简单。请注意,您实际上采样了两次。一次来自真实分布,然后来自此样本。如果您确保在每次调用之前重新生成fit 或者您使初始样本足够大,则此解决方法应该适用于您的情况。parametersRandomizedSearchCVRandomizedSearchCVclass_weights


编辑:更好的解决方案是定义您自己的类实现rvs方法。即使不必将现有scipy.stats分布子类化为:

class ClassWeights(object):
    """
    Draw random variates for cases when parameter is a dict.
    Should be personalized as needed.
    """
    def __init__(self,y, *args, **kwargs):
        self.class_weights = compute_class_weight("balanced", np.unique(y), y)
        self._make_dists()

    def _make_dists(self):
        self.dist0 = gamma(self.class_weights[0])
        self.dist1 = gamma(self.class_weights[1])

    def rvs(self, *args, **kwargs):
        """override method for drawing random variates"""
        ret_val = { 0: self.dist0.rvs(*args, **kwargs),
                    1: self.dist1.rvs(*args, **kwargs)}
        return ret_val

回答你的另外两个问题:

权重可以取任何正值(包括 0),并且它们的总和不必为 1。重要的是它们的相对大小,而不是绝对大小。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

scikit-learn中的class_weight参数如何工作?

来自分类Dev

如何在R中仅对非空值进行采样?

来自分类Dev

如何对数组中的值进行下采样?

来自分类Dev

RandomizedSearchCV返回的best_estimator_是否已在所有数据中接受过训练?

来自分类Dev

如何在VHDL中“采样”值?

来自分类Dev

scikit-learn:随机森林的class_weight和sample_weight参数

来自分类Dev

使用TensorFlow对图像中的点进行插值采样

来自分类Dev

class_weight =幼稚贝叶斯等效的“平衡”

来自分类Dev

如何转发列中每个不同值的重采样

来自分类Dev

LinearSVC中参数class_weight的最佳值是多少?

来自分类Dev

R中的线性插值或重采样

来自分类Dev

Logistic回归-class_weight平衡vs dict参数

来自分类Dev

使用保留集在scikit-learn中的RandomizedSearchCV中进行验证?

来自分类Dev

从向量列表中多次采样单个值

来自分类Dev

在svm.scv()中同时使用“ class_weight”和“ c”参数时会发生什么?

来自分类Dev

使用class_weight平衡数据-.fit_generator()

来自分类Dev

马修的相关系数和精度在RandomizedSearchCV中引发错误

来自分类Dev

如何在R中仅对非空值进行采样?

来自分类Dev

以良好的性能对数组中的采样值进行采样

来自分类Dev

将采样值放入矩阵中-Simulink

来自分类Dev

使用pandas中的值对2d坐标重新采样

来自分类Dev

HLSL 中的纹理采样器不插值

来自分类Dev

DNnClassifier - 用于预测方法的 class_weight

来自分类Dev

在熊猫中重新采样:设置时间的起始值

来自分类Dev

随机森林中的 class_weight 超参数改变了混淆矩阵中的样本数量

来自分类Dev

class_weight='auto' for model.fit_generator keras

来自分类Dev

什么 SKLearn 分类器带有 class_weight 参数

来自分类Dev

使用 Caret 进行交叉验证重采样中的缺失值

来自分类Dev

用于 sklearn 分类的 class_weight 字典格式

Related 相关文章

  1. 1

    scikit-learn中的class_weight参数如何工作?

  2. 2

    如何在R中仅对非空值进行采样?

  3. 3

    如何对数组中的值进行下采样?

  4. 4

    RandomizedSearchCV返回的best_estimator_是否已在所有数据中接受过训练?

  5. 5

    如何在VHDL中“采样”值?

  6. 6

    scikit-learn:随机森林的class_weight和sample_weight参数

  7. 7

    使用TensorFlow对图像中的点进行插值采样

  8. 8

    class_weight =幼稚贝叶斯等效的“平衡”

  9. 9

    如何转发列中每个不同值的重采样

  10. 10

    LinearSVC中参数class_weight的最佳值是多少?

  11. 11

    R中的线性插值或重采样

  12. 12

    Logistic回归-class_weight平衡vs dict参数

  13. 13

    使用保留集在scikit-learn中的RandomizedSearchCV中进行验证?

  14. 14

    从向量列表中多次采样单个值

  15. 15

    在svm.scv()中同时使用“ class_weight”和“ c”参数时会发生什么?

  16. 16

    使用class_weight平衡数据-.fit_generator()

  17. 17

    马修的相关系数和精度在RandomizedSearchCV中引发错误

  18. 18

    如何在R中仅对非空值进行采样?

  19. 19

    以良好的性能对数组中的采样值进行采样

  20. 20

    将采样值放入矩阵中-Simulink

  21. 21

    使用pandas中的值对2d坐标重新采样

  22. 22

    HLSL 中的纹理采样器不插值

  23. 23

    DNnClassifier - 用于预测方法的 class_weight

  24. 24

    在熊猫中重新采样:设置时间的起始值

  25. 25

    随机森林中的 class_weight 超参数改变了混淆矩阵中的样本数量

  26. 26

    class_weight='auto' for model.fit_generator keras

  27. 27

    什么 SKLearn 分类器带有 class_weight 参数

  28. 28

    使用 Caret 进行交叉验证重采样中的缺失值

  29. 29

    用于 sklearn 分类的 class_weight 字典格式

热门标签

归档