我正在使用SVM分类器sklearn
的{{1}}线性实现。
我没有直接使用它,而是用LinearSVM
包装它以获得预测时间内的概率,例如:
CalibratedClassifierCV
在拟合模型之后,我试图按照本文Visualising Top Features in Linear SVM with Scikit Learn and Matplotlib的说明来获取model = CalibratedClassifierCV(LinearSVC(random_state=0))
来打印Top功能,但是我得到了这个错误:
coef_
在用校准器包装分类器的情况下,如何获得coef = classifier.coef_.ravel()
AttributeError: 'CalibratedClassifierCV' object has no attribute 'coef_'
?我对这种方式并不完全感兴趣,因此,如果有另一种方法来获得特征的重要性,它将是欢迎。
答案 0 :(得分:1)
coef_
不是CalibratedClassifierCV
的属性,但是,它是base_estimator
的属性,在您的情况下,该属性是LinearSVC
。您可以通过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>]
值拟合的模型数量)。我已经显示了示例代码,您可以根据需要参考。
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]])
是3,因此我建立了3个模型,因此我将简单地遍历它们并取平均值。
Private Async Sub DownloadExcelReport_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DownloadExcelReport.Click
DownloadInProgress.Visible = True
Await Task.Run(Sub()
ProcessExcelReport() 'long running sub (not an async function).
End Sub)
End Sub
希望这会有所帮助!