从支持向量机返回最佳支持向量

2024-03-29 11:02:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用sklearn的支持向量分类器(在Python中)来寻找一组“0”和“1”标记数据之间的最佳边界。你知道吗

见:https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

但是,我想在围绕边界线旋转数据之后执行一些分析,因此我需要返回允许我定义要开始的线的属性。你知道吗

我执行SVC如下:

相关进口:

from sklearn import svm
import numpy as np
import matplotlib.pyplot as plt

我将分类器定义为:

clf = svm.SVC(kernel='linear',C = 1e-3 ,class_weight='balanced')

然后与训练数据相匹配:

clf.fit(f_train, labels_train)

因此,可以使用以下方法查看线性类边界:

plt.figure()
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 30)
yy = np.linspace(ylim[0], ylim[1], 30)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = clf.decision_function(xy).reshape(XX.shape)
ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,
           linestyles=['--', '-', '--'])

如图:https://scikit-learn.org/stable/auto_examples/svm/plot_separating_hyperplane.html

但打电话时:

clf.support_vectors_.shape

如果试图描述线性边界,因为输出具有形状(4485,2),我不确定如何将输出解释为相关的

任何帮助返回的东西,将允许我界定边界线将不胜感激!你知道吗


Tags: 数据import分类器nppltsklearnax边界
1条回答
网友
1楼 · 发布于 2024-03-29 11:02:00

基于Plotting 3D Decision Boundary From Linear SVM,可以使用clf.intercept_clf.coef_属性获得边界线:

def decision_hyperplane(clf, x, y=None, dimension=2):
    """
    Return a decision line (dimension 2, return y based on x) or a 
    decision plane (dimension 3, return z based on x and y).

    Decision plane equation is wx + b = 0, so in 2d case:
    w.dot(x) + b = w_x * x + w_y * y + b = 0
    y = (-w_x * x - b) / w_y
    In 3d:
    w_x * x + w_y * y + w_z * z + b = 0
    z = (-w_x * x - w_y * y - b) / w_z
    """
    if dimension == 2:
        return (-clf.intercept_[0] - clf.coef_[0][0] * x) / clf.coef_[0][1]
    elif dimension == 3:
        return (-clf.intercept_[0] - clf.coef_[0][0] * x - clf.coef_[0][1] * y) / clf.coef_[0][2]

如果你像这样用你的代码

ax.plot(xx, decision_hyperplane(clf, xx), color='red')

结果将是enter image description here

相关问题 更多 >