Scikit-learn: GridSearchCV рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдХреЛрд░рд░ рдХреЗ рд╕рд╛рде рдЬрдо рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдлрд╝рд░ре░ 2014  ┬╖  99рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: scikit-learn/scikit-learn

рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдШрдВрдЯреЛрдВ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рджреЛрд╣рд░рд╛ рд╕рдХрддрд╛ рд╣реВрдВ:

clf = GridSearchCV( sk.LogisticRegression(),
                            tuned_parameters,
                            cv = N_folds_validation,
                            pre_dispatch='6*n_jobs', 
                            n_jobs=4,
                            verbose = 1,
                            scoring=metrics.make_scorer(metrics.scorer.f1_score, average="macro")
                        )

рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рд╕реНрдХреЛрд░рд┐рдВрдЧ=metrics.make_scorer(metrics.scorer.f1_score, рдФрд╕рдд="рдореИрдХреНрд░реЛ") рдХреЗ рдХрд╛рд░рдг рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореАрдЯреНрд░рд┐рдХ sklearn.metrics рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рд╕реНрдХреЛрд░рд┐рдВрдЧ = ... рд▓рд╛рдЗрди рдХреЛ рд░рджреНрдж рдХрд░ рджреЗрддрд╛ рд╣реВрдВ, рддреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрджреНрдзрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ f1 рд╕реНрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ n_jobs = 1 рд╕реЗрдЯ рдХрд░рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░рджреНрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрднрд╛рд╡рдирд╛ рдЦреЛрдП рдмрд┐рдирд╛ рдореИрдВ рдПрдХ рдФрд░ рд╕реНрдХреЛрд░ рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдзрдиреНрдпрд╡рд╛рдж

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рдо, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╢рд╛рдпрдж @GaelVaroquaux рдпрд╛ @ogrisel рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдиреЛрдЯрдмреБрдХ __name__ == "__main__" ред
рдореАрдЯреНрд░рд┐рдХ рдХреЛ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдФрд░ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GridSearchCV рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬрд╝ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, IPython рдиреЛрдЯрдмреБрдХ рдФрд░ рдЬреЙрдмрд▓рд┐рдм рдХреЗ рдмреАрдЪ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддрдЪреАрдд рд╣реИред

рд╕рднреА 99 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддреА рд╣реИ!

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • "рджреБрд░реНрдШрдЯрдирд╛рдУрдВ" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?
  • рдпрд╣ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ? рдпрджрд┐ рдпрд╣ 0.14 рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ?
  • рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдЖрдк рдХрд┐рд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рд╣реИрдВ? (рдЬреИрд╕реЗ import platform; platform.platform() )
  • рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдЖрдЬрдорд╛рдпрд╛ рд╣реИ?

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореЗрд░реА рдорд╢реАрди рдХреЛ рд╕реНрдХреЗрд▓реЗрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд╕рд╛рде рдЖрдИрд░рд┐рд╕ рдлрд┐рдЯ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж рдЖрдкрдХреЗ рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдПред

рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рд╕реЗ рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдардВрдб рд╕реЗ рд╣реИред рдпрд╣ рдЕрдм рдФрд░ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рдЯрд╛рд╕реНрдХ рдореИрдиреЗрдЬрд░ рдХреА рдкрд╛рдпрдерди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдФрд░ рдХреЛрдИ рдЧрддрд┐рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрднреА рднреА рд╣реИрдВ рдФрд░ рд░реИрдо рдХреА рдирд┐рд░рдВрддрд░ рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдпрд╣ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди 0.14 рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдПрдирдереЙрдЯ рдХреИрдиреЛрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛ред

рдореИрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо "рд╡рд┐рдВрдбреЛрдЬ-7-6.1.7601-рдПрд╕рдкреА1" рдкрд░ рд╣реВрдВред

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╕реАрд╡реА рдХреЛ рд▓реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИред (рдЕрдкрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд░рди_рдЯреНрдпреВрди_рдкреНрд░реЛрд╕реЗрд╕() рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд▓реВрдк рдореЗрдВ рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╕реАрд╡реА() рдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)

рдХреЛрдб:

import sklearn.metrics as metrics
from sklearn.grid_search import GridSearchCV
import numpy as np
import os
from sklearn import datasets
from sklearn import svm as sk


def tune_hyperparameters(trainingData, period):
    allDataTrain = trainingData

    # Define hyperparameters and construct a dictionary of them
    amount_kernels = 2
    kernels = ['rbf','linear']
    gamma_range =   10. ** np.arange(-5, 5)
    C_range =       10. ** np.arange(-5, 5)
    tuned_parameters = [
                        {'kernel': ['rbf'],     'gamma': gamma_range , 'C': C_range},
                        {'kernel': ['linear'],  'C': C_range}
                       ]

    print("Tuning hyper-parameters on period = " + str(period) + "\n")

    clf = GridSearchCV( sk.SVC(), 
                        tuned_parameters,
                        cv=5,
                        pre_dispatch='4*n_jobs', 
                        n_jobs=2,
                        verbose = 1,
                        scoring=metrics.make_scorer(metrics.scorer.f1_score, average="macro")
                        )
    clf.fit(allDataTrain[:,1:], allDataTrain[:,0:1].ravel())

    # other code will output some data to files, graphs and will save the optimal model with joblib package


    #   Eventually we will return the optimal model
    return clf

def run_tune_process(hyperparam_tuning_method,trainingData, testData):    
    for period in np.arange(0,100,10):
                clf = hyperparam_tuning_method(trainingData,period)

                y_real = testData[:,0:1].ravel()
                y_pred = clf.predict(testData[:,1:])

# import some data to play with
iris = datasets.load_iris()
X_training = iris.data[0:100,:]  
Y_training = (iris.target[0:100]).reshape(100,1)
trainingset = np.hstack((Y_training, X_training))

X_test = iris.data[100:150,:]  
Y_test = (iris.target[100:150]).reshape(50,1)
testset = np.hstack((Y_test, X_test))

run_tune_process(tune_hyperparameters,trainingset,testset)

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╣ рдХреЛрдб рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдореИрдВ n_jobs рдХреЛ 1 рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реВрдВ рдпрд╛ рдЬрдм рдореИрдВ рд╕реНрдХреЛрд░рд┐рдВрдЧ = рддрд░реНрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред

рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ
рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ рдЗрд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣рд╛рдБ рд╣реИ
0.14 рдореЗрдВ рдФрд╕рдд = рдореИрдХреНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд╕рдд (рднрд╛рд░рд┐рдд) рд╕реЗ рд▓рдЯрдХрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдкрд░
рд╕рд┐рд░, рдпрд╣ рдореЗрд░реА рдореИрдХрдмреБрдХ рдкрд░ 11s рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 7s рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 0.14 . рдкрд░ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ
(рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ!)

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛
рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ?

реирел рдлрд░рд╡рд░реА реирежрезрек рдХреЛ реиреж:рекреж рдХреЛ, рдПрдбрд╡рд░рд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдзрдиреНрдпрд╡рд╛рдж рдЖрдкрдХреЗ рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдПред

рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рд╕реЗ рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдардВрдб рд╕реЗ рд╣реИред рдпрд╣ рдЕрдм рдФрд░ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реИ
рдХреА рдЕрдЬрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рднреА рдирд╣реАрдВ рд╣реИ
рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрднреА рднреА рд╣реИрдВ рдФрд░ рдЙрдкрднреЛрдЧ рдХрд░реЗрдВ a
RAM рдХреА рдирд┐рд░рдВрддрд░ рдорд╛рддреНрд░рд╛ рд▓реЗрдХрд┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди 0.14 рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдПрдирдереЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛
рдЪрдВрджрд╡рд╛ред

рдореИрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо "рд╡рд┐рдВрдбреЛрдЬ-7-6.1.7601-рдПрд╕рдкреА1" рдкрд░ рд╣реВрдВред

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдКрдВрдЧрд╛ред рдореИрдВ
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╕реАрд╡реА рдХреЛ рд▓реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИред (рдкреНрд░рддрд┐
рдЕрдкрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
run_tune_process() рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдФрд░ рд▓реВрдк рдореЗрдВ GridSearchCV() рдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)
рдХреЛрдб:

sklearn.metrics рдХреЛ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
sklearn.grid_search рд╕реЗ рдЖрдпрд╛рдд GridSearchCV
np . рдХреЗ рд░реВрдк рдореЗрдВ numpy рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдЖрдпрд╛рдд рдУрдПрд╕
рд╕реНрдХреЗрд▓реЗрд░ рдЖрдпрд╛рдд рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ
sklearn рдЖрдпрд╛рдд svm рд╕реЗ sk . рдХреЗ рд░реВрдк рдореЗрдВ

def рдЯреНрдпреВрди_рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ (рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдбреЗрдЯрд╛, рдЕрд╡рдзрд┐):
рдСрд▓рдбрд╛рдЯрд╛рдЯреНрд░реЗрди = рдЯреНрд░реЗрдирд┐рдВрдЧрдбрд╛рдЯрд╛

# Define hyperparameters and construct a dictionary of them
amount_kernels = 2
kernels = ['rbf','linear']
gamma_range =   10. ** np.arange(-5, 5)
C_range =       10. ** np.arange(-5, 5)
tuned_parameters = [
                    {'kernel': ['rbf'],     'gamma': gamma_range , 'C': C_range},
                    {'kernel': ['linear'],  'C': C_range}
                   ]

print("Tuning hyper-parameters on period = " + str(period) + "\n")

clf = GridSearchCV( sk.SVC(),
                    tuned_parameters,
                    cv=5,
                    pre_dispatch='4*n_jobs',
                    n_jobs=2,
                    verbose = 1,
                    scoring=metrics.make_scorer(metrics.scorer.f1_score, average="macro")
                    )
clf.fit(allDataTrain[:,1:], allDataTrain[:,0:1].ravel())

# other code will output some data to files, graphs and will save the optimal model with joblib package


#   Eventually we will return the optimal model
return clf

def run_tune_process(hyperparam_tuning_method,trainingData,testData):
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП np.arange(0,100,10) рдореЗрдВ:
clf = hyperparam_tuning_method (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛, рдЕрд╡рдзрд┐)

            y_real = testData[:,0:1].ravel()
            y_pred = clf.predict(testData[:,1:])

рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЖрдИрд░рд┐рд╕ = рдбреЗрдЯрд╛рд╕реЗрдЯред рд▓реЛрдб_рдЖрдИрд░рд┐рд╕ ()
X_training = рдЖрдИрд░рд┐рд╕.рдбреЗрдЯрд╛ [0:100,:]
Y_training = (iris.target[0:100]).reshape(100,1)
рдЯреНрд░реЗрдирд┐рдВрдЧрд╕реЗрдЯ = np.hstack ((Y_training, X_training))

