哪些SKLearn分类器带有class_weight参数

时间:2018-11-20 14:47:00

标签: python-3.x scikit-learn

在一个不平衡的项目上工作,我想知道哪些分类器带有class_weigth参数。

受到以下方面的启发:

from sklearn.utils.testing import all_estimators

estimators = all_estimators()

for name, class_ in estimators:
     if hasattr(class_, 'predict_proba'):
     print(name) 

'compute_class_weight'是一个函数,而不是一个类。因此,从本质上讲,我正在寻找一个代码片段,该代码片段将打印出所有需要compute_class_weight(将被“平衡” :-)功能的分类器。

1 个答案:

答案 0 :(得分:0)

您可以获取分类器(并非所有估计量),并检查实例化对象中的class_weight属性:

from sklearn.utils.testing import all_estimators

estimators = all_estimators(type_filter='classifier')
for name, class_ in estimators:
    if hasattr(class_(), 'class_weight'): # Note the parenthesis: class_() 
        print(name)

生成可处理类不平衡的分类器列表:

DecisionTreeClassifier
ExtraTreeClassifier
ExtraTreesClassifier
LinearSVC
LogisticRegression
LogisticRegressionCV
NuSVC
PassiveAggressiveClassifier
Perceptron
RandomForestClassifier
RidgeClassifier
RidgeClassifierCV
SGDClassifier
SVC

请注意,class_weight实例化模型的属性,而是不是模型的属性。类LogisticRegression没有class_weight,但是类型为LogisticRegression的模型却没有。这是实例和类之间的基本面向对象的区分。 您可以使用以下代码实际检查差异:

from sklearn.linear_model import LogisticRegression

logreg_class = LogisticRegression
print(type(logreg_class))
# >>> <class 'type'>

logreg_model = LogisticRegression()
print(type(logreg_model))
# >>> <class 'sklearn.linear_model.logistic.LogisticRegression'>

在循环期间,class_引用模型类,class_()是对该类的构造函数的调用,并返回一个实例。