2014-10-13 31 views
10

svm.SVC()'un hiperparametrelerinin GridSearchCV() hiçbir zaman tamamlanmayacak kadar geniş olması sorunuyla karşılaşıyorum! Bir fikir, bunun yerine RandomizedSearchCV() kullanmaktır. Ancak yine de veri kümem nispeten büyük, 500 yineleme 1 saat sürüyor!GridSearchCV() ile araştırılması gereken svm.SVC() hipermetreleri için iyi bir değer aralığı nedir?

Sorum, kaynakları israf etmemek için GridSearchCV (veya RandomizedSearchCV) içindeki iyi bir kurulum (her bir hipermetre için değer aralığı açısından) nedir? Başka bir deyişle, örn. 100'ün üstündeki C değerleri anlamlıdır ve/veya 1'in basamağı ne küçüktür? Herhangi bir yardım çok takdir edilmektedir.

C : float, optional (default=1.0) 
    Penalty parameter C of the error term. 

... bunlardan her ne yaptığını anlamak için her zaman daha iyidir,

parameters = { 
    'C':   np.arange(1, 100+1, 1).tolist(), 
    'kernel':  ['linear', 'rbf'],     # precomputed,'poly', 'sigmoid' 
    'degree':  np.arange(0, 100+0, 1).tolist(), 
    'gamma':  np.arange(0.0, 10.0+0.0, 0.1).tolist(), 
    'coef0':  np.arange(0.0, 10.0+0.0, 0.1).tolist(), 
    'shrinking': [True], 
    'probability': [False], 
    'tol':   np.arange(0.001, 0.01+0.001, 0.001).tolist(), 
    'cache_size': [2000], 
    'class_weight': [None], 
    'verbose':  [False], 
    'max_iter':  [-1], 
    'random_state': [None], 
    } 

model = grid_search.RandomizedSearchCV(n_iter    = 500, 
             estimator   = svm.SVC(), 
             param_distributions = parameters, 
             n_jobs    = 4, 
             iid     = True, 
             refit    = True, 
             cv     = 5, 
             verbose    = 1, 
             pre_dispatch  = '2*n_jobs' 
             )   # scoring = 'accuracy' 
model.fit(train_X, train_Y) 
print(model.best_estimator_) 
print(model.best_score_) 
print(model.best_params_) 

cevap

4

hyperparameters aramak için Bunu değiştirmeye çalışmalısınız: Bu set-up anda kullanıyorum olduğunu Büyüklük sırasına göre (0, 0,1, 1, 10, 100) ve belki de aralığınızı büyüklükler arasında azaltın ancak modelinizi o kadar geliştireceğini sanmıyorum. Belgelere önerir çünkü olarak

degree : int, optional (default=3) 
    Degree of the polynomial kernel function (‘poly’). Ignored by all other kernels. 

Burada 'RBF' çekirdek kullanırken her derece seyir için zaman harcamak böylece derecesi sadece, polinom çekirdek için kullanılır, sen ızgara arama yaparak şeklini değiştirmek gerekir. Diğer bir nokta, iki dereceyi kullanmanızın sadece verilerinizi fazlaca kullanmasıdır. İşte böyle bir şey kullanmak (1, 2, 3, 4, 5)

coef0 için

aynı sözler sadece 'poli' çekirdek ile kullanıldığı için

tol : float, optional (default=1e-3) 
    Tolerance for stopping criterion. 

dokunduğum olmaz, o sizin değer aralığı gerçekten hiçbir anlam ifade etmiyor.

Ben gamma parametresiyle aşina değilim.

Bunun yerine senin bu temsilini (http://scikit-learn.org/stable/modules/grid_search.html#exhaustive-grid-search) kullanın:

param_grid = [ 
{'C': [1, 10, 100, 1000], 'kernel': ['linear']}, 
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, 
] 

Ve bu parametrelerin her biri ne anlama geldiğini anlamaya çalış:

http://www.csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

9

çekirdek işleri En iyi, verilerinize çok bağlıdır. Numune ve boyutların sayısı ve ne tür verileriniz var? Aralığın karşılaştırılabilir olması için, verilerinizi normalleştirmeniz gerekir, genellikle sıfır ortalama ve birim varyansı olan StandardScaler, iyi bir fikirdir. Verileriniz negatif değilse, MinMaxScaler'ı deneyebilirsiniz. kernel="gamma" için

, ben genellikle hiçbir şey dayalı ama iyi son birkaç yılda bana sunulan

{'C': np.logspace(-3, 2, 6), 'gamma': np.logspace(-3, 2, 6)} 

yok. Logaritmik olmayan gridlere karşı ve hatta ayrık parametreler kullanılarak yapılan randomize aramaya karşı daha çok tavsiye ederim. Rastgele aramaların temel avantajlarından biri, sürekli dağılımları [see the docs] kullanarak sürekli olarak tarayabilmenizdir.

+0

Burada rastgele bir aramada sürekli ve ayrık parametrelerin karıştırılmasının imkansız olduğunu mu söylüyorsunuz? Neden budur ve genellikle tek bir algoritma için karıştırıldığında parametreleri nasıl ararsınız? –

+1

Bu demek istediğim değildi. Aslında sürekli olan parametrelerin listesini kullanmamaya öneriyorum: https://encrypted.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB4QFjAA&url=http% % 3A% 2F% 2Fwww.jmlr.org% 2Fpapers% 2Fvolume13% 2Fbergstra12a% 2Fbergstra12a.pdf & ei = -bpkVf839bWxBJ_Lg4gJ & usg = AFQjCNFKAQbDd5l0Q7WH36ejee4ahKlZQg & sig2 = ftE5PnFHyIvTKvIGGTS4xw & bvm = bv.93990622, d.cWc Sürekli ve ayrık karıştırma iyidir. –

+0

Ayrıca konuşmamın orta bölümünü şu adreste de inceleyebilirsiniz: https://www.youtube.com/watch?v=0wUF_Ov8b0A –