gpt4 book ai didi

python - 如何在scikit SVC中打印相应的特征权重?

转载 作者:行者123 更新时间:2023-11-30 09:15:54 28 4
gpt4 key购买 nike

与 SVM 一样,每个特征 f[i] 对应一个权重 w[i] 作为系数。当所有特征都被缩放时,w[i]必须代表特征f[i]的重要性,所以我希望打印这个重要性顺序。所以我写了一个快速代码,并使用 clf.coef_ 来获取所有 w[i]。但结果有点奇怪,对于 n_features=2,clf.coef_ 输出 10x2 矩阵!

from sklearn import svm
from sklearn.datasets.samples_generator import make_blobs
from pandas import DataFrame
X,Y=make_blobs(n_samples=100, centers=5, n_features=2)

clf=svm.SVC(kernel='linear',probability=True)
clf.fit(X,Y)

print(clf.coef_)

此代码的输出是:-

[[-0.14808725 -0.30415025]
[ 0.01612808 0.43529163]
[-1.06694209 -0.27738544]
[-0.13195668 -0.27799574]
[ 0.03588147 0.13657989]
[ 0.04273599 0.65849432]
[ 0.68017938 -0.64049715]
[-0.09071154 -0.22828399]
[-0.01494555 -0.1300181 ]
[ 0.10260101 -0.36918253]]

那么这个 10x2 矩阵代表什么,更重要的是如何获得与每个特征权重对应的所有 w[i] 值。

最佳答案

在线性 SVM 中,请注意结果是一个尽可能最好地分隔类别的超平面。权重通过给出与超平面正交的向量的坐标来表示该超平面 - 这些是 svm.coef_ 给出的系数

采用 10*2 矩阵的原因:(类数为 5,特征数为 2)(sklearn 的文档清晰且有帮助)

SVC 实现了多类分类的“一对一”。如果 n_class 是类的数量,则构建 n_class * (n_class - 1)/2 个分类器,每个分类器训练来自两个类的数据。

SVM 的 coef_ 属性输出相同,数组为:[n_class * (n_class-1)/2, n_features]

如果您只想使用 5 个分类器而不是 10 个,您可以:

  1. 在定义/拟合您的 clf 时使用 Decision_function_shape = "ovr"。
  2. 或者您可以使用线性 SVC (lin_clf = svm.LinearSVC())(默认情况下将使用 ovr)

关于python - 如何在scikit SVC中打印相应的特征权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56052431/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com