我正在将python与sklearn一起使用,并希望获得模型的可用超参数列表,该怎么做?谢谢
这需要在我初始化模型之前发生,当我尝试使用
model.get_params()
我明白这个
TypeError: get_params() missing 1 required positional argument: 'self'
这应该可以做到:estimator.get_params()
其中estimator
是模型的名称。
要在模型上使用它,您可以执行以下操作:
reg = RandomForestRegressor()
params = reg.get_params()
# do something...
reg.set_params(params)
reg.fit(X, y)
编辑:
要在实例化类之前获取模型超参数,请执行以下操作:
import inspect
import sklearn
models = [sklearn.ensemble.RandomForestRegressor, sklearn.linear_model.LinearRegression]
for m in models:
hyperparams = inspect.getargspec(m.__init__).args
print(hyperparams) # Do something with them here
模型超参数在sklearn
中传递给构造函数,因此我们可以使用inspect
模型来查看哪些构造函数参数可用,从而查看超参数。您可能需要筛选出一些不特定于模型的参数,例如 self
和 n_jobs
。
截至 2021 年 5 月:
(基于须藤的回答(
# To get the model hyperparameters before you instantiate the class
import inspect
import sklearn
models = [sklearn.linear_model.LinearRegression]
for m in models:
hyperparams = inspect.signature(m.__init__)
print(hyperparams)
#>>> (self, *, fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
使用 inspect.getargspec(m.__init__).args
,正如 sudo 在接受的答案中所建议的那样,生成以下警告:
DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0,
use inspect.signature() or inspect.getfullargspec()
如果您碰巧正在查看 CatBoost,请尝试.get_all_params()
而不是 get_params()
。
estimator._get_param_names()
将打印出给定估计器(模型(的所有可用超参数。
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
SVR._get_param_names()
['C',
'cache_size',
'coef0',
'degree',
'epsilon',
'gamma',
'kernel',
'max_iter',
'shrinking',
'tol',
'verbose']
RandomForestRegressor._get_param_names()
['bootstrap',
'ccp_alpha',
'criterion',
'max_depth',
'max_features',
'max_leaf_nodes',
'max_samples',
'min_impurity_decrease',
'min_samples_leaf',
'min_samples_split',
'min_weight_fraction_leaf',
'n_estimators',
'n_jobs',
'oob_score',
'random_state',
'verbose',
'warm_start']