在一个不平衡的项目上工作,我想知道哪些分类器带有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(将被“平衡” :-)功能的分类器。
答案 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_()
是对该类的构造函数的调用,并返回一个实例。