gpt4 book ai didi

python - 如何保存 CV 的多个模型的字典(并循环使用它们)

转载 作者:行者123 更新时间:2023-11-30 08:53:18 24 4
gpt4 key购买 nike

我想要一个过程,结果为我提供了机器学习模型及其准确度分数的列表,但仅针对给出该类型模型的最佳结果的参数集。

作为示例,这里只是 XGBoost 的 CV:

数据集:

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
data = pd.DataFrame(data= np.c_[iris['data'], iris['target']],
columns= iris['feature_names'] + ['target'])

from sklearn.model_selection import train_test_split
X = data.drop(['target'], axis=1)
y = data['target']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

寻找最佳参数的函数:

from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, make_scorer
accu = make_scorer(accuracy_score) # I will be using f1 in future

def predict_for_best_params(alg, X_train, y_train, X_test):
params = {'n_estimators': [200, 300, 500]}
clf = GridSearchCV(alg, params, scoring = accu, cv=2)
clf.fit(X_train, y_train)
print(clf.best_estimator_)
y_pred = clf.predict(X_test)
return y_pred

在一个模型上使用它:

from xgboost import XGBClassifier
alg = [XGBClassifier()]
y_pred = predict_for_best_params(alg[0], X_train, y_train, X_test)

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))

我想要实现的目标是:

from xgboost import XGBClassifier
from sklearn.ensemble import RandomForestClassifier

alg = [XGBClassifier(), RandomForrest()] # list of many of them

alg_params = {'XGBClassifier': [{'n_estimators': [200, 300, 500]}],
'RandomForrest': [{'max_depth ': [1, 2, 3, 4]}]}

def predict_for_best_params(alg, X_train, y_train, X_test, params):
clf = GridSearchCV(alg, params, scoring = accu, cv=2)
clf.fit(X_train, y_train)
print(clf.best_estimator_)
y_pred = clf.predict(X_test)
return y_pred

for algo in alg:
params = alg_params[str(algo)][0] #this won't work because str(algo) <> e.g. XGBClassifier() but XGBClassier(all default params)
y_pred = predict_for_best_params(algo, X_train, y_train, X_test, params)
print('{} accuracy is: {}'.format(algo, accuracy_score(y_test, y_pred)))

这是实现这一目标的好方法吗?

最佳答案

如果你只担心如何放 key ,那么你可以使用

params = alg_params[alg.__class__.__name__][0] 

这应该只返回 alg 对象的类名

对于替代方法,您可以查看我的其他答案:

这个答案利用了 GridSearchCV 可以获取参数组合字典列表的事实,其中每个列表将单独扩展。但请注意以下事项:

  • 如果您使用 n_jobs > 1(使用多重处理),这可能比当前的 for 循环 更快。​​
  • 然后,您可以使用已完成的 GridSearchCVcv_results_ 属性来分析分数。
  • 要计算各个估算器的 y_pred,您可以过滤 cv_results_(可以通过将其导入到 pandas DataFrame 中),然后再次用最佳找到的参数拟合估计器,然后计算 y_pred。但应该很容易。

关于python - 如何保存 CV 的多个模型的字典(并循环使用它们),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53081802/

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