X_test = рдЖрдИрд░рд┐рд╕.рдбреЗрдЯрд╛ [резрежреж:резрелреж,:]
Y_test = (рдЖрдИрд░рд┐рд╕.рдЯрд╛рд░рдЧреЗрдЯ[резрежреж:резрелреж]).reshape(релреж,рез)
рдЯреЗрд╕реНрдЯрд╕реЗрдЯ = np.hstack ((Y_test, X_test))

run_tune_process(tune_hyperparameters,trainingset,testset)

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment -35990430
.

(рдПрдХ рд╕рд╛рдЗрдб рдкреЙрдЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ, @ogrisel , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЬреЙрдмрд▓рд┐рдм рд▓рдЧрддрд╛ рд╣реИ)
рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╕рдорд╛рдВрддрд░рддрд╛ рдУрд╡рд░рд╣реЗрдб - рдУрдПрд╕ рдПрдХреНрд╕ рдкрд░ рдХрдо рд╕реЗ рдХрдо - рд╡рд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛
0.14 рдореЗрдВ...)

25 рдлрд░рд╡рд░реА 2014 21:52 рдХреЛ, рдЬреЛрдПрд▓ рдиреЛрдердореИрди [email protected] рд▓рд┐рдЦрд╛ :

рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрддреА рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ
рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ рдЗрд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд╕рд╛рде рд╕рд╣рд╕рдВрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╣рд╛рдБ рд╣реИ
0.14 рдореЗрдВ рдФрд╕рдд = рдореИрдХреНрд░реЛ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд╕рдд (рднрд╛рд░рд┐рдд) рд╕реЗ рд▓рдЯрдХрдиреЗ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╡рд┐рдХрд╛рд╕ рдкрд░
рд╕рд┐рд░, рдпрд╣ рдореЗрд░реА рдореИрдХрдмреБрдХ рдкрд░ 11s рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ 7s рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 0.14 . рдкрд░ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ
(рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ!)

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛
рдпрд╣ рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ рд╣реИ?

реирел рдлрд░рд╡рд░реА реирежрезрек рдХреЛ реиреж:рекреж рдХреЛ, рдПрдбрд╡рд░рд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдзрдиреНрдпрд╡рд╛рдж рдЖрдкрдХреЗ рд╢реАрдШреНрд░ рдкреНрд░рддрд┐рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдПред

рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдиреЗ рд╕реЗ рдореЗрд░рд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорддрд▓рдм рдардВрдб рд╕реЗ рд╣реИред рдпрд╣ рдЕрдм рдФрд░ рдЬрд╛рд░реА рдирд╣реАрдВ рд╣реИ
рдХреА рдЕрдЬрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рднреА рдирд╣реАрдВ рд╣реИ
рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрдХред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рдЕрднреА рднреА рд╣реИрдВ рдФрд░ рдЙрдкрднреЛрдЧ рдХрд░реЗрдВ a
RAM рдХреА рдирд┐рд░рдВрддрд░ рдорд╛рддреНрд░рд╛ рд▓реЗрдХрд┐рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди 0.14 рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдмрд╛рд░ рдПрдирдереЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЪрд▓рд╛рдпрд╛ рдЧрдпрд╛
рдЪрдВрджрд╡рд╛ред

рдореИрдВ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо "рд╡рд┐рдВрдбреЛрдЬ-7-6.1.7601-рдПрд╕рдкреА1" рдкрд░ рд╣реВрдВред

рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЬрд╛рдКрдВрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЧреНрд░рд┐рдбрд╕рд░реНрдЪрд╕реАрд╡реА рдХреЛ рд▓реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рд╣реИред (рдкреНрд░рддрд┐
рдЕрдкрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ, рдЖрдкрдХреЛ рд╢рд╛рдпрдж рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
run_tune_process() рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рдХреЛрдб рдХреЗ рдиреАрдЪреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
рдФрд░ рд▓реВрдк рдореЗрдВ GridSearchCV() рдпреБрдХреНрдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)
рдХреЛрдб:

sklearn.metrics рдХреЛ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ
sklearn.grid_search рд╕реЗ рдЖрдпрд╛рдд GridSearchCV
np . рдХреЗ рд░реВрдк рдореЗрдВ numpy рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдЖрдпрд╛рдд рдУрдПрд╕
рд╕реНрдХреЗрд▓реЗрд░ рдЖрдпрд╛рдд рдбреЗрдЯрд╛рд╕реЗрдЯ рд╕реЗ
sklearn рдЖрдпрд╛рдд svm рд╕реЗ sk . рдХреЗ рд░реВрдк рдореЗрдВ

def рдЯреНрдпреВрди_рд╣рд╛рдЗрдкрд░рдкреИрд░рд╛рдореАрдЯрд░ (рдкреНрд░рд╢рд┐рдХреНрд╖рдгрдбреЗрдЯрд╛, рдЕрд╡рдзрд┐):
рдСрд▓рдбрд╛рдЯрд╛рдЯреНрд░реЗрди = рдЯреНрд░реЗрдирд┐рдВрдЧрдбрд╛рдЯрд╛

# Define hyperparameters and construct a dictionary of them
amount_kernels = 2
kernels = ['rbf','linear']
gamma_range =   10. ** np.arange(-5, 5)
C_range =       10. ** np.arange(-5, 5)
tuned_parameters = [
                    {'kernel': ['rbf'],     'gamma': gamma_range , 'C': C_range},
                    {'kernel': ['linear'],  'C': C_range}
                   ]

print("Tuning hyper-parameters on period = " + str(period) + "\n")

clf = GridSearchCV( sk.SVC(),
                    tuned_parameters,
                    cv=5,
                    pre_dispatch='4*n_jobs',
                    n_jobs=2,
                    verbose = 1,
                    scoring=metrics.make_scorer(metrics.scorer.f1_score, average="macro")
                    )
clf.fit(allDataTrain[:,1:], allDataTrain[:,0:1].ravel())

# other code will output some data to files, graphs and will save the optimal model with joblib package


#   Eventually we will return the optimal model
return clf

def run_tune_process(hyperparam_tuning_method,trainingData,testData):
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП np.arange(0,100,10) рдореЗрдВ:
clf = hyperparam_tuning_method (рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛, рдЕрд╡рдзрд┐)

            y_real = testData[:,0:1].ravel()
            y_pred = clf.predict(testData[:,1:])

рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдбреЗрдЯрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЖрдИрд░рд┐рд╕ = рдбреЗрдЯрд╛рд╕реЗрдЯред рд▓реЛрдб_рдЖрдИрд░рд┐рд╕ ()
X_training = рдЖрдИрд░рд┐рд╕.рдбреЗрдЯрд╛ [0:100,:]
Y_training = (iris.target[0:100]).reshape(100,1)
рдЯреНрд░реЗрдирд┐рдВрдЧрд╕реЗрдЯ = np.hstack ((Y_training, X_training))

X_test = рдЖрдИрд░рд┐рд╕.рдбреЗрдЯрд╛ [резрежреж:резрелреж,:]
Y_test = (рдЖрдИрд░рд┐рд╕.рдЯрд╛рд░рдЧреЗрдЯ[резрежреж:резрелреж]).reshape(релреж,рез)
рдЯреЗрд╕реНрдЯрд╕реЗрдЯ = np.hstack ((Y_test, X_test))

run_tune_process(tune_hyperparameters,trainingset,testset)

рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ Gi tHub рдкрд░ рджреЗрдЦреЗрдВhttps://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment -35990430
.

рдЗрд╕рдХрд╛ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкрд╛рдпрдерди рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдЖрдкрдХреЛ n_jobs=-1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ if __name__ == '__main__' рдмреНрд▓реЙрдХ рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЖрдкрдХреЛ рдлреНрд░реАрдЬ/рдХреНрд░реИрд╢ рдорд┐рд▓реЗрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд╣реАрдВ рдкреНрд░рдореБрдЦ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реАрдбрдореЗ рдореЗрдВ?

рдЖрдкрдХреЛ рд╡рд╣ рд╕рдм рдХреБрдЫ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ n_jobs= -1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдирд╛рдо == . рдореЗрдВ
' рдореБрдЦреНрдп ' рдмреНрд▓реЙрдХ рдпрд╛ рдЖрдкрдХреЛ рдлрд╝реНрд░реАрдЬрд╝/рдХреНрд░реИрд╢ рдорд┐рд▓реЗрдВрдЧреЗред

рдЦреИрд░, рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдЬрдХрд▓ рдЬреЙрдмрд▓рд┐рдм рдПрдХ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ
рдлреЛрд░реНрдХ рдмрдо рдХреЗ рдмрдЬрд╛рдп рдРрд╕реА рджреБрд░реНрдШрдЯрдирд╛ рдкрд░ рд╕рдВрджреЗрд╢ред

@GaelVaroquaux рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдЬреНрдЮрд╛рди-рд╕реАрдЦрдирд╛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рджреЗрддрд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, IMHOред

@GaelVaroquaux рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдЬреНрдЮрд╛рди-рд╕реАрдЦрдирд╛ рдЙрд╕ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЛ рджреЗрддрд╛ рд╣реИ? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ
рдореБрджреНрджрд╛ рддрдп рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, IMHOред

рдпрд╣ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдЬрд╛рдВрдЪрдирд╛ рд╣реИред рдореИрдВ рд╕рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реВрдБ
рдЕрднреА, рдФрд░ рдореИрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Windows VM рдХреЛ рдмреВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдирд╣реАрдВ рдХрд░рддрд╛ :)

рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рд╕реА рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВ
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдордд рдХрд░реЛ :)

рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдВрдбреЛрдЬ рд╡реАрдПрдо рд╣реИред рдореИрдВ рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЦреЛрдЬрдиреЗ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рд╣реИред

@ рд▓рд╛рд░реНрд╕рдореИрди , рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВред рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрд░реА рдЧрд▓рддреА рдереА, рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдореЗрдВ рд╣реИред рдореИрдВрдиреЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЗрд╕реА рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИред

рдореБрдЭреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреНрд░реИрд╢ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдмрд╕ рдХреЛрдИ рд╕рд╛рд░реНрдердХ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

@adverley рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ Windows рдмреЙрдХреНрд╕ рдкрд░ GitHub рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ

рдлреАрд╕рдмреИрдХ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдмрдВрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдЬреНрдЮрд╛рдд рдореБрджреНрджрд╛ рд╣реИ рдЬреЛ рдирдП рдЬреЙрдмрд▓рд┐рдм рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ, рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдЕрднреА рднреА рдЬрдо рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ Google рдкрд░ рдЗрд╕ рдзрд╛рдЧреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ - рд╕реНрдХреЛрд░рд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛, рдФрд░ рдЧреНрд░рд┐рдб рдЦреЛрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЬрдм рдпрд╣ рдЬрдо рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИред 3 рдЕрдЬрдЧрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рднреА рдкреИрджрд╛ рд╣реБрдИ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ n_jobs=3 рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рднреА рдкрд╛рдпрдерди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП CPU рдЙрдкрдпреЛрдЧ 0 рд░рд╣рддрд╛ рд╣реИред рдореИрдВ рдЖрдИрдкреАрдерди рдиреЛрдЯрдмреБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдк рд╕реНрдХреЛрд░рд░ рдХрд╛ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕рдВрднрд╡ рд▓рдЧрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХрд╛ рд╕реНрдХреЛрд░рд░ рдХрд╣реАрдВ рднреА joblib / n_jobs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЙрдмрд▓рд┐рдм рдХреЛ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред

