如何用一个特征绘制支持向量机超平面

2024-04-26 11:24:34 发布

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

我有一个具有一个特征的数据集,我正在使用scikit学习训练一个支持向量分类器。我想把结果形象化,但我对如何绘制散布图有点困惑。我将通过以下操作获得我的超平面:

slope = clf.coef_[0][0]
intercept = clf.intercept_[0]

也就是说y=-.01x+2.5

我假设这是我的超平面。我似乎不知道如何用一个特性来绘制数据。y轴用什么?你知道吗


Tags: 数据分类器绘制特征特性scikit向量slope
1条回答
网友
1楼 · 发布于 2024-04-26 11:24:34

这是一个有趣的问题。表面上很简单-一个特征意味着一个维度,因此超平面必须是0维的,即一个点。然而,scikit所学到的只是一句台词。所以问题是如何把这条线变成一个点。你知道吗

我花了大约一个小时在sciket learn的文档中寻找答案,但是在1-dsvm分类器上却什么都没有(可能是因为它们不实用)。因此,我决定玩下面的示例代码,看看是否能找到答案:

from sklearn import svm

n_samples = 100
X = np.concatenate([np.random.normal(0,0.1,n_samples), np.random.normal(10,0.1,n_samples)]).reshape(-1,1)
y = np.array([0]*n_samples+[1]*n_samples)
clf = svm.LinearSVC(max_iter = 10000)
clf.fit(X,y)  
slope = clf.coef_
intercept = clf.intercept_
print(slope, intercept)
print(-intercept/slope)

X是样本的数组,使得前100个点从N(0,0.1)采样,而下100个点从N(10,0.1)采样。y是标签数组(类“0”的100和类“1”的100)。很明显,超平面应该在0到10之间。你知道吗

一旦你拟合了分类器,你会发现截距大约是-0.96,这离0-d超平面(即一个点)应该在的地方很远。然而,如果你取y=0并反算x,它将非常接近5。现在试着改变组成X的分布的平均值,你会发现答案总是-intercept/slope。这就是分类器的0-d超平面(点)。你知道吗

因此,为了可视化,只需将数据绘制在一条数字线上(对类使用不同的颜色),然后绘制通过将负截距除以斜率得到的边界。我不知道如何绘制一条数字线,但您可以始终使用散点图,将所有y坐标设置为0。你知道吗

相关问题 更多 >