【问题标题】:how to use a string that keeps a classifier如何使用保留分类器的字符串
【发布时间】:2021-01-07 08:16:28
【问题描述】:

在我的数据库中,我有一个来自以下列的表:Model_type、Train_score、Best_params。

  • model_type 中有 3 个唯一值:LOGREG、RF、XGBOOST,

  • train_score 列保存每个模型针对不同参数的 auc_score。

  • best_params 保留使用的参数。

我使用下面的代码得到每个模型的最佳参数

bests = worker_out.iloc[worker_out.groupby(['MODEL_TYPE'])['TRAIN_SCORE'].idxmax()][["MODEL_TYPE","BEST_PARAMS"]]
bests.set_index("MODEL_TYPE", inplace=True)

LOGREG = bests.loc["LOGREG"][0]
RF = bests.loc["RF"][0]
XGBOOST = bests.loc["XGBOOST"][0]

例如,LOGREG 保持

print(LOGREG)
print(type(LOGREG))

LogisticRegression(C=0.01,class_weight='balanced',l1_ratio=0.2,max_iter=2000,penalty='elasticnet',solver='saga')
<class 'str'>

LOGREG 现在只是一个字符串,但是我可以将它用作分类器。你可以在下面的代码中看到我想要做什么。

LOGREG = LogisticRegression(C=0.01,class_weight='balanced',l1_ratio=0.2,max_iter=2000,penalty='elasticnet',solver='saga')

【问题讨论】:

  • 你把模型和参数的所有组合都存储在表中了吗?还是只存储为每个模型存储的更好的那个?

标签: python pandas machine-learning


【解决方案1】:

LOGREG_model = eval(LOGREG) 怎么样。

我把名字从LOGREG改成了LOGREG_model

【讨论】:

  • 如果有其他更清晰的方法来实现相同的效果,不建议使用字符串评估
  • @SergeyBushmanov 是的。但其他方法似乎包括一些令人厌烦的解析,我建议将此作为操作的快速解决方案。
  • 快速解决方案有时会中断......
【解决方案2】:

试试字典,而不是熊猫:

from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification

X, y = make_classification()

rf = RandomForestClassifier()
lr = LogisticRegression()

models = {"rf": rf, "lr": lr}

for model in models:
    models[model].fit(X, y)
    
scores = {}

for model in models:
    scores[model] = models[model].score(X, y)
    
print(scores)

{'lr': 0.9, 'rf': 1.0}

【讨论】:

  • @furkan 有帮助吗?它回答了你的问题吗?如果是这样,请考虑接受/支持
猜你喜欢
  • 2020-09-13
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多