рдЬрд╝рд░реВрд░ - рдпрд╣рд╛рдБ рдкреВрд░рд╛ рдХреЛрдб рд╣реИ - http://pastebin.com/yUE26SNs

рд╕реНрдХреЛрд░рд░ рдлрд╝рдВрдХреНрд╢рди "рд╕реНрдХреЛрд░_рдореЙрдбрд▓" рд╣реИ, рдпрд╣ рдЬреЙрдмрд▓рд┐рдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдХрдорд╛рдВрдб рдкреНрд░реЙрдореНрдкреНрдЯ рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди IPython рдиреЛрдЯрдмреБрдХ рд╕реЗ рдирд╣реАрдВред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ -
AttributeError: Can't get attribute 'score_model' on <module '__main__' (built-in)>;

рддрдм IPython рдФрд░ рд╕рднреА рдЙрддреНрдкрдиреНрди рдЕрдЬрдЧрд░ рдЙрджрд╛рд╣рд░рдг рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ - рдЪреБрдкрдЪрд╛рдк - рдФрд░ рдЬрдм рддрдХ рдореИрдВ рдЗрд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдирд╣реАрдВ рдХрд░рддрд╛ рддрдм рддрдХ рдХрд┐рд╕реА рднреА рдЕрдЬрдЧрд░ рдХреЛрдб рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ред

рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдХреНрдпрд╛ рдЖрдк IPython рдиреЛрдЯрдмреБрдХ рдореЗрдВ pylab рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ? рдирд╣реАрдВ рддреЛ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЦреИрд░, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИ ... рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЬреЙрдмрд▓рд┐рдмреНрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ _it рдХреЗрд╡рд▓ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм n_jobs 1_ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ, n_jobs=1 рд╕рд╛рде рдареАрдХ рдЪрд▓рддрд╛ рд╣реИред

рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╡рд╛рд░реНрддрд╛ score_model рд╕реЗ рд▓рд╛рдкрддрд╛ __main__ , рдпрд╛ рдирд╣реАрдВ, рдореИрдВ рдПрдХ if __name__ == '__main__' IPython рдиреЛрдЯрдмреБрдХ рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВред

(рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рддреНрд░реБрдЯрд┐ рд░реЗрдЦрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдКрдкрд░ рдЪрд┐рдкрдХрд╛рдИ рдЧрдИ рдереА - рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИред)

рдореИрдВ рдкрд╛рдЗрд▓реИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ред

рдпрд╣рд╛рдБ рдкреВрд░реНрдг рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ - http://pastebin.com/23y5uHT2

рд╣рдо, рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдореБрджреНрджреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╢рд╛рдпрдж @GaelVaroquaux рдпрд╛ @ogrisel рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдиреЛрдЯрдмреБрдХ __name__ == "__main__" ред
рдореАрдЯреНрд░рд┐рдХ рдХреЛ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдФрд░ рдЗрд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдЧрд╛ред
рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ GridSearchCV рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬрд╝ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, IPython рдиреЛрдЯрдмреБрдХ рдФрд░ рдЬреЙрдмрд▓рд┐рдм рдХреЗ рдмреАрдЪ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддрдЪреАрдд рд╣реИред

рджреЛрд╕реНрддреЛрдВ... рд╕реВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡реИрд╕реЗ рднреА рдореБрдЭреЗ рдкрд╣рд▓реЗ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдереА, рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рел рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд┐рдпрд╛ред рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж :)
рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ рдЕрднреА рднреА рдЬрдо рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬрдм рдореЗрд░реЗ рдЕрдкрдиреЗ рдореЗрдХ_рд╕реНрдХреЛрд░ рд▓рд╛рдЧрдд рдлрд╝рдВрдХреНрд╢рди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ..рдореЗрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдЬрдордиреЗ рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рдореИрдВрдиреЗ рдХрд╕реНрдЯрдо рд▓рд╛рдЧрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрди рдлреНрд░реАрдЬ рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝рд╛

рдЗрди 5 рдШрдВрдЯреЛрдВ рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВред

рдореИрдВ рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдХреНрд░реЙрд╕-рд╕рддреНрдпрд╛рдкрди рдФрд░ n_jobs = -1 рдХреЗ рднреАрддрд░ рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдЬреНрдпреВрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ AttributeError: Can't get attribute 'custom_scorer' on <module '__main__' (built-in)>; рд╕рдВрджреЗрд╢ рдорд┐рд▓ рд░рд╣рд╛ рдерд╛ред
рдЬреИрд╕рд╛ рдХрд┐ @amueller рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдХреЛ рдиреЛрдЯрдмреБрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЖрдпрд╛рдд рдХрд░рдирд╛ред

рдореБрдЭреЗ OSX 10.10.5 . рдкрд░ рдареАрдХ рд╡реИрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ

рдореЗрд░рд╛ рднреА рдпрд╣реА рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдУрдПрд╕рдПрдХреНрд╕ 10.12.5

рдХреГрдкрдпрд╛ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдВред рд╣рдо рдЗрд╕рдХреА рддрд╣ рддрдХ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред рдбреЗрдЯрд╛ рд╕рд╣рд┐рдд рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред

рдмрд╕ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрдЬрдЧрд░ рдЦреЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдБ

import numpy as np
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.preprocessing import RobustScaler
from sklearn.metrics import classification_report
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_predict

np.random.seed(1234)
X = np.random.sample((1000, 100))
Y = np.random.sample((1000)) > 0.5
svc_pipeline = Pipeline([('pca', PCA(n_components=95)), ('svc', SVC())])
predictions = cross_val_predict(svc_pipeline, X, Y, cv=30, n_jobs=-1)
print classification_report(Y, predictions)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреАрд╕реАрдП рдЪрд░рдг рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:

рдбрд╛рд░реНрд╡рд┐рди-16.6.0-x86_64-i386-64bit
('рдкрд╛рдпрдерди', '2.7.13 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 4 рдЕрдкреНрд░реИрд▓ 2017, 08:47:57) \n[GCC 4.2.1 рд╕рдВрдЧрдд Apple LLVM 8.1.0 (clang-802.0.38)]')
('NumPy', '1.12.1')
('SciPy', '0.19.1')
('рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди', '0.18.2')

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рд╣рдореЗрдВ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ a
рдЕрд▓рдЧ рдореБрджреНрджрд╛?

