2016-11-21 10 views
0

私は、一行で異なるモデルをすばやく探索するために使用できるほとんどのsklearnモデルを実行するための汎用関数を作成しようとしています。 leaf_size=30, n_neighbors=6を番号に置き換えると、次のコードが機能します。最初の引数はn_neighborsであり、数値が必要です。関数に2つの情報を渡すことができます:a)モデル名b)モデルに渡すすべてのパラメータを含む1つの文字列。Python関数の1つの文字列としてパラメータのリストを渡す

シンプルなものがありますか?

def sklearn_mod(mod_name,param_list): 
    mod = mod_name(param_list) 
    mod.fit(features_train, target_train) 
    print(mod) 
    expected = target_test 
    predicted_mod = mod.predict(features_test) 
    print('-----') 
    print "Accuracy of Model:", accuracy_score(target_test, predicted_mod) 
    print('-----') 
    print(classification_report(target_test, predicted_mod)) 
    y_pred = predicted_mod 
    y_true = expected 
    print(confusion_matrix(y_true, y_pred)) 
    print('-----') 
    print('Cross Validation:') 
    scores = cross_val_score(mod, features_train, target_train, cv=10) 
    print(scores) 
    print"Mean CV Accuracy:",scores.mean() 
    print('-----'); 

sklearn_mod(KNeighborsClassifier,'leaf_size=30, n_neighbors=6') 
+0

私は、これはあまりにも難しい作っていたと思います。私はこれが私の定義された関数のただ一つのパラメータ値でうまくいくと思います。 sklearn_mod(KNeighborsClassifier(n_neighbors = 6、leaf_size = 30)) – mizzou541

答えて

0

パラメータとしてCSV文字列を渡したくない場合は、**kwargsを使用できます。

パラメータ名と値でdictを作成し、その前に**が付いた関数に渡します。例えば

params = {'leaf_size': 30, 'n_neighbors': 6} 
sklearn_mod(KNeighborsClassifier, **params) 
+1

'sklear_mod'の最初の2行がどのように見えるのかを追加する必要があります。 –

関連する問題