带有 rbf 内核的 SVC 的 10 大功能

Posted

技术标签:

【中文标题】带有 rbf 内核的 SVC 的 10 大功能【英文标题】:Top 10 features SVC with rbf kernel 【发布时间】:2018-01-13 18:55:59 【问题描述】:

我正在尝试为具有 RBF 内核的 SVM 分类器获取前 10 个信息量最大(最佳)的特征。由于我是编程初学者,所以我尝试了一些我在网上找到的代码。不幸的是,没有一个工作。我总是收到错误:ValueError: coef_ is only available when using a linear kernel

这是我测试的最后一个代码:

scaler = StandardScaler(with_mean=False)
enc = LabelEncoder()
y = enc.fit_transform(labels)
vec = DictVectorizer()

feat_sel = SelectKBest(mutual_info_classif, k=200)

# Pipeline for SVM classifier
clf = SVC()
pipe = Pipeline([('vectorizer', vec),
             ('scaler', StandardScaler(with_mean=False)),
             ('mutual_info', feat_sel),
             ('svc', clf)])


y_pred = model_selection.cross_val_predict(pipe, instances, y, cv=10)


# Now fit the pipeline using your data
pipe.fit(instances, y)

def show_most_informative_features(vec, clf, n=10):
    feature_names = vec.get_feature_names()
    coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
    top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])
    for (coef_1, fn_1), (coef_2, fn_2) in top:
        return ('\t%.4f\t%-15s\t\t%.4f\t%-15s' % (coef_1, fn_1, coef_2, fn_2))
print(show_most_informative_features(vec, clf))

有人没有办法从带有 RBF 内核的分类器中获得前 10 个特征吗?或者以其他方式可视化最佳特征?

【问题讨论】:

【参考方案1】:

我不确定您所要求的 RBF 内核是否可能与您展示的示例类似(正如您的错误所示,该示例仅适用于线性内核)。

但是,您可以随时尝试feature ablation;逐个删除每个功能并测试它如何影响性能。对性能影响最大的 10 个功能是您的“前 10 个功能”。

显然,这只有在 (1) 您的功能相对较少和/或 (2) 训练和测试您的模型不需要很长时间的情况下才有可能。

【讨论】:

以上是关于带有 rbf 内核的 SVC 的 10 大功能的主要内容,如果未能解决你的问题,请参考以下文章

GridSearchCV 是用 rbf 内核和不同程度计算 SVC 吗?

SVM 内核的速度?线性 vs RBF vs 多边形

带有 Gram 矩阵的预计算 RBF 内核的 Python 实现?

SVM 自定义 RBF 内核 IndexError

内核 SVC 不断收到 RandomSearchCV 中的参数错误

在 SVM 中使用带有卡方距离度量的 RBF 内核