我想快速的构建模型,并且对比模型的各个性能,从而进行模型算法的方案选择
autosklearn
是一种自动化机器学习工具,可以帮助用户快速地建立
和优化机器学习模型
。它基于贝叶斯优化
和元学习
的技术,能够自动选择最优模型
和超参数
,并在给定时间内最大化模型性能。
使用autosklearn可以节省
机器学习建模时间和资源,降低
建模门槛,同时也可以避免
人为错误和主观性对模型性能的影响。它适用于各种类型的数据集和机器学习任务,包括分类
、回归
、特征工程
等。
对于数据科学竞赛,时间很有限并且需要迅速构建一个指标良好的模型。autosklearn 可以在很短的时间内搜索
最佳模型,并生成可提交的预测结果。
当存在多个候选模型时,autosklearn 可以根据给定的数据集和问题自动选择
最佳模型并优化
其超参数。
当计算资源有限
时,手动调整
模型超参数可能会非常困难
。autosklearn 可以自动搜索
最佳超参数,以最大程度地提高性能而不浪费计算资源。
如果您拥有大量的数据集
,那么针对每个数据集挑选最佳的模型
和超参数
可能会非常耗时
。autosklearn 可以灵活地适应不同的数据集
,并为每个数据集自动选择最佳的模型和超参数。
time_left_for_this_task
:指定训练的时间限制。这个参数指定了autosklearn
在寻找最佳模型
时可以使用的总时间
。确保将此值设置为足够高
,以便autosklearn有足够
的时间探索不同的模型并找到最适合
您的数据的模型。
这个参数设置了任何单个模型
在搜索过程中可以运行的最长时间
。默认值
已经设置为一个合理的值
,但根据您的数据复杂性和硬件设置,您可能需要进行调整。
此参数控制是否使用元学习来确定搜索过程的初始超参数
。元学习涉及使用先前类似数据集
的结果来指导搜索过程,并可以显著加快优化时间。
参数的大小指的是使用元学习来确定搜索过程中初始超参数的数据集大小。这个参数的默认值
为“25”,表示使用不超过
25个先前类似数据集的结果来指导搜索过程。如果您的数据集非常大或者难以训练
,您可以尝试增加这个参数
的值,以便使用更多的先前数据集结果来指导搜索过程。但是请注意,增加这个参数的值也会增加元学习阶段的计算时间
,因此需要在时间和内存消耗之间进行权衡。
此参数确定用于组成最终集成的模型数量
。更大的集合大小通常会产生更好的性能,但也需要更长的训练时间,并可能增加内存使用量。
此参数指定交叉验证过程中使用的重采样策略。默认值为“holdout”
,意味着一部分训练数据被保留用于验证。其他选项包括“cross_validation”
和“bootstrap”
,这些选项使用不同的方法在验证过程中对数据进行采样.
“holdout”,即留出法
,使得训练集和测试集按比例划分,而不是使用交叉验证方法。
k折交叉验证(cross-validation)
、留一法(leave-one-out)
交叉验证参数,用于控制交叉验证的具体行为。如果使用留出法,则可以通过该参数来控制训练集大小。如果使用交叉验证,则可以通过该参数来控制折数等。
包含的基本模型列表,用于指定要使用的机器学习模型。默认情况下,auto-sklearn会自动选择一组候选模型,但我们也可以手动指定要使用的模型。该参数的可选项包括:“adaboost”、“bernoulli_nb”、“decision_tree”、“extra_trees”、“gaussian_nb”、“gradient_boosting”、“k_nearest_neighbors”、“liblinear_svc”、“libsvm_svc”、“multinomial_nb”、“passive_aggressive”、“qda”、“random_forest”,默认为None。
排除的基本模型列表,用于指定不使用的机器学习模型。该参数的可选项同include_estimators,默认为None。
包含的预处理器列表,用于指定要使用的预处理器。该参数的可选项包括:“no_preprocessing”、“pca”、“fast_ica”、“truncated_svd”、“select_percentile_classification”、“select_rates_classification”、“select_fwe_classification”、“select_fdr_classification”、“select_from_model_classification”、“kernel_pca”、“polynomial”,默认为None。
排除的预处理器列表,用于指定不使用的预处理器。该参数的可选项同include_preprocessors,默认为None。
并行工作进程数。默认为1,如果有多个CPU核心可以设置大于1的值以加速计算。
控制输出详细程度的参数,可选值为0、1和2。其中0表示不输出信息,1表示输出少量信息,2表示输出更多信息。默认为0。
import autosklearn.classification as classifier
import sklearn.datasets
X, y = sklearn.datasets.load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=42)
# 设置超参数搜索空间和搜索策略
clf = classifier.AutoSklearnClassifier(
time_left_for_this_task=120,
per_run_time_limit=30,
n_jobs=4,
include_estimators=["random_forest", "extra_trees"],
include_preprocessors=["no_preprocessing"],
resampling_strategy="holdout",
resampling_strategy_arguments={"train_size": 0.67},
ensemble_size=1,
initial_configurations_via_metalearning=25,
verbose=2,
)
# 训练和搜索超参数
clf.fit(X_train, y_train)
# 预测并计算准确率得分
y_pred = clf.predict(X_test)
accuracy = sklearn.metrics.accuracy_score(y_test, y_pred)
print("Accuracy score:", accuracy)
'''
在上面的示例中,我们导入了必要的库和数据集,并将digits数据集划分为训练/测试集。然后,我们实例化AutoSklearnClassifier类,并设置一系列超参数,包括时间限制、每个模型的最大运行时间、使用的基本模型(随机森林和极端随机树)、不使用预处理器、留出法作为划分策略等。
接下来,我们调用fit函数进行训练和超参数搜索,该函数将自动执行网格搜索并返回性能最好的模型。最后,我们使用predict函数进行预测,并计算分类器的准确率得分。
在这个示例中,我们选择了留出法作为划分策略,通过resampling_strategy_arguments参数来控制训练集大小,即train_size=0.67。并且,我们手动指定了使用的基本模型和预处理器,分别是随机森林和极端随机树,以及不使用任何预处理器。同时,我们还设置了verbose参数为2,表示输出更多信息,以便我们更好地理解超参数搜索的过程。
'''
分类器和回归器
:autosklearn 提供了 AutoSklearnClassifier
和 AutoSklearnRegressor
两个类别,分别用于构建分类器
和回归器
模型。
数据集加载器
:autosklearn 支持多种格式的数据集加载,例如从文件中读取、通过 numpy 或 pandas 加载等方式。
模型保存和加载
:autosklearn 提供了 save
和 load
方法,用于保存和加载训练好的模型。
超参数优化器
:autosklearn 提供了不同的超参数优化算法,包括随机搜索
、贝叶斯优化
等。
预测器
:autosklearn 提供了 predict
方法,用于对新的数据样本进行预测。
可视化工具:autosklearn 还提供了一些可视化工具
,例如可视化超参数优化过程、模型性能等
AutoSklearnClassifier
包含以下算法:Adaboost
Bernoulli Naive Bayes
Decision Tree
Extra Trees
Gradient Boosting
K Nearest Neighbors
LDA
MLP
Multinomial Naive Bayes
Passive Aggressive
QDA
Random Forest
SGD
SVM
AutoSklearnRegressor
包含以下算法:Bayesian Ridge Regression
Decision Tree
Elastic Net
Extra Trees
Gradient Boosting
Kernel Ridge Regression
K Nearest Neighbors Regression
Lasso
MLP
Orthogonal Matching Pursuit
Passive Aggressive
Random Forest
SGD
SVM
fit(X_train, y_train)
:用于训练模型的函数,输入参数X_train为训练数据集,y_train为训练标签。示例代码如下:
python
import autosklearn.classification
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)
predict(X_test)
:用于对测试集进行预测的函数,输入参数X_test为测试数据集。示例代码如下:
python
predictions = automl.predict(X_test)
get_models_with_weights()
:返回最终模型及其权重的列表,按照得分从高到低排序。示例代码如下:
python
models = automl.get_models_with_weights()
for model in models:
print(model)
get_models_with_attributes()
:返回所有候选模型及其属性的列表。示例代码如下:
python
models = automl.get_models_with_attributes()
for model in models:
print(model)
pip install auto-sklearn
导入 autosklearn 的分类器或回归器。
加载您的数据集。
调用 fit 方法,对模型进行训练。
调用 predict 方法,对测试数据进行预测。
import autosklearn.classification
X_train, X_test, y_train, y_test = # 加载您的数据集
automl = autosklearn.classification.AutoSklearnClassifier(
time_left_for_this_task=120,
per_run_time_limit=30,
initial_configurations_via_metalearning=25,
ensemble_size=50,
resampling_strategy='holdout'
)
automl.fit(X_train, y_train)
y_pred = automl.predict(X_test)
#1. 安装autosklearn库和相关依赖
!pip install -U setuptools wheel numpy scipy pandas scikit-learn Cython psutil xgboost
!pip install -U auto-sklearn
#2. 导入需要的库和数据集
import autosklearn.classification
import sklearn.datasets
import sklearn.metrics
import numpy as np
from sklearn.model_selection import train_test_split
import pickle
import matplotlib.pyplot as plt
# 加载iris数据集
X, y = sklearn.datasets.load_iris(return_X_y=True)
#划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
#创建一个autosklearn分类器并拟合训练数据
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)
#使用测试集进行模型预测,并计算模型性能指标
y_pred = automl.predict(X_test)
accuracy = sklearn.metrics.accuracy_score(y_test, y_pred)
print("Accuracy score:", accuracy)
# 获取所有模型及其评估指标
models = automl.get_models_with_info()
# 输出各个模型的性能指标,输出每个模型的名称、超参数和性能指标等信息
for model in models:
print(model['name'])
print(model['parameters'])
print(model['score'])
# 保存模型
with open('autosklearn_model.pkl', 'wb') as f:
pickle.dump(automl, f)
# 加载模型
with open('autosklearn_model.pkl', 'rb') as f:
loaded_automl = pickle.load(f)
#可视化比较结果
plt.figure(figsize=(8,6))
plt.plot(y_test, label="True labels", color='green')
plt.plot(y_pred, label="Predicted labels", color='red', linestyle='--')
plt.legend()
plt.show()
结合着看