8 рдЕрдЧрд╕реНрдд 2017 6:15 рдмрдЬреЗ, "boazsh" [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдмрд╕ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдЕрдЬрдЧрд░ рдЦреЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдБ

sklearn.decomposition рдЖрдпрд╛рдд PCAрд╕реЗ sklearn.svm sklearn рд╕реЗ SVC рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдПрдХреНрд╕ = рдПрдирдкреА.рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдирдореВрдирд╛ ((1000, 100))
рд╡рд╛рдИ = рдПрдирдкреАред рдпрд╛рджреГрдЪреНрдЫрд┐рдХред рдирдореВрдирд╛ ((1000))> 0.5
svc_pipeline = рдкрд╛рдЗрдкрд▓рд╛рдЗрди ([('рдкреАрд╕реАрдП', рдкреАрд╕реАрдП (n_components = 95)), ('svc', SVC ())])
рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ = cross_val_predict(svc_pipeline, X, Y, cv=30, n_jobs=-1)рдкреНрд░рд┐рдВрдЯ рд╡рд░реНрдЧреАрдХрд░рдг_рд░рд┐рдкреЛрд░реНрдЯ(Y, рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгрд┐рдпрд╛рдВ)

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреАрд╕реАрдП рдЪрд░рдг рдХреЛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:

рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди ==0.18.2
scipy==0.19.1
рд╕реБрдиреНрди == 1.12.1

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment-320885103 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAEz6-6Klhc67b5kZ17fFTxc8RfZQ_BWks5sWBkLgaJpZM4BkiD9
.

рдЬрдм рдореБрдЭреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рддреЛ рдореИрдВ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдореЗрд░реА рдорд╢реАрди рдкрд░ред рд╕реНрдХреЛрд░рд░ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рднреА рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реАред рд╡реИрд╕реЗ рднреА, рд▓рдХреНрд╖рдг рд╕рдорд╛рди рджрд┐рдЦрддреЗ рд╣реИрдВред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ CPU рдЙрдкрдпреЛрдЧ рдХрдо рд╣реЛрддрд╛ рд╣реИред

@boazsh рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рдпрддрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП np.random.RandomState рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд░рди рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рд╣рдореЗрд╢рд╛ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИред

рдпрджрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП https://github.com/scikit-learn/scikit-learn/issues/5115#issuecomment -187683383 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реБрдЭрд╛рдП рдЧрдП рдкрд╛рдпрдерди 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдХрд╛рд░реНрдп-рдЖрд╕рдкрд╛рд╕ рднреА рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп OSX рдкрд░ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдХреБрдЫ рдЕрдВрд╢ (рдмрд╕ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЬреЛ рдХрдореА рд╣реИ рдЙрд╕реЗ рдЬреЛрдбрд╝реЗрдВ https://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment-320885103):

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("NumPy", numpy.__version__)
import scipy; print("SciPy", scipy.__version__)
import sklearn; print("Scikit-Learn", sklearn.__version__)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдиреЗ рдУрдПрд╕рдПрдХреНрд╕ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ (рдХрд╛рдврд╝рд╛, рдЖрджрд┐ ...) рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде, рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде, рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛?

рд╕реНрдирд┐рдкреЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (np.random.seed рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛)

рдбрд╛рд░реНрд╡рд┐рди-16.6.0-x86_64-i386-64bit
('рдкрд╛рдпрдерди', '2.7.13 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 4 рдЕрдкреНрд░реИрд▓ 2017, 08:47:57) \n[GCC 4.2.1 рд╕рдВрдЧрдд Apple LLVM 8.1.0 (clang-802.0.38)]')
('NumPy', '1.12.1')
('SciPy', '0.19.1')
('рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди', '0.18.2')

рд╕реНрдирд┐рдкреЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (np.random.seed рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛)

рдмрдврд┐рдпрд╛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдиреЗ рдУрдПрд╕рдПрдХреНрд╕ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ (рдХрд╛рдврд╝рд╛, рдЖрджрд┐ ...) рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде, рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде, рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛?

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рдЖрдкрдХрд╛ рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ...

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЪреВрдХ рдЧрдпрд╛ - рдкрд┐рдкред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдЙрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ:

рдЖрдпрд╛рдд рдордВрдЪ; рдкреНрд░рд┐рдВрдЯ (рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо.рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо ())
рдбрд╛рд░реНрд╡рд┐рди-16.7.0-x86_64-i386-64bit
рдЖрдпрд╛рдд рдкреНрд░рдгрд╛рд▓реА; рдкреНрд░рд┐рдВрдЯ ("рдкрд╛рдпрдерди", sys.version)
рдкрд╛рдпрдерди 2.7.12 |Continuum Analytics, Inc.| (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 2 рдЬреБрд▓рд╛рдИ 2016, 17:43:17)
[рдЬреАрд╕реАрд╕реА рек.реи.рез (рдПрдкреНрдкрд▓ рдЗрдВрдХ. рдмрд┐рд▓реНрдб релремрелрео рдкрд░ рдЖрдзрд╛рд░рд┐рдд) (рдПрд▓рдПрд▓рд╡реАрдПрдо рдмрд┐рд▓реНрдб реирейрейрем.резрез.режреж)]
рдЖрдпрд╛рдд рд╕реБрдиреНрди; рдкреНрд░рд┐рдВрдЯ ("NumPy", numpy.__version__)
рдиреНрдпреВрдордкреА 1.13.1
рдЖрдпрд╛рдд scipy; рдкреНрд░рд┐рдВрдЯ ("SciPy", scipy.__version__)
рд╡рд┐рдЬреНрдЮрд╛рдирдкреА 0.19.1
рдЖрдпрд╛рдд рд╕реНрдХреЗрд▓реЗрд░; рдкреНрд░рд┐рдВрдЯ ("рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди", рд╕реНрдХреЗрд▓реЗрд░реНрди.__рд╕рдВрд╕реНрдХрд░рдг__)
рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.18.2

рдХреНрдпрд╛ рдЖрдк рд╡рд░реНрдмреЛрдЬрд╝=10 рдХреЛ cross_val_predict рдореЗрдВ рднреА рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рдо рд╢рд╛рдпрдж
рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ рдЯреВрдЯрддрд╛ рд╣реИ?

8 22:59 рдЕрдЧрд╕реНрдд 2017, boazsh [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЪреВрдХ рдЧрдпрд╛ - рдкрд┐рдкред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment-320948362 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAEz67S64KIXUGvARGjvxBOw_4aCAdqhks5sWFu0gaJpZM4BkiD9
.

@jnothman рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдВрдбрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рддреЗрдЬред рдпрд╣ рдардВрдб рдХреА рд╕рдорд╕реНрдпрд╛ рдПрдХреНрд╕реЗрд▓реЗрд░реЗрдЯ рдФрд░ рдкрд╛рдпрдерди рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред http://scikit-learn.org/stable/faq.html#why -do-i-sometime-get-a-crash-freeze-with-n-jobs-1-under-osx-or-linux рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП .

рджреВрд╕рд░реА рдУрд░ pip рдЙрди рдкрд╣рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ рдЬреЛ Accelerate (рд▓реЗрдЦрди рдХреЗ рд╕рдордп) рдХреЗ рд╕рд╛рде рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдмрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб (JOBLIB_START_METHOD рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдПрдордХреЗрдПрд▓ (рдЬреИрд╕реЗ рдХреЛрдВрдбрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдпрд╛ рдУрдкрдирдмреАрдПрд▓рдПрдПрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЛрдВрдбрд╛-рдлреЛрд░реНрдЬ рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

рдХреБрдЫ рднреА рдирд╣реАрдВ рдЫрд╛рдкрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ...

screen shot 2017-08-08 at 16 43 35

@jnothman рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдВрдбрд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рди рдХрд┐ рддреЗрдЬред

@jnothman рдпрджрд┐ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ

conda create -n test-env python=3 nomkl scikit-learn ipython

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдореИрдВ рдЕрдкрдиреЗ рдУрдПрд╕ рдПрдХреНрд╕ рд╡реАрдПрдо рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ @boazsh рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

Darwin-16.1.0-x86_64-i386-64bit
('Python', '2.7.13 |Continuum Analytics, Inc.| (default, Dec 20 2016, 23:05:08) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]')
('NumPy', '1.12.1')
('SciPy', '0.19.1')
('Scikit-Learn', '0.18.2')

рд╣рдореНрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рд╕реНрдирд┐рдкреЗрдЯ рдкреВрд░реНрдг рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рдирд╣реАрдВ рдерд╛ред рдпрд╣рд╛рдБ рдПрдХ рдЕрджреНрдпрддрди рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ:

import numpy as np
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.preprocessing import RobustScaler
from sklearn.metrics import classification_report
from sklearn.pipeline import Pipeline
from sklearn.model_selection import cross_val_predict

np.random.seed(1234)
X = np.random.sample((1000, 100))
Y = np.random.sample((1000)) > 0.5
svc_pipeline = Pipeline([('pca', PCA(n_components=95)), ('svc', SVC())])
PCA(n_components=95).fit(X, Y) # this line is required to reproduce the freeze
predictions = cross_val_predict(svc_pipeline, X, Y, cv=30, n_jobs=-1)
print(classification_report(Y, predictions))

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Accelerate рдФрд░ Python рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреНрдЮрд╛рдд рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдХреА рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╢рд╛рдпрдж рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рди рдХрд┐ рдПрдХреНрд╕реАрд▓рд░реЗрдЯ рдХрд░реЗрдВред

рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ (рд╢рд╛рдпрдж scikit-learn 0.20) рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЬреЙрдмрд▓рд┐рдм рдХреЗ рд▓рд┐рдП рдирдП рд▓реЛрдХреА рдмреИрдХрдПрдВрдб рджреНрд╡рд╛рд░рд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: https://github.com/scikit-learn/scikit-learn/issues/7650

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рд╡реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд▓рдХреНрд╖рдг рд╣реИ ....

рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рд╡реЗрдВрдбрд░рд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд▓рдХреНрд╖рдг рд╣реИ ....

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдврд╝рд╛, рдЬреЛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛:
https://lwn.net/Articles/730630/rss

рдореЗрд░реЗ рдкрд╛рд╕ RandomizedSearchCV рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рд╣реИ; рдпрд╣ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рд▓рдЯрдХрд╛ рд░рд╣рддрд╛ рд╣реИред рдореИрдВ 3 рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рдореИрдХрдмреБрдХ рдкреНрд░реЛ, 16GB рд░реИрдо рдФрд░ рдХреЛрд░ i7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореЗрд░рд╛ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╡рд░реНрдЬрди 0.19 рд╣реИред

рд╣реИрд░рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ !!! рд╕реЛрдорд╡рд╛рд░ рдХреА рд╕реБрдмрд╣, рдореИрдВ рд╡рд╛рдкрд╕ рдЬрд╛рддрд╛ рд╣реВрдВ рдФрд░ рджреМрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЬрдо рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдкрд┐рдЫрд▓реЗ рд░рдиреЛрдВ рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдЦрддреНрдо рд╣реЛрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ ремреж рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ, рдпрд╣ рдмрд╕ рд╣реИрдВрдЧ рд╣реЛ рдЧрдпрд╛, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ, рдХреБрдЫ рднреА рдирд╣реАрдВ рдФрд░ рдореЗрд░рд╛ рдХрдВрдкреНрдпреВрдЯрд░ рдЧрд░реНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд┐рдЬрд▓реА рдЪреВрд╕рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд▓ рдирд╣реАрдВ рд╣реИред рдиреАрдЪреЗ рдХреЛрдбред рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж n_iter рдХреЛ 2 рдФрд░ n_jobs=1 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░ рдЧрдпрд╛ред рддреЛ рдЗрд╕рдХрд╛ n_jobs=-1 рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдЗрд╕ рдХреЛрдб рдиреЗ рдкрд┐рдЫрд▓реЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЛ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛! рдпрд╣ рд╕рд┐рд░реНрдл рд╕реЛрдорд╡рд╛рд░ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реИред рдореЗрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рд╣реИ рдХрд┐ 20k рдЙрджрд╛рд╣рд░рдг рдЖрдпрд╛рдореАрддрд╛ рдХреЗ рд╕рд╛рде <100..

from sklearn.metrics import make_scorer
from sklearn.cross_validation import cross_val_score
from sklearn.grid_search import RandomizedSearchCV
import sklearn_crfsuite

crf = sklearn_crfsuite.CRF(
    algorithm='lbfgs', 
    max_iterations=100, 
    all_possible_transitions=True
)
params_space = {
    'c1': scipy.stats.expon(scale=0.5),
    'c2': scipy.stats.expon(scale=0.05),
}

f1_scorer = make_scorer(metrics.flat_f1_score, 
                        average='weighted', labels=labels)
rs = RandomizedSearchCV(crf, params_space, 
                        cv=3, 
                        verbose=1, 
                        n_jobs=-1, 
                        n_iter=50, 
                        scoring=f1_scorer)

rs.fit(X_train, y_train)  # THIS IS WHERE IT FREEZES

рд╕реАрдЖрд░рдПрдл рдХреНрдпрд╛ рд╣реИ? рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд╛рдкрд╕реА_рдЯреНрд░реЗрди_рд╕реНрдХреЛрд░=рдЧрд▓рдд?

рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ @KaisJM рдХреА рд╕рдорд╕реНрдпрд╛ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рддреНрд╡рд░рдг рдкрд░ рдкреНрд░рд╕рд┐рджреНрдз рд╕реАрдорд╛ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рд╣рдорд╛рд░реЗ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рджреЗрдЦреЗрдВред

рдЖрдкрдиреЗ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛?

рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy; print("NumPy", numpy.__version__)
import scipy; print("SciPy", scipy.__version__)
import sklearn; print("Scikit-Learn", sklearn.__version__)

рдпрд╣ рдкрд┐рдЫрд▓реЗ рд╢реБрдХреНрд░рд╡рд╛рд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ !! рдореИрдВрдиреЗ рддрдм рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬреНрдЮрд╛рди рд╕реАрдЦрдирд╛ рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдЗрдк (рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ - рдЕрдкрдЧреНрд░реЗрдб рд╕реНрдХреЗрд▓реЗрд░) рдХреЗ рд╕рд╛рде рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА .. рдореИрдВрдиреЗ 0.19 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдареАрдХ рдЪрд▓рд╛рдпрд╛ред

рдпрд╣рд╛рдБ рдЙрдкрд░реЛрдХреНрдд рдкреНрд░рд┐рдВрдЯреЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

Darwin-15.6.0-x86_64-i386-64bit
('Python', '2.7.12 |Continuum Analytics, Inc.| (default, Jul  2 2016, 17:43:17) \n[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)]')
('NumPy', '1.13.1')
('SciPy', '0.19.1')
('Scikit-Learn', '0.19.0')

@jnothman : рдореИрдВ sklearn.grid_search рд╕реЗ RandomizedSearchCV рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ return_train_score рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ sklearn.grid_search рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ .. рдореИрдВ sklearn.model_selection рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдЯреАрдХ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛)ред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдореВрд▓ рдЯрд┐рдкреНрдкрдгреАред

рдХреНрдпрд╛ рдЖрдк conda list | grep numpy рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╡рд┐рдЬреНрдЮрд╛рди-рд╕реАрдЦрдиреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рдЖрдкрдиреЗ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рднреА numpy рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдиреБрдХреАрд▓реЗ рдкрд╣рд┐рдпреЗ рдорд┐рд▓ рдЧрдП рд╣реИрдВ рдЬреЛ рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕реАрдорд╛ рд╣реИред

рд╕рд▓рд╛рд╣ рдХрд╛ рдЫреЛрдЯрд╛ рд╢рдмреНрдж:

  • рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ (рдЖрдкрдХреЗ рдЕрдЧрд▓реЗ рдЕрдВрдХ рдХреЗ рд▓рд┐рдП)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕реЗ IPython рд╕рддреНрд░ рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЕрдЪреНрдЫрд╛ рдлреАрдбрдмреИрдХ рдорд┐рд▓рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рдорд┐рд▓реЗрдЧрд╛ред
  • рдпрджрд┐ рдЖрдк рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреЛрдВрдбрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдВрдбрд╛ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣реЗрдВред рдЬрдм рдЖрдкрдХреЛ рдХрд░рдирд╛ рд╣реЛ рддрднреА рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • рдпрджрд┐ рдЖрдк рдЬреЛрд░ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк pip install --update рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк pip install --update --no-deps ред рдЕрдиреНрдпрдерд╛ рдпрджрд┐ рдХреЛрдИ рдкреИрдХреЗрдЬ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ numpy рдкрд░ рдХрд╣реЗрдВ, рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╡реАрдирддрдо numpy рдирд╣реАрдВ рд╣реИ, numpy рдХреЛ pip рдХреЗ рд╕рд╛рде рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрд░реЗ рд╣рд╛рдБ рдФрд░ BTW, sklearn.grid_search рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИ рдЖрдк рд╢рд╛рдпрдж sklearn.model_selection рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдбрд╝рдХ рд╕реЗ рдмрд╣реБрдд рдиреАрдЪреЗ рдирд╣реАрдВ рд╣реИред

рдЕрдЪреНрдЫреА рд╕рд▓рд╛рд╣, рдзрдиреНрдпрд╡рд╛рджред рддреЛ рдХреНрдпрд╛ numpy рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ? рдЖрдк рдХрд┐рд╕ рд╕реАрдорд╛ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдКрдкрд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рд▓рд┐рдВрдХ? рдореИрдВрдиреЗ рдЗрд╕реЗ рдкрдврд╝рд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╕рд╛рдорд╛рди рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ (рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЕрд╣рдВрдХрд╛рд░реА рдЖрджрдореА рд╣реВрдБ :))ред

conda list | grep numpy рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ

рд╕реБрдиреНрди 1.12.0
рд╕реБрдиреНрди 1.12.0 py27_0
рд╕реБрдиреНрди 1.13.1
numpydoc 0.7.0

рд╡рд╛рд╣ рддреАрди numpy рд╕реНрдерд╛рдкрд┐рдд рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рджреЛ рджреЗрдЦрд╛ рд▓реЗрдХрд┐рди рддреАрди рдХрднреА рдирд╣реАрдВ ... рд╡реИрд╕реЗ рднреА рдпрд╣ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╛рдиреА рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдорд┐рд╢реНрд░рд┐рдд рдкрд╛рдЗрдк рдФрд░ рдХреЛрдВрдбрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред

pip uninstall -y # maybe a few times to make sure you have removed pip installed packages
conda install numpy -f

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдПрдХрд▓ рдЕрдВрдХ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЖрдк рд╣реЛрддреЗ рддреЛ рдореИрдВ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рдХрд┐ рдЖрдкрдХреЛ рдЕрдиреНрдп рдореБрдЦреНрдп рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ scipy, рдЖрджрд┐ ...

рдХреБрдЫ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВ рдкрд╛рдЗрдк рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдВрдбрд╛ рдореЗрдВ рдХреБрдЫ рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рдкрд╛рдЗрдк рдорд┐рд▓рд╛рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░ рдРрд╕рд╛ рд╣реЛрдиреЗ рдкрд░ рдореИрдВ --no-deps рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдБрдЧрд╛ред

рдПрдХ рдмрд╛рдд рдЬреЛ рдореБрдЭреЗ рдмрддрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдереА, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬрд┐рд╕ рдЕрдЬрдЧрд░ рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрд╕рдХреЗ рднреАрддрд░ рдореИрдВрдиреЗ рд╕реНрдкрд╛рдЗрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рд╕реНрдкрд╛рдЗрдбрд░ рдФрд░ рдЬреБрдкрд┐рдЯрд░ рджреЛрдиреЛрдВ рдореЗрдВ, рд╕реНрдкрд╛рдЗрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

рдореИрдВрдиреЗ рд╕реНрдкрд╛рдЗрдбрд░ рдФрд░ рдКрдкрд░ рдХреЗ numpys рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛, рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рдКрдмрдбрд╝-рдЦрд╛рдмрдбрд╝ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ (рдЬреЛ рдХрд┐ рд╕реНрдХрд┐рдХрд┐рдЯ рдХреЛ 0.19 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдФрд░ рдлрд┐рд░ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рд╕реНрдкрд╛рдЗрдбрд░ рдЗрдВрд╕реНрдЯрд╛рд▓ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рд╣реБрдЖ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдПрдХ рджрд┐рди рдХрд╛рдо рдХреНрдпреЛрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЕрдЪрд╛рдирдХ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ ??

рдареАрдХ рд╣реИ, рдХреБрдЫ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ !! рдХреНрдпрд╛ рдореБрдЭреЗ рдмрд╕ рдПрдХ рдирдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЛрдВрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдФрд░ рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдпрд╣ рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛ рдпрд╛ рдЗрд╕реЗ рдФрд░ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛?

рдПрдХ рдХреЛрд╢рд┐рд╢ рдХреЗ рдХрд╛рдмрд┐рд▓ рд▓рдЧрддрд╛ рд╣реИ!

рдПрдХ рдирдпрд╛ env рдмрдирд╛рдпрд╛ рдФрд░ рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рдлрд┐рд░ рднреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЬрдорд╛ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреИрдХреЗрдЬ рдЖрджрд┐ рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ред

n_jobs=1 рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓реЗрддрд╛ рд╣реИ (рдпрд╣ рдкрд┐рдЫрд▓реЗ env рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред n_jobs=-1 рд╡рд╣ рд╣реИ рдЬреЛ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рдЬрдо рдЬрд╛рддрд╛ рд╣реИред

conda list | grep numpy
numpy                     1.13.1           py27hd567e90_2


Darwin-15.6.0-x86_64-i386-64bit
('Python', '2.7.13 |Continuum Analytics, Inc.| (default, Dec 20 2016, 23:05:08) \n[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]')
('NumPy', '1.13.1')
('SciPy', '0.19.1')
('Scikit-Learn', '0.19.0')

рддрдм рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЖрдИрдкреАрдерди рд╕рддреНрд░ рдореЗрдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред

рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ "рддреНрд╡рд░рд┐рдд" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рдкрдврд╝рд╛ рд╣реИ .. рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рд╕реЗ рдЬреЛ рд▓рд┐рдпрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рдВрдЯрд╛() рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдирд╣реАрдВ() рдХреЙрд▓ рдЦрд░рд╛рдм рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдХреБрдЫ рдЧреБрдЧрд▓ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рддрдХ рдХреБрдЫ рднреА рдХрд╛рдордХрд╛рдЬ рдкрд░ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреБрдЫ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА? рдзрдиреНрдпрд╡рд╛рдж,

рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВ (https://github.com/numpy/numpy/issues/4776 рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛):

import multiprocessing as mp

import numpy as np


def compute(n):
    print('Enter')
    np.dot(np.eye(n), np.eye(n))
    print('Exit')


print('\nWithout multiprocessing:')
compute(1000)

print('\nWith multiprocessing:')
workers = mp.Pool(1)
results = workers.map(compute, (1000, 1000))
  • рдпрджрд┐ рдпрд╣ рдлрд╝реНрд░реАрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрд░реНрдерд╛рдд рдпрд╣ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рддреЛ рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк Accelerate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдлрд╝реНрд░реАрдЬрд╝ Python рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЬреНрдЮрд╛рдд рд╕реАрдорд╛ рд╣реИред рдХрд╛рд░реНрдп-рдЖрд╕рдкрд╛рд╕ Accelerate рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИред рдУрдПрд╕рдПрдХреНрд╕ рдкрд░ рдЖрдк рдХреЛрдВрдбрд╛ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдПрдордХреЗрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк Conda-forge рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ OpenBLAS рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рдпрджрд┐ рдпрд╣ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдк Accelerate рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдиреНрдпреВрдирддрдо рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

Without multiprocessing:
Enter
Exit

With multiprocessing:
Enter
Exit
Enter
Exit

@GaelVaroquaux scikit-learn рдПрдХ рдРрдк рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдПрдХ рд╕рдореГрджреНрдз рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ рд╡рд╣реА рдХрд░рддрд╛ рдЬреЛ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ рдРрд╕реЗ рдХрдИ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИрдВ рдЬрд╣рд╛рдВ рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╡рд┐рдкрд░реАрдд рд╕рддреНрдп рд╣реИред

рдореИрдВрдиреЗ Google рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯ рдЗрдВрдЬрди рдореЗрдВ рдПрдХ ubuntu рд╡рд░реНрдЪреБрдЕрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ (рдЙрдмрдбрд╝-рдЦрд╛рдмрдбрд╝, рдорд╕рд╛рд▓реЗрджрд╛рд░, рд╕реНрдХрд┐рдХрд┐рдЯ рдЖрджрд┐ рд╕рдмрд╕реЗ рдЕрджреНрдпрддрд┐рдд рдирд╣реАрдВ рдереЗ)ред рдХреЛрдб рдареАрдХ рдЪрд▓рд╛ред рдлрд┐рд░ рдореИрдВрдиреЗ рдЬреЗрдирд╕рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕рдиреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП numpy рдФрд░ scipy рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рдирдХреА рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (boto, bz2file рдФрд░ smart_open)ред рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдлреНрд░реАрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реБрд░рд╛рдЧ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдлреНрд░реАрдЬ рдХрд╛ рдХрд╛рд░рдг рдХреНрдпрд╛ рд╣реИред

Gensim . рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
numpy (1.10.4) рдХреЛ numpy (1.13.3) рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
scipy (0.16.1) рдХреЛ scipy рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (0.19.1)

рдФрд░ рдЬрд╛рдирдХрд╛рд░реА:
рдХреБрдЫ рд╢реЛрдз рдХрд░рдиреЗ рдкрд░ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ /usr/lib/ рд╕реЗ libblas, liblapack рдФрд░ liblapack_atlas рдЧрд╛рдпрдм рдереЗ, рд╕рд╛рде рд╣реА рдореИрдВрдиреЗ /usr/lib/atlas-base/ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╣реАрдВ рджреЗрдЦреАред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдереЗ рдФрд░ рдЬреЗрдиреНрд╕рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ numpy рдЖрджрд┐ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдЬреЗрдиреНрд╕рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдЙрдиреНрдирдд рд╕реНрдХрд┐рдХрд┐рдЯ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ sudo apt-get --yes install libatlas-base-dev рдФрд░ "_update-alternatives_" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╛рдпрджрд╛ рдирд╣реАрдВ рд╣реБрдЖ, рдХреЛрдб рдЕрднреА рднреА n_jobs=-1 рдХреЗ рд╕рд╛рде рдЬрдо рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ numpy OpenBlas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕реЗ рдПрдЯрд▓рд╕ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗ рдФрд░ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

>>> import numpy as np
>>> np.__config__.show()
lapack_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_lapack_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_mkl_info:
  NOT AVAILABLE

рдЕрднреА рднреА рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдареАрдХ рдЪрд▓рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ n_jobs=-1 рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ред

from sklearn.metrics import fbeta_score

def f2_score(y_true, y_pred):
    y_true, y_pred, = np.array(y_true), np.array(y_pred)
    return fbeta_score(y_true, y_pred, beta=2, average='binary')

clf_rf = RandomForestClassifier()
grid_search = GridSearchCV(clf_rf, param_grid=param_grid, scoring=make_scorer(f2_score), cv=5)
grid_search.fit(X_train, y_train)  

@paulaceccon ATLAS рдпрд╛ OpenBLAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреЗ Numpy рдФрд░ Scipy рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╣реИрдВ?

рдЖрдкрдиреЗ рдЬреЛ @KaisJM рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рд╣реИред рдПрдХ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдП рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдкрд╛рдпрдерди рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрднреА рд╣рдо рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдЬреЗрдиреНрд╕рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдкреВрд░реНрдг рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдПрдХ рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдмрдирд╛рдо рдкрд╛рдпрдерди рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреА рдПрдХ рдирдЧрдгреНрдп рд░рд╛рд╢рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрдиреНрдирдд рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░

@KaisJM рд╡реИрд╕реЗ, рдпрд╣ рдкреГрд╖реНрда рдкреБрд░рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдЬрдХрд▓ рдкрд╣рд┐рдП рд▓рд┐рдирдХреНрд╕ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реНрд╡рдпрдВ рдХрд╛ OpenBLAS рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╛рд░реА рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк OpenBLAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗред

@lesteve рдХреНрдпрд╛ рдЖрдк рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдУрдкрдирдмреНрд▓рд╛рд╕ рдЕрдм рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ?

@lesteve paula рдиреЗ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕реБрд░рд╛рдЧ рджреЗрдЧрд╛ред рдореИрдВ рдпрд╣рд╛рдВ рд╕реНрдирд┐рдкреЗрдЯ "рдкреВрд░реНрдг" рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ "рдкреБрд░рд╛рдирд╛" - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ - рдирд┐рд░реНрджреЗрд╢ рдкреГрд╖реНрда рдЗрддрдирд╛ рдкреБрд░рд╛рдирд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ OpenBLAS рдЙрд╕ рдкреГрд╖реНрда рдореЗрдВ рдЬрд┐рд╕ рдлреАрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣рд╛ рд╣реИред

рдпреЗ рдирд┐рд░реНрджреЗрд╢ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛред рдпрджрд┐ рдЖрдк рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ "рд▓реЗрдХрд┐рди OpenBLAS рд╕рдВрд╕реНрдХрд░рдг 0.2.8-4 рд╕реЗ рдкрд╣рд▓реЗ рдЬреЙрдмрд▓рд┐рдм/рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдлреНрд░реАрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИ"ред рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕реБрдиреНрди рдкрд╣рд┐рдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреА рдФрд░ рдЗрд╕рдореЗрдВ OpenBLAS реж.реи.рео.резрео рд╣реИред рд╡реЗ рдЬрд┐рд╕ рдлреНрд░реАрдЬ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ https://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment -334155175 рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рд╕реБрд░рд╛рдЧ рджреЗрдЧрд╛

рдирд╣реАрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рд╣реИ рдЬреЛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдардВрдб рдЕрднреА рднреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╣рдо AFAIK рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИред рдЬрдм рддрдХ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдХреБрдЫ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдкреБрдирд░реБрддреНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╣рдо рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣рд╛рдВ рд╕реНрдирд┐рдкреЗрдЯ "рдкреВрд░реНрдг" рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рд╡рд╣ рдорд╣рд╛рди рд╣реЛрдЧрд╛ред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдРрд╕рд╛ рд╕реНрдирд┐рдкреЗрдЯ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ рдХреЛрдВрдбрд╛ рд╡рд╛рддрд╛рд╡рд░рдг (рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓рдПрдиреНрд╡ рдЬреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлреНрд░реАрдЬ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ)ред

@lesteve @paulaceccon : рдореИрдВрдиреЗ рдкрд╛рдЙрд▓рд╛ рдХрд╛ рдЕрдВрд╢ рдХреЛрдб рд▓рд┐рдпрд╛ рдФрд░ рдПрдХ рдкреВрд░реНрдг рд░рди-рд╕рдХреНрд╖рдо рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдпрд╛ред рдмрд╕ рдЗрд╕реЗ рдЬреНрдпреВрдкрд┐рдЯрд░ рд╕реЗрд▓ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВред рдкрд╛рдЙрд▓рд╛: рдореИрдВ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ n_jobs=-1 рдФрд░ рдареАрдХ рдЪрд▓рддрд╛ рд╣реИред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдлрд╝реНрд░реАрдЬрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдк grid_search рдореЙрдбреНрдпреВрд▓ рдФрд░ model_selection рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд░рд╣реЗред

import platform; print(platform.platform())
import sys; print("Python", sys.version)
import numpy as np; print("NumPy", np.__version__)
import scipy; print("SciPy", scipy.__version__)
import sklearn; print("Scikit-Learn", sklearn.__version__)

from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import make_classification

import scipy.stats
from sklearn.metrics import make_scorer
from sklearn.grid_search import RandomizedSearchCV
#from sklearn.model_selection import RandomizedSearchCV
#from sklearn.model_selection import GridSearchCV
from sklearn.metrics import fbeta_score

X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)

clf_rf = RandomForestClassifier(max_depth=2, random_state=0)

def f2_score(y_true, y_pred):
    y_true, y_pred, = np.array(y_true), np.array(y_pred)
    return fbeta_score(y_true, y_pred, beta=2, average='binary')

param_grid = {'max_depth':[2, 3, 4], 'random_state':[0, 3, 7, 17]}

grid_search = RandomizedSearchCV(clf_rf, param_grid, n_jobs=-1, scoring=make_scorer(f2_score), cv=5)

grid_search.fit(X, y)

@KaisJM рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдлреНрд░реАрдЬрд┐рдВрдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдХреЛ рд╕рд░рд▓ рдФрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдлреНрд░реАрдЬ рдХрд░рддрд╛ рд╣реИред

@lesteve рд╕рд╣рдордд рд╣реБрдПред рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдкрд╛рдпрдерди 2 рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЬреЗрдиреНрд╕рд┐рдо рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдерд╛ред рдХреЛрдб рдареАрдХ рдЪрд▓рд╛, n_jobs = -1 рдХреЗ рд╕рд╛рде рдХреЛрдИ рдлреНрд░реАрдЬ рдирд╣реАрдВред рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╣реИ, Numpy OpenBLAS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ рдЬреЛ рдлрд╝реНрд░реАрдЬрд╝ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рд╡рд╣ рд╕реНрдерд╛рди рдЬрд╣рд╛рдБ Gensim рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдУрдкрдирдмреНрд▓рд╛рд╕ рдЗрд╕ рдлреНрд░реАрдЬ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

bumpy.__config__.show()
lapack_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_opt_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
openblas_lapack_info:
    libraries = ['openblas']
    library_dirs = ['/usr/local/lib']
    define_macros = [('HAVE_CBLAS', None)]
    language = c
blas_mkl_info:
  NOT AVAILABLE

@KaisJM рдореИрдВ рдпрд╣рд╛рдБ (рд╡рд┐рдВрдбреЛрдЬрд╝) рдПрдХ рд╣реА рд╕реНрдирд┐рдкреЗрдЯ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рдпрд╣ рдЬрдо рдЬрд╛рддрд╛ рд╣реИред

from sklearn.datasets import make_classification
X, y = make_classification()

from sklearn.ensemble import RandomForestClassifier
clf_rf_params = {
    'n_estimators': [400, 600, 800],
    'min_samples_leaf' : [5, 10, 15],
    'min_samples_split' : [10, 15, 20],
    'criterion': ['gini', 'entropy'],
    'class_weight': [{0: 0.51891309,  1: 13.71835531}]
}

import numpy as np
def ginic(actual, pred):
    actual = np.asarray(actual) # In case, someone passes Series or list
    n = len(actual)
    a_s = actual[np.argsort(pred)]
    a_c = a_s.cumsum()
    giniSum = a_c.sum() / a_s.sum() - (n + 1) / 2.0
    return giniSum / n

def gini_normalizedc(a, p):
    if p.ndim == 2:  # Required for sklearn wrapper
        p = p[:,1]   # If proba array contains proba for both 0 and 1 classes, just pick class 1
    return ginic(a, p) / ginic(a, a)

from sklearn import metrics
gini_sklearn = metrics.make_scorer(gini_normalizedc, True, True)

from sklearn.model_selection import GridSearchCV

clf_rf = RandomForestClassifier()
grid = GridSearchCV(clf_rf, clf_rf_params, scoring=gini_sklearn, cv=3, verbose=1, n_jobs=-1)
grid.fit(X, y)

print (grid.best_params_)

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд╣реИ рд▓реЗрдХрд┐рди _custom_ рдореАрдЯреНрд░рд┐рдХ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдкрд░ рдпрд╣ рдЬрдорддрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдПрдХ рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдПрдХ рд╣реА рдХреЛрдб рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдмрд╕ рдирдП рдорд╣реАрдиреЗ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдореЙрдбрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЪрд▓рдирд╛ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдмреАрдЪ рд╕реНрдХреЗрд▓реЗрд░ рдХреЛ 0.19 . рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛

рдПрдХ рд▓реВрдк рдореЗрдВ GridSearchCV рдпрд╛ RandomizedSearchCV рдЪрд▓рд╛рдирд╛ рдФрд░ n_jobs> 1 рдмреГрд╣рд╕реНрдкрддрд┐ рдФрд░ IntelliJ рдореЗрдВ рдЪреБрдкрдЪрд╛рдк рд▓рдЯрдХрд╛ рд░рд╣реЗрдЧрд╛:

for trial in tqdm(range(NUM_TRIALS)):
    ...
    gscv = GridSearchCV(estimator=estimator, param_grid=param_grid,
                          scoring=scoring, cv=cv, verbose=1, n_jobs=-1)
    gscv.fit(X_data, y_data)

    ...

@lesteve рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдФрд░ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд numpy рд╣рдЯрд╛ рджрд┐рдпрд╛:

рдбрд╛рд░реНрд╡рд┐рди-16.6.0-x86_64-i386-64bit
рдкрд╛рдпрдерди 3.6.1 |рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╕реНрдЯрдо (x86_64)| (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, 11 рдордИ 2017, 13:04:09)
[рдЬреАрд╕реАрд╕реА рек.реи.рез рд╕рдВрдЧрдд рдПрдкреНрдкрд▓ рдПрд▓рдПрд▓рд╡реАрдПрдо рем.реж (рдХреНрд▓реИрдВрдЧ-ремрежреж.реж.релрен)]
рдиреНрдпреВрдордкреА 1.13.1
рд╡рд┐рдЬреНрдЮрд╛рдирдкреА 0.19.1
рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.19.0

$conda рд╕реВрдЪреА | рдЧреНрд░реЗрдк рд╕реБрдиреНрди
рдЧрдирдореНрдкреА реж.реи рдкрд┐рдк
рд╕реБрдиреНрди 1.13.1 py36_0
рд╕реБрдиреНрди рез.резрей.рей рдкрд╛рдЗрдк
numpydoc 0.6.0 py36_0

$рдкрд╛рдЗрдк рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ numpy

$conda рд╕реВрдЪреА | рдЧреНрд░реЗрдк рд╕реБрдиреНрди
рдЧрдирдореНрдкреА реж.реи рдкрд┐рдк
рд╕реБрдиреНрди 1.13.1 py36_0
numpydoc 0.6.0 py36_0

$conda numpy -f рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ // рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ

$conda рд╕реВрдЪреА | рдЧреНрд░реЗрдк рд╕реБрдиреНрди
рдЧрдирдореНрдкреА реж.реи рдкрд┐рдк
рд╕реБрдиреНрди 1.13.1 py36_0
numpydoc 0.6.0 py36_0

рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ред

@paulaceccon рдЖрдкрдХреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ

https://stackoverflow.com/questions/36533134/cant-get-attribute-abc-on-module-main-from-abc-h-py
рдпрджрд┐ рдЖрдк рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд▓ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдпрд╣ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдЖрджреЗрд╢ рдХреЛ рдЙрд▓рдЯ рджреЗрдВ рдФрд░ рдпрд╣ рдЕрдм рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХреЗрдЧрд╛ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдкрдХрд╛ рдХреЛрдб рдЪрд▓рд╛рдПрдЧрд╛:

import multiprocessing

if __name__ == '__main__':
    multiprocessing.set_start_method('spawn')

    from external import *

    from sklearn.datasets import make_classification
    X, y = make_classification()

    from sklearn.ensemble import RandomForestClassifier
    clf_rf_params = {
        'n_estimators': [400, 600, 800],
        'min_samples_leaf' : [5, 10, 15],
        'min_samples_split' : [10, 15, 20],
        'criterion': ['gini', 'entropy'],
        'class_weight': [{0: 0.51891309,  1: 13.71835531}]
    }

    from sklearn.model_selection import GridSearchCV

    clf_rf = RandomForestClassifier()
    grid = GridSearchCV(clf_rf, clf_rf_params, scoring=gini_sklearn, cv=3, verbose=1, n_jobs=-1)
    grid.fit(X, y)

    print (grid.best_params_)

рдмрд╛рд╣рд░реА.py . рдХреЗ рд╕рд╛рде

import numpy as np
def ginic(actual, pred):
    actual = np.asarray(actual) # In case, someone passes Series or list
    n = len(actual)
    a_s = actual[np.argsort(pred)]
    a_c = a_s.cumsum()
    giniSum = a_c.sum() / a_s.sum() - (n + 1) / 2.0
    return giniSum / n

def gini_normalizedc(a, p):
    if p.ndim == 2:  # Required for sklearn wrapper
        p = p[:,1]   # If proba array contains proba for both 0 and 1 classes, just pick class 1
    return ginic(a, p) / ginic(a, a)

from sklearn import metrics
gini_sklearn = metrics.make_scorer(gini_normalizedc, True, True)

8 рдХреЛрд░ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдкрд░рд┐рдгрд╛рдо

релрек рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рей рдЧреБрдирд╛ рдлрд┐рдЯрд┐рдВрдЧ, рдХреБрд▓ резремреи рдлрд┐рдЯ
{'рд╡рд░реНрдЧ_рд╡рдЬрди': {0: 0.51891309, 1: 13.71835531}, 'рдорд╛рдирджрдВрдб': 'рдЧрд┐рдиреА', 'min_samples_leaf': 10, 'min_samples_split': 20, 'n_estimators': 400}

рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╣реИ рджреЛрд╕реНрддреЛрдВред рдореИрдВ рдПрдХ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдореИрдВ n_jobs рдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИред рдЬрдм рдореИрдВ n_jobs рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдиреНрдпрдерд╛ рдпрд╣ рдЬрдо рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ https://stackoverflow.com/help/mcve рдкрдврд╝реЗрдВред

рдЕрднреА рднреА рдПрдХ рд╣реА рдирдореВрдирд╛ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИред

рд╡рд┐рдВрдбреЛрдЬрд╝-10.0.15063-SP0
рдкрд╛рдпрдерди 3.6.4 |рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╕реНрдЯрдо (64-рдмрд┐рдЯ)| (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЬрдирд╡рд░реА резрем 2018, резреж:реиреи:рейреи) [рдПрдордПрд╕рд╕реА v.резрепрежреж ремрек рдмрд┐рдЯ (рдПрдПрдордбреАремрек)]
рдиреНрдпреВрдордкреА 1.14.1
рд╡рд┐рдЬреНрдЮрд╛рдирдкреА 1.0.0
рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.19.1

рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рд╕реНрдирд┐рдкреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдХреГрдкрдпрд╛ https://stackoverflow.com/help/mcve рдкрдврд╝реЗрдВред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ рдореБрджреНрджреЗ рдореЗрдВ рдпрд╣ рд╡рд╣реА рдкреБрд░рд╛рдиреА рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╣реИред рд╣рдорд╛рд░реЗ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рджреЗрдЦреЗрдВ

рдореИрдВрдиреЗ рдереЙрдореНрдмрд░реНрдЧ1 рдХреЗ https://github.com/scikit-learn/scikit-learn/issues/2889#issuecomment -337985212 рдореЗрдВ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред

рдУрдПрд╕: рд╡рд┐рдВрдбреЛрдЬ 10 x64 10.0.16299.309
рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ: WinPython-64bit-3.6.1
рд╕реБрдиреНрди (1.14.2)
рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди (0.19.1)
scipy (1.0.0)

рдЗрд╕рдиреЗ рдЬреБрдкрд┐рдЯрд░ рдиреЛрдЯрдмреБрдХ рдФрд░ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред

рд╣рд╛рдп, рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдпрд╛ рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬрд┐рд╕рд╕реЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдзрд╛рдЧрд╛ рд╣реЛ рд╕рдХреЗред

-рдореИрдХ рдУрдПрд╕
-рдПрдирд╛рдХреЛрдВрдбрд╛
-рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.19.1
-рд╕реНрдХрд┐рдкреА 1.0.1
-рд╕реБрдиреНрди 1.14.2

# MLP for Pima Indians Dataset with grid search via sklearn
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV
import numpy

# Function to create model, required for KerasClassifier
def create_model(optimizer='rmsprop', init='glorot_uniform'):
  # create model
  model = Sequential()
  model.add(Dense(12, input_dim=8, kernel_initializer=init, activation='relu'))
  model.add(Dense(8, kernel_initializer=init, activation='relu'))
  model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
  # Compile model
  model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
  return model

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# load pima indians dataset
dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]


# create model
model = KerasClassifier(build_fn=create_model, verbose=0)
# grid search epochs, batch size and optimizer
optimizers = ['rmsprop', 'adam']
init = ['glorot_uniform', 'normal', 'uniform']
epochs = [50, 100, 150]
batches = [5, 10, 20]
param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=init)
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid_result = grid.fit(X, Y)
# summarize results
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
means = grid_result.cv_results_['mean_test_score']
stds = grid_result.cv_results_['std_test_score']
params = grid_result.cv_results_['params']
for mean, stdev, param in zip(means, stds, params):
  print("%f (%f) with: %r" % (mean, stdev, param))

рдХреЛрдб рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рд╣реИ: https://machinelearningmastery.com/use-keras-deep-learning-models-scikit-learn-python/
рдореИрдВрдиреЗ n_jobs рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 1, -1 рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдХреЛрдИ рд╕рдВрдХреЗрдд?

рдпрд╣ рдЪрд▓рддрд╛ рд╣реИ рдЕрдЧрд░ рдореИрдВ рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЖрдпрд╛рдд рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ рдЕрдЧрд░ рдХрдерди рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдореИрдВ рдХреЗрд░рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИ

import multiprocessing

if __name__ == '__main__':

    # MLP for Pima Indians Dataset with grid search via sklearn
    from keras.models import Sequential
    from keras.layers import Dense
    from keras.wrappers.scikit_learn import KerasClassifier
    from sklearn.model_selection import GridSearchCV
    import numpy

    # Function to create model, required for KerasClassifier
    def create_model(optimizer='rmsprop', init='glorot_uniform'):
      # create model
      model = Sequential()
      model.add(Dense(12, input_dim=8, kernel_initializer=init, activation='relu'))
      model.add(Dense(8, kernel_initializer=init, activation='relu'))
      model.add(Dense(1, kernel_initializer=init, activation='sigmoid'))
      # Compile model
      model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
      return model

    # fix random seed for reproducibility
    seed = 7
    numpy.random.seed(seed)
    # load pima indians dataset
    dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",")
    # split into input (X) and output (Y) variables
    X = dataset[:,0:8]
    Y = dataset[:,8]


    # create model
    model = KerasClassifier(build_fn=create_model, verbose=0)
    # grid search epochs, batch size and optimizer
    optimizers = ['rmsprop', 'adam']
    init = ['glorot_uniform', 'normal', 'uniform']
    epochs = [5]
    batches = [5, 10, 20]
    param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=init)
    grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=12, verbose=1)
    grid_result = grid.fit(X, Y)
    # summarize results
    print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
    means = grid_result.cv_results_['mean_test_score']
    stds = grid_result.cv_results_['std_test_score']
    params = grid_result.cv_results_['params']
    for mean, stdev, param in zip(means, stds, params):
      print("%f (%f) with: %r" % (mean, stdev, param))

