Gha*_*nem 3 python feature-selection scikit-learn
我正在使用sklearnSVM 分类器的线性实现LinearSVM。
我没有直接使用它,但我将它包装起来CalibratedClassifierCV以获得预测时间内的概率,例如:
model = CalibratedClassifierCV(LinearSVC(random_state=0))
Run Code Online (Sandbox Code Playgroud)
拟合模型后,我尝试coef_打印 Top 特征,按照这篇文章Visualizing Top Features in Linear SVM with Scikit Learn 和 Matplotlib,但是我得到了这个错误:
coef = classifier.coef_.ravel()
AttributeError: 'CalibratedClassifierCV' object has no attribute 'coef_'
Run Code Online (Sandbox Code Playgroud)
coef在我用校准器包装分类器的情况下如何获得?,我对这种方式并不完全感兴趣,因此如果有另一种方式来获得特征重要性,它将受到欢迎。
coef_不是CalibratedClassifierCV但是的属性,base_estimator它是LinearSVC在您的情况下是 a的属性。您可以通过calibrated_classifiers_这是一个拟合模型列表(这取决于您根据您的cv值拟合的模型数量)访问您的基本估算器。我已经展示了一个示例代码,您可以根据需要参考。
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
from sklearn.calibration import CalibratedClassifierCV
from sklearn.svm import LinearSVC
iris = datasets.load_iris()
model = CalibratedClassifierCV(LinearSVC(random_state=0))
model.fit(iris.data, iris.target)
model.calibrated_classifiers_
[<sklearn.calibration._CalibratedClassifier at 0x7f15d0c57550>,
<sklearn.calibration._CalibratedClassifier at 0x7f15d0c57c18>,
<sklearn.calibration._CalibratedClassifier at 0x7f15d0aec080>]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我cv是三个,所以我建立了三个模型,所以我会简单地遍历它们并取平均值。
coef_avg = 0
for i in model.calibrated_classifiers_:
coef_avg = coef_avg + i.base_estimator.coef_
coef_avg = coef_avg/len(model.calibrated_classifiers_)
array([[ 0.16464871, 0.45680981, -0.77801375, -0.4170196 ],
[ 0.1238834 , -0.89117967, 0.35451826, -0.89231957],
[-0.83826029, -0.9237139 , 1.30772955, 1.67592916]])
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
1777 次 |
| 最近记录: |