如何为计算机视觉保持多个模型的字典(并在循环中使用它们)

我希望有一个流程,最终结果能为我提供一系列机器学习模型及其准确性得分,但仅限于该类型模型的最佳参数集。

例如,这里仅展示XGBoost的交叉验证:

数据集:

import numpy as npimport pandas as pdfrom sklearn.datasets import load_irisiris = load_iris()data = pd.DataFrame(data= np.c_[iris['data'], iris['target']],                     columns= iris['feature_names'] + ['target'])from sklearn.model_selection import train_test_splitX = 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 GridSearchCVfrom sklearn.metrics import accuracy_score, make_scoreraccu = make_scorer(accuracy_score) # 将来我会使用f1def 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 XGBClassifieralg = [XGBClassifier()]y_pred = predict_for_best_params(alg[0], X_train, y_train, X_test)from sklearn.metrics import accuracy_scoreprint(accuracy_score(y_test, y_pred))

我想实现的是类似这样的:

from xgboost import XGBClassifierfrom sklearn.ensemble import RandomForestClassifieralg = [XGBClassifier(), RandomForrest()] # 许多模型的列表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_predfor algo in alg:    params = alg_params[str(algo)][0] # 这行不会工作,因为str(algo) <> 例如XGBClassifier()而是XGBClassier(所有默认参数)    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)))

这是实现它的好方法吗?


回答:

如果你只关心如何设置键,你可以使用

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

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

对于另一种方法,你可以查看我的其他回答:

那个回答利用了GridSearchCV可以接受参数组合的字典列表的事实,其中每个列表将被单独扩展。但请注意以下几点:

  • 如果你使用n_jobs > 1(使用多处理),这可能会比你当前的for-loop更快。
  • 然后你可以使用完成的GridSearchCVcv_results_属性来分析得分。
  • 要为单个估计器计算y_pred,你可以过滤cv_results_(可能通过将其导入到pandas DataFrame中),然后再次用找到的最佳参数拟合估计器,然后计算y_pred。但这应该相当简单。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注