18 рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП 3 рдЧреБрдирд╛ рдлрд┐рдЯрд┐рдВрдЧ, рдХреБрд▓ 54 рдлрд┐рдЯ

рд╕рд░реНрд╡реЛрддреНрддрдо: реж.ремренрелренреорез {'batch_size': 5, 'epochs': 5, 'init': 'glorot_uniform', 'optimizer': 'adam'} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
реж.ремреирезрежрепрек (реж.режрейремреиреирел) рдЗрд╕рдХреЗ рд╕рд╛рде: {'рдмреИрдЪ_рд╕рд╛рдЗрдЬ': 5, 'рдПрдкреЛрдЪ': 5, 'рдЗрдирд┐рдЯ': 'рдЧреНрд▓реЛрд░реЛрдЯ_рдпреВрдирд┐рдлреЙрд░реНрдо', 'рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░': 'рдЖрд░рдПрдордПрд╕рдкреНрд░реЙрдк'}
реж.ремренрелренреорез (реж.режрежремрейренреп) рдХреЗ рд╕рд╛рде: {'рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝': 5, 'рдпреБрдЧ': 5, 'рдЗрдирд┐рдЯ': 'рдЧреНрд▓реЛрд░реЛрдЯ_рдпреВрдирд┐рдлрд╝реЙрд░реНрдо', 'рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░': 'рдПрдбрдо'}
...
реж.ремрелрезрежрекреи (реж.режреирелренреореж) рдХреЗ рд╕рд╛рде: {'рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝': 20, 'рдпреБрдЧ': 5, 'рдЗрдирд┐рдЯ': 'рдпреВрдирд┐рдлрд╝реЙрд░реНрдо', 'рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░': 'рдПрдбрдо'}


рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдирдХрд╛рд░реА
sys 3.6.4 |рдПрдирд╛рдХреЛрдВрдбрд╛ рдХрд╕реНрдЯрдо (64-рдмрд┐рдЯ)| (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЬрдирд╡рд░реА резрем 2018, резреи:режрек:рейрей)
[рдЬреАрд╕реАрд╕реА 4.2.1 рд╕рдВрдЧрдд рдмрдЬрдирд╛ 4.0.1 (рдЯреИрдЧ/RELEASE_401/рдЕрдВрддрд┐рдо)]
рд╕реБрдиреНрди 1.14.2
рдкрд╛рдВрдбрд╛ 0.22.0
рд╕реНрдХреЗрд▓реЗрд░ 0.19.1
рдорд╢рд╛рд▓ 0.4.0a0+9692519
рдЖрдИрдкреАрдерди 6.2.1
рдХреЗрд░рд╕ 2.1.5

рдХрдВрдкрд╛рдЗрд▓рд░: рдЬреАрд╕реАрд╕реА 4.2.1 рд╕рдВрдЧрдд рдХреНрд▓реИрдВрдЧ 4.0.1 (рдЯреИрдЧ/RELEASE_401/рдлрд╛рдЗрдирд▓)
рдкреНрд░рдгрд╛рд▓реА: рдбрд╛рд░реНрд╡рд┐рди
рд░рд┐рд▓реАрдЬ: 17.5.0
рдорд╢реАрди: x86_64
рдкреНрд░реЛрд╕реЗрд╕рд░: i386
рд╕реАрдкреАрдпреВ рдХреЛрд░: 24
рджреБрднрд╛рд╖рд┐рдпрд╛: 64 рдмрд┐рдЯ

