2016-08-28 2 views
1

sklearn에서 GridSearch와 비슷한 작업을하려고합니다. 1, 10 및 100에 해당하는 C를 제외한 모든 매개 변수가 고정 된 3 가지 모델의 목록을 얻고 싶습니다. 각 모델에서. 나는 다음과 같은 두 가지 기능을 가지고있다.파이썬에서 sklearn에서 GridSearch를 재생하지 못했습니다.

def params_GridSearch(dic_params): 
    keys, values = dic_params.keys(), dic_params.values() 
    lst_params = [] 
    for vs in itertools.product(*values): 
     lst_params.append({k:v for k,v in zip(keys,vs)}) 
    return lst_params 

def models_GridSearch(model, dic_params): 
    models = [ model.set_params(**params) for params in params_GridSearch(dic_params) ] 
    return models 

그런 다음 모델을 만들고 매개 변수 사전을 지정하십시오.

from sklearn.svm import SVC 
model = SVC() 
dic = {'C': [1,10,100]} 

방금 ​​정의한 함수를 사용하여 모델을 생성하십시오.

models = models_GridSearch(model, dic) 

그러나, 결과는 3 회 반복되고 (마지막 매개 변수를 사용하여, 즉, 100)과 동일한 모델이다. 일부 앨리어싱이 계속 발생하는 것 같습니다.

답변

3

modelmodel_GridSearch에있는 목록 이해의 각 반복에서 동일한 개체를 참조하므로 동일한 개체에 C 값을 3 번 할당하면됩니다. 이 문제를 해결하기 위해 몇 가지 다른 작업을 수행 할 수 있습니다. copy 모듈을 사용하여 개체의 복사본을 만들거나 인스턴스 대신 models_GridSearch 함수에 클래스를 전달하고 각 반복에서 개체를 인스턴스화 할 수 있습니다. 여러 가지 방법으로 코드를 리팩터링하여 문제를 해결할 수도 있습니다. 그것은 모두 당신의 목표에 달려 있습니다.

복사 방법 :

def models_GridSearch(Model, dic_params): 
    models = [ Model().set_params(**params) for params in params_GridSearch(dic_params) ] 
    return models 


from sklearn.svm import SVC 
Model = SVC 
dic = {'C': [1,10,100]} 

models = models_GridSearch(Model, dic) 
print models 
+0

안녕, 단지와 같은 추가 정보 : 클래스이

import copy def models_GridSearch(model, dic_params): models = [ copy.deepcopy(model).set_params(**params) for params in params_GridSearch(dic_params) ] return models 

패스가 나는'randomizedSearchCV'과 일을'grid.predict()를 사용'이다 'grid.best_estimator_.predict()'와 동일합니다. sklearn은'.best_estimator_' 속성이 존재하면 모델이 훈련되었다고 가정하기 때문입니다. 그렇지 않으면 훈련되지 않았으므로 예측하기가 어렵습니다. 그리하여'grid.predict()'는'.best_estimator_' 객체에 직접 인스턴스를 생성합니다. 실제로이 논리가'gridSearchCV'에 대해서도 일어나는지 모르겠습니다. – Nacho

관련 문제