首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串转换成字面意思?

如何将字符串转换成字面意思?
EN

Stack Overflow用户
提问于 2022-01-24 16:48:56
回答 2查看 90关注 0票数 1

我想写一个通用函数,可以接受不同的机器学习算法和它的参数,并初始化一个模型。

我写道:

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

发布于 2022-01-24 17:02:22

如果您不太确定是否可以信任传递给model_name的字符串,请创建一个dict将可接受的字符串值映射到它们的类。

代码语言:javascript
复制
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的评论。

票数 0
EN

Stack Overflow用户

发布于 2022-08-27 15:57:07

如果我对你的理解是正确的,这可能就是你想要的自动化:

代码语言:javascript
复制
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

这种自动化对于基准模型的性能可能很有用,那么您只需要以下代码:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70837432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档