我想写一个通用函数,可以接受不同的机器学习算法和它的参数,并初始化一个模型。
我写道:
def create_model(model_name,kernel='rbf',C=1.0):
clf = model_name()
print(create_model('SVC'))错误是:
clf = model_name() TypeError:'str‘对象不可调用
我理解错误是说您不能使用字符串('SVC')作为模型对象。因此,我尝试添加evaluate(model_name)()将字符串转换为对象,但得到了name 'evaluate' is not defined。
有人能告诉我正确的方法吗?我想这样做,这样我就可以在函数中添加一组可选的参数,然后在相同的函数中用logistic回归替换SVC。
发布于 2022-01-24 17:02:22
如果您不太确定是否可以信任传递给model_name的字符串,请创建一个dict将可接受的字符串值映射到它们的类。
models = [modelA, modelB, modelC]
name2model = {model.__name__: model for model in models}
def create_model(model_name, *args, **kwargs):
return name2model[model_name](*args, **kwargs)编辑:当然,这假设您必须首先处理字符串名称,例如用户输入。否则,请参见Samwises的评论。
发布于 2022-08-27 15:57:07
如果我对你的理解是正确的,这可能就是你想要的自动化:
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
model_dict = {
'logr': LogisticRegression(),
'rf': RandomForestClassifier(),
'svc': SVC()
}
def create_model(model_name, kernel='rbf', C=1.0):
clf = model_dict[model_name]
return clf
for mod in model_dict.keys():
model = create_model(mod)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(mod, accuracy_score(y_test, y_pred))但是,对于不同的模型,存在着不同的超参数,因此create_model()函数不能对不同的模型使用C=1.0。
这种自动化对于基准模型的性能可能很有用,那么您只需要以下代码:
model_dict = {
'logr': LogisticRegression(),
'rf': RandomForestClassifier(),
'svc': SVC()
}
for mod in model_dict.keys():
model = model_dict[mod]
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(mod, accuracy_score(y_test, y_pred))https://stackoverflow.com/questions/70837432
复制相似问题