2016-11-21 77 views
0

我试图编写一个通用函数来运行大多数sklearn模型,我可以使用这些模型快速浏览一行中的不同模型。如果我用一个数字替换leaf_size=30, n_neighbors=6,以下代码有效。它似乎期望第一个参数是n_neighbors并且需要一个数字。我希望能够传递函数两条信息:a)模型名称b)一个包含我想传递给模型的所有参数的字符串。将参数列表作为一个字符串传递给python函数

有没有简单的我很想念或者这是不可能的?

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

使用参数名称和值创建一个字典,然后将其传递给您的函数,前面加上**

例如:

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

应该增加'sklear_mod'的前两行应该看起来如何。 –

相关问题