使用可选参数决定使用哪种分类方法的函数 - Python

function to decide which classification method to use with optional parameters - Python

我的目标是包含一个“mod_type”参数,指示 运行 的模型类型,决策树或 knn,使用 kwargs 让用户传入可选关键字knn 的参数“k”和决策树的“max_depth”。如果用户传入这些,则在初始化模型时适当使用它们。 Return 模型对象。

为此,我使用了以下函数:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
import pandas as pd
import numpy as np
from sklearn.neighbors import KNeighborsClassifier


def my_classification(x,y,mod_type,**kwargs):
    if mod_type == "dt":
        if max_d in kwargs.keys():
            dt = DecisionTreeClassifier(max_depth=max_d.values())
            dt.fit(x,y)
            return dt
        else:
            dt = DecisionTreeClassifier()
            dt.fit(x,y)     
            return dt       
    elif mod_type == "knn":
        if k in kwargs.keys():
            knn = KNeighborsClassifier(k.values())
            knn.fit(x,y)
            return knn
        else:
            knn = KNeighborsClassifier()
            knn.fit(x,y)
            return knn
    else:
        print("unavailable type")

iris = load_iris()
x = pd.DataFrame(iris.data)
y = iris.target
my_classification(x,y,"dt")

理解 kwargs 并不容易,但我想我现在可能知道了,它给我的错误是:NameError: name 'max_d' is not defined。我试过在函数之前创建它们,然后在其中更改它们,但它打印模型时没有任何改变。

有人可以帮忙吗?

dict 对象中的键等同于字符串。

if 'max_d' in kwargs.keys():

不是字符串,而是在 kwargs.keys() 列表中查找名为 max_d 的对象。

kwargs 是一个字典,参数的名称作为键,它们的值作为值。

您可以这样使用它:

if mod_type == "dt":
    if "max_d" in kwargs:
        dt = DecisionTreeClassifier(max_depth=kwargs["max_d"])
        ...
elif mod_type == "knn":
    if "k" in kwargs:
        knn = KNeighborsClassifier(kwargs["k"])
        ...