【发布时间】:2018-05-10 21:45:05
【问题描述】:
我正在尝试使用 RandomizedSearchCV 在 Scikit learn SVM 分类器中使用类权重。
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)?
【问题讨论】:
-
不,值可以是任意的,总和不能为 1。
-
@VivekKumar 非常感谢。请问您是否还有其他问题的答案?
-
您可以对权重使用随机抽样。但这需要对多次迭代进行调整。例如,从 [0,1] 范围内的随机数开始。在下一次迭代中,选择与上一次迭代中选择的范围相近的范围。可能是 [0.45, 0.65]。以此类推。
-
查看this question 进行随机抽样。
标签: python scikit-learn hyperparameters