使用可选参数决定使用哪种分类方法的函数 - 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"])
...
我的目标是包含一个“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"])
...