gpt4 book ai didi

python - 按名称获取当前文件中已导入的模块

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:50 24 4
gpt4 key购买 nike

我正在学习sklearn,我编写了一个类Classifier来进行常见的分类。它需要一个方法来确定使用哪个估算器:

# Classifier
from sklearn.svm import SVC
from sklearn.svm import LinearSVC
from sklearn.linear_model import SGDClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier

class Classifier(object):
def __init__(self, method='LinearSVC', *args, **kwargs):
Estimator = getattr(**xxx**, method, None)
self.Estimator = Estimator
self._model = Estimator(*args, **kwargs)

def fit(self, data, target):
return self._model.fit(data, target)

def predict(self, data):
return self._model.predict(data)

def score(self, X, y, sample_weight=None):
return self._model.score(X, y, sample_weight=None)

def persist_model(self):
pass

def get_model(self):
return self._model

def classification_report(self, expected, predicted):
return metrics.classification_report(expected, predicted)

def confusion_matrix(self, expected, predicted):
return metrics.confusion_matrix(expected, predicted)

我想通过名称获取 Estimator,但是 xxx 应该是什么?或者有更好的方法吗?
构建一个字典来存储导入的模块?但这种方式似乎不太好..

最佳答案

在这种情况下,建议直接使用类作为参数。

您永远不必担心它是一个字符串:您可以比较LinearSVC 是 LinearSVC,并将其与其他内容进行比较。

把它想象成接受一个整数作为参数,然后将其转换为字符串来使用它:这有意义吗?您可以只需要一个字符串。

建议的代码:

class Classifier(object):
def __init__(self, model = LinearSVC, *args, **kwargs):
self._model = model(*args, **kwargs)

然后你可以这样做:

myclf = Classifier(..., estimator = LinearSVC, ...)
isinstance(myclf._model, LinearSVC)

根据评论:

然后您还可以在开始时初始化一个字典,例如:

from sklearn.svm import LinearSVC

str_to_model = {'LinearSVC' : LinearSVC}

class Classifier(object):
def __init__(self, model = "LinearSVC", *args, **kwargs):
self._model = str_to_model[model](*args, **kwargs)

使用KeyError(字符串/模型不存在,并且您没有定义它们,所以您知道)比检查全局更干净,听起来很恶心!

关于python - 按名称获取当前文件中已导入的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726173/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com