рдзрдиреНрдпрд╡рд╛рдж @ рдереЙрдореНрдмрд░реНрдЧрез , рд▓реЗрдХрд┐рди рдЬреЛрдбрд╝

import multiprocessing
if __name__ == '__main__':

рдХреЛрдИ рд╕рд╣рд╛рдпрддрд╛ рдирд╣реАрдВ рдХреАред рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рд╡рд╣реА рд╣реИ

GridsearchCV рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рд╕реНрдХреЛрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реА рдорд╢реАрди рдкрд░ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдЕрдЬрдЧрд░ 3.6.4,
рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.19.1,
рд╡рд┐рдВрдбреЛрдЬ 10ред,
рд╕реАрдкреАрдпреВ рдХреЛрд░: 24

@byrony рдХреНрдпрд╛ рдЖрдк рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдиреЗ if __name__ == "__main__" ?

рдореИрдВрдиреЗ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ n_jobs=-1 рдпрд╛ n_jobs=8 рдХреЛ GridsearchCV рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдХреЛрд░рд░ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХрдИ рдмрд╛рд░ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рд╣реИред

  • рдкрд╛рдпрдерди 3.6.5,
  • рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.19.1,
  • рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕,
  • рд╕реАрдкреАрдпреВ рдХреЛрд░: 8.

