[英]Why it's only working with setting kernel: 'rbf' in SVM Classifier?
from sklearn.model_selection import GridSearchCV
from sklearn import svm
params_svm = {
'kernel' : ['linear','rbf','poly'],
'C' : [0.1,0.5,1,10,100],
'gamma' : [0.001,0.01,0.1,1,10]
}
svm_clf = svm.SVC()
estimator_svm = GridSearchCV(svm_clf,param_grid=params_svm,cv=4,verbose=1,scoring='accuracy')
estimator_svm.fit(data,labels)
print(estimator_svm.best_params_)
estimator_svm.best_score_
/*
data.shape is (891,9)
labels.shape is (891) both are numeric 2-D and 1-D arrays.
*/
當我將GridSearchCV與rbf一起使用時,它在2.7秒內給出了最佳的參數組合。 但是,當我單獨列出包含任何“ poly”或“ linear”或與“ rbf”的內核列表時,產生輸出的時間太長,即即使在15-20分鍾后也沒有給出輸出,這意味着我做錯了。 我是機器學習(監督)的新手。 我無法在編碼中找到任何錯誤...我沒有發現背后的問題!
誰能解釋給我,我做錯了什么
不,根據您的代碼,您沒有做錯任何事情。 這里有很多因素在起作用
復雜度也隨內核不同而變化。 我不確定,但我認為對於O((no_of_samples)^2 * n_features)
內核,它是O((no_of_samples)^2 * n_features)
,而對於線性內核,它是O(n_samples*n_features)
。 因此,並非僅因為rbf kernel
在15分鍾內就能工作,線性內核也將在相似的時間內工作。
同樣,花費的時間也極大地取決於數據集和其中的數據模式。 例如,一個rbf內核可能會迅速收斂,例如C = 0.5
但是對於相同的C值,多項式內核會收斂會花費更多的時間。
同樣,在不使用緩存的情況下,運行時間會增加很多。 在這個答案中 ,作者提到它可能增加到O(n_samples ^ 3 * n_features)。
這是sklearn的有關SVM復雜性的官方文檔。 有關使用SVM的實用技巧,請參閱本節 。
您可以將verbose
設置為True,以查看分類器的進度及其訓練方式。
參考
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.