2024-04-26 11:24:34 发布
网友
我有一个具有一个特征的数据集,我正在使用scikit学习训练一个支持向量分类器。我想把结果形象化,但我对如何绘制散布图有点困惑。我将通过以下操作获得我的超平面:
slope = clf.coef_[0][0] intercept = clf.intercept_[0]
也就是说y=-.01x+2.5
我假设这是我的超平面。我似乎不知道如何用一个特性来绘制数据。y轴用什么?你知道吗
这是一个有趣的问题。表面上很简单-一个特征意味着一个维度,因此超平面必须是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之间。你知道吗
X
y
一旦你拟合了分类器,你会发现截距大约是-0.96,这离0-d超平面(即一个点)应该在的地方很远。然而,如果你取y=0并反算x,它将非常接近5。现在试着改变组成X的分布的平均值,你会发现答案总是-intercept/slope。这就是分类器的0-d超平面(点)。你知道吗
y=0
x
-intercept/slope
因此,为了可视化,只需将数据绘制在一条数字线上(对类使用不同的颜色),然后绘制通过将负截距除以斜率得到的边界。我不知道如何绘制一条数字线,但您可以始终使用散点图,将所有y坐标设置为0。你知道吗
这是一个有趣的问题。表面上很简单-一个特征意味着一个维度,因此超平面必须是0维的,即一个点。然而,scikit所学到的只是一句台词。所以问题是如何把这条线变成一个点。你知道吗
我花了大约一个小时在sciket learn的文档中寻找答案,但是在1-dsvm分类器上却什么都没有(可能是因为它们不实用)。因此,我决定玩下面的示例代码,看看是否能找到答案:
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。你知道吗相关问题 更多 >
编程相关推荐