рдпрд╣рд╛рдВ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛:

from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import MinMaxScaler
from sklearn.decomposition import PCA
from sklearn.utils import shuffle
from sklearn.neural_network import MLPClassifier
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np


def main():

    df = pd.read_csv('../csvs/my_data.csv', nrows=4000000)    

    X = np.array(list(map(lambda a: np.fromstring(a[1:-1] , sep=','), df['X'])))
    y = np.array(list(map(lambda a: np.fromstring(a[1:-1] , sep=','), df['y'])))

    scalerX = MinMaxScaler()
    scalerY = MinMaxScaler()
    X = scalerX.fit_transform(X)
    y = scalerY.fit_transform(y)

    grid_params = {
        'beta_1': [ .1, .2, .3, .4, .5, .6, .7, .8, .9 ],
        'activation': ['identity', 'logistic', 'tanh', 'relu'],
        'learning_rate_init': [0.01, 0.001, 0.0001]
    }

    estimator = MLPClassifier(random_state=1, 
                              max_iter=1000, 
                              verbose=10,
                              early_stopping=True)

    gs = GridSearchCV(estimator, 
                      grid_params, 
                      cv=5,
                      verbose=10, 
                      return_train_score=True,
                      n_jobs=8)

    X, y = shuffle(X, y, random_state=0)

    y = y.astype(np.int16)    

    gs.fit(X, y.ravel())

    print("GridSearchCV Report \n\n")
    print("best_estimator_ {}".format(gs.best_estimator_))
    print("best_score_ {}".format(gs.best_score_))
    print("best_params_ {}".format(gs.best_params_))
    print("best_index_ {}".format(gs.best_index_))
    print("scorer_ {}".format(gs.scorer_))
    print("n_splits_ {}".format(gs.n_splits_))

    print("Exporting")
    results = pd.DataFrame(data=gs.cv_results_)
    results.to_csv('../csvs/gs_results.csv')


if __name__ == '__main__':
    main()

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрдбрд╝рд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ рд▓реЗрдХрд┐рди рдлрд┐рд░ 2 рджрд┐рдиреЛрдВ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ (рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд░рд╣рддреА рд╣реИ рд▓реЗрдХрд┐рди рд░реИрдо рдФрд░ рд╕реНрд╡реИрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рд╕рдВрд╕рд╛рдзрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ)ред

captura de pantalla de 2018-05-25 17-53-11

captura de pantalla de 2018-05-25 17-54-59

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рдж!

@amueller рдореИрдВрдиреЗ if __name__ == "__main__" рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдиреАрдЪреЗ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм n_jobs=1

def neg_mape(true, pred):
    true, pred = np.array(true)+0.01, np.array(pred)
    return -1*np.mean(np.absolute((true - pred)/true))

xgb_test1 = XGBRegressor(
    #learning_rate =0.1,
    n_estimators=150,
    max_depth=3,
    min_child_weight=1,
    gamma=0,
    subsample=0.8,
    colsample_bytree=0.8,
    objective= 'reg:linear',
    nthread=4,
    scale_pos_weight=1,
    seed=123,
)

param_test1 = {
    'learning_rate':[0.01, 0.05, 0.1, 0.2, 0.3],
}

gsearch1 = GridSearchCV(estimator = xgb_test1, param_grid = param_test1, scoring=neg_mape, n_jobs=4, cv = 5)

рдЖрдк XGBoost рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ if __name__ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ?
рдЕрдиреНрдпрдерд╛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рд╣реИред

@ Pazitos10 рдХреНрдпрд╛ рдЖрдк рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдбреЗрдЯрд╛ рдФрд░/рдпрд╛ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВ рдЖрдкрдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрд┐рдирд╛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдФрд░ рдХрдо рд╕рдордп рдореЗрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

@amueller рдареАрдХ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ 500k рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде

@amueller , 50k рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛ рд░рд╣реА рд╣реИ (рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореЗрд░рд╛ рдорддрд▓рдм 50k 500k рдирд╣реАрдВ рдерд╛):

captura de pantalla de 2018-05-26 13-09-00

captura de pantalla de 2018-05-26 13-09-51

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпреЗ рдкрд░рд┐рдгрд╛рдо рдореЗрд░реЗ рдкреВрд░реЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╣реЛрдВрдЧреЗ рдпрд╛ рдирд╣реАрдВред рдХреЛрдИ рд╕рд▓рд╛рд╣?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд░рд╛рдо рд╕реЗ рдмрд╛рд╣рд░ рднрд╛рдЧ рд░рд╣реЗ рд╣реИрдВред рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд░рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рддрдВрддреНрд░рд┐рдХрд╛ рдЬрд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред

@amueller рдУрд╣, рдареАрдХ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд░рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рдж!

рдЗрд╕рдХрд╛ рдХрд╕реНрдЯрдо рд╕реНрдХреЛрд░рд░ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдкрд╛рдпрдерди рдорд▓реНрдЯреАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рдЖрдкрдХреЛ n_jobs=-1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╣рд░ рдЪреАрдЬ рдХреЛ if __name__ == '__main__' рдмреНрд▓реЙрдХ рдореЗрдВ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдЖрдкрдХреЛ рдлреНрд░реАрдЬ/рдХреНрд░реИрд╢ рдорд┐рд▓реЗрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд╣реАрдВ рдкреНрд░рдореБрдЦ рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд░реАрдбрдореЗ рдореЗрдВ?

рдХреНрдпрд╛ рдпрд╣ рд╢рд╛рдпрдж рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП?
рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдлреАрдб рдХрд░рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрддрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://docs.python.org/2/library/multiprocessing.html#windows
рдФрд░ рдпрд╣рд╛рдВ 3.6 рдХреЗ рд▓рд┐рдП: https://docs.python.org/3.6/library/multiprocessing.html#windows

@PGTBoos рдпрд╣ рд╕реНрдХрд┐рдХрд┐рдЯ-рд▓рд░реНрди 0.20.0 . рдореЗрдВ рддрдп рд╣реИ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

rebeccaroisin picture rebeccaroisin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

divyaprabha123 picture divyaprabha123  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yinruiqing picture yinruiqing  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

trchan picture trchan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

celiafish picture celiafish  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