Я создал небольшой код, который работает аналогично sklearn gridsearch, Он моделирует модель (на X и y в приведенном ниже коде) на одном наборе гиперпараметров, проверяет производительность модели, используя несколько показателей для данных валидации (Xt, yt_class) и сохраняет результаты в базе данных Pandas DataFrame.Python, работающий на нескольких процессорах
from sklearn.grid_search import ParameterGrid
from sklearn.metrics import precision_score,f1_score
grid = {'C':[1,10.0,50,100.0],'gamma':[0.00001,0.0001,0.001,0.01,0.1]}
param_grid = ParameterGrid(grid)
results = pd.DataFrame(list(param_grid))
precision = []
f1 = []
for params in param_grid:
model = SVC(kernel='rbf',cache_size=1000,class_weight='balanced',**params)
model.fit(X,y)
precision.append(precision_score(yt_class, model.predict(Xt), average='weighted'))
f1.append(f1_score(yt_class, model.predict(Xt), average='weighted'))
print(params)
print(precision_score(yt_class, model.predict(Xt), average='weighted'))
print(f1_score(yt_class, model.predict(Xt), average='weighted'))
results['precision'] = precision
results['f1'] = f1
Теперь я пытаюсь сделать мой пробег цикла на несколько процессоров, я попытался следующие основные примеры для многопроцессорных модуля, но, будучи новым для Python и программирования в целом не был в состоянии понять, что работает в моем случае.
Пример того, что не работает:
import multiprocessing as mp
pool = mp.Pool(processes=8)
def get_scores(param_grid):
precision = []
f1 = []
for params in param_grid:
model = SVC(kernel='rbf',cache_size=1000,class_weight='balanced',**params)
model.fit(X,y)
model.predict(Xt)
precision.append(precision_score(yt_class, model.predict(Xt), average='weighted'))
f1.append(f1_score(yt_class, model.predict(Xt), average='weighted'))
return precision,f1
scores = pool.apply(get_scores,param_grid)
Я получаю следующее сообщение об ошибке после (я получаю ту же ошибку после запуска моего кода): 'TypeError: get_scores() принимает 1 позиционный аргумент, но 20 были заданы' –
Правильно, это должно быть map_ async, not apply_async –