首页 > 解决方案 > 模型定义没有给出任何输出

问题描述

from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel

上面代码的输出只是

LogisticRegression()

但我希望得到更详细的信息,包括模型参数,即:

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

我究竟做错了什么?

标签: pythonscikit-learn

解决方案


这是由于从 scikit-learn v0.23 开始更改了默认配置设置;来自变更日志

默认设置print_changed_only已从 False 更改为 True。这意味着repr估计器的 '现在更简洁,并且仅显示在打印估计器时其默认值已更改的参数。您可以使用 恢复以前的行为sklearn.set_config(print_changed_only=False)。另外,请注意,始终可以使用 快速检查任何估计器的参数est.get_params(deep=False)

也就是说,在 v0.23 之前的版本中,如下代码:

import sklearn
sklearn.__version__
# 0.22.2

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr

使用所有模型参数生成以下输出:

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

但是从 v0.23 开始的相同代码:

import sklearn
sklearn.__version__
# 0.23.2

from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
lr

只会产生:

LogisticRegression()

在像这里这样的情况下,即没有明确定义参数,并且都保持默认值。这是因为该print_changed_only参数现在默认设置为True

sklearn.get_config()

# result:

{'assume_finite': False,
 'working_memory': 1024,
 'print_changed_only': True,
 'display': 'text'}

要在较新的 scikit-learn 版本中打印所有参数,您应该这样做

lr.get_params()

# result

{'C': 1.0,
 'class_weight': None,
 'dual': False,
 'fit_intercept': True,
 'intercept_scaling': 1,
 'l1_ratio': None,
 'max_iter': 100,
 'multi_class': 'auto',
 'n_jobs': None,
 'penalty': 'l2',
 'random_state': None,
 'solver': 'lbfgs',
 'tol': 0.0001,
 'verbose': 0,
 'warm_start': False}

或更改设置(最好,因为它会影响之后使用的所有模型):

sklearn.set_config(print_changed_only=False) # needed only once
lr # as defined above

# result

LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                   intercept_scaling=1, l1_ratio=None, max_iter=100,
                   multi_class='auto', n_jobs=None, penalty='l2',
                   random_state=None, solver='lbfgs', tol=0.0001, verbose=0,
                   warm_start=False)

推荐阅读