![](/img/trans.png)
[英]ValueError: Invalid parameter for estimator RandomizedSearchCV
[英]Why RandomizedSearchCV reeturn a value of degree or gamma for linear estimator?
對於 Sklearn,我使用的是 RandomizedSearchCV,在特定情況下,最好的估計器是:
SVR(C=1594.0828461797396, degree=0.8284528822863231, gamma=1.1891370222133257,kernel='linear')
但根據sklearn 文檔, degree
和gamma
僅適用於rbf
和poly
內核。 為什么我得到帶有gamma
和degree
值的linar
估計器?
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import expon, reciprocal
param_distribs = {
'kernel': ['linear', 'rbf','poly','sigmoid'],
'C': reciprocal(20, 200000),
'gamma': expon(scale=1.0),
'degree': expon(scale=1.0),
}
svm_reg = SVR()
rnd_search = RandomizedSearchCV(svm_reg, param_distributions=param_distribs,
n_iter=50, cv=5, scoring='neg_mean_squared_error',
verbose=2, random_state=42)
rnd_search.fit(X, y)
RandomizedSearchCV
將始終為估計器隨機設置所有指定參數,而不管這些限制如何,因為沒有實施內部方法來檢查哪些組合對特定估計器有意義。 由於gamma
和degree
在與linear
kernel 結合使用時會被忽略,因此它也不會引發錯誤,並且算法只是在每次設置所有參數的情況下運行。
如果您想避免這種行為,您可以將參數 grid 作為字典列表傳遞,指定允許哪些組合。 該文檔針對此類情況指定:
如果給定一個字典列表,首先對字典進行均勻采樣,然后使用該字典對參數進行采樣,如上所述。
例如,假設您將以下內容定義為參數網格:
param_distribs = [
{
'kernel': ['rbf','poly'],
'C': reciprocal(20, 200000),
'gamma': expon(scale=1.0),
'degree': expon(scale=1.0)
},
{
'kernel': ['linear','sigmoid'],
'C': reciprocal(20, 200000)
}
]
這將避免RandomizedSearchCV
在迭代中選擇具有linear
kernel 的字典時設置gamma
和degree
。 相反,如果它在特定迭代中選擇另一個字典,它也會設置gamma
和degree
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.