簡體   English   中英

為什么僅在SVM分類器中設置內核:'rbf'起作用?

[英]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分鍾后也沒有給出輸出,這意味着我做錯了。 我是機器學習(監督)的新手。 我無法在編碼中找到任何錯誤...我沒有發現背后的問題!

誰能解釋給我,我做錯了什么

不,根據您的代碼,您沒有做錯任何事情。 這里有很多因素在起作用

  • SVC是一個復雜的分類器,需要計算數據集中每對點之間的距離。
  • 復雜度也隨內核不同而變化。 我不確定,但我認為對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM