gpt4 book ai didi

python - 如何创建具有多个分类特征的 SVM?

转载 作者:太空宇宙 更新时间:2023-11-03 21:33:49 25 4
gpt4 key购买 nike

我正在编写一段代码来使用 opencv 识别不同的二维形状。我从每个二维形状的图像中获得 4 组数据,这些数据存储在多维数组 featureVectors 中。

我正在尝试编写一个考虑到从图像中获得的所有 4 个特征的 svm/svc。我已经能够使其仅使用 2 个功能,但是当我尝试所有 4 个功能时,我的图表看起来像这样。

My Graph which is incorrect

我的 featureVectors 值是:

[[  4.00000000e+00   1.74371349e-03   6.49705560e-01   9.07957236e+01]
[ 4.00000000e+00 4.60937436e-02 1.97642179e-01 9.02041472e+01]
[ 1.00000000e+00 1.18553450e-03 3.03491372e-01 6.03489082e+01]
[ 1.00000000e+00 1.54552898e-02 8.38091425e-01 1.09021207e+02]
[ 3.00000000e+00 1.69961646e-02 4.13691915e+01 1.36838300e+02]]

我的标签是:

[[2]
[2]
[0]
[0]
[1]]

这是我的 SVM 代码:

#Saving featureVectors to a csv file
values1 = featureVectors
header1 = ["Number of Sides", "Standard Deviation of Number of Sides/Perimeter",
"Standard Deviation of the Angles", "Largest Angle"]
my_df = pd.DataFrame(featureVectors)
my_df.to_csv('featureVectors.csv', index=True, header=header1)

#Saving labels to a csv file
values2 = labels
header2 = ["Label"]
my_df = pd.DataFrame(labels)
my_df.to_csv('labels.csv', index=True, header=header2)

#Writing the SVM
def Build_Data_Set(features = header1, features1 = header2):

data_df = pd.DataFrame.from_csv("featureVectors.csv")
#data_df = data_df[:250]
X = np.array(data_df[features].values)

data_df2 = pd.DataFrame.from_csv("labels.csv")
y = np.array(data_df2[features1].values)
#print(X)
#print(y)

return X,y

def Analysis():
X,y = Build_Data_Set()

clf = svm.SVC(kernel = 'linear', C = 1.0)
clf.fit(X, y)

w = clf.coef_[0]
a = -w[0] / w[1]
xx = np.linspace(0,5)
yy = np.linspace(0,185)

h0 = plt.plot(xx,yy, "k-", label="non weighted")

plt.scatter(X[:, 0],X[:, 1],c=y)
plt.ylabel("Maximum Angle (Degrees)")
plt.xlabel("Number Of Sides")
plt.title('Shapes')
plt.legend()


plt.show()

Analysis()

到目前为止我只使用了 5 个数据集(形状),因为我知道它不能正常工作。

最佳答案

您代码的 SVM 部分实际上是正确的。它周围的绘图部分不是,根据代码我会尝试给你一些指示。

首先:

another example I found(i cant find the link again) said to do that

在不理解代码的情况下复制代码可能会导致比解决的问题更多的问题。根据您的代码,我假设您使用了 this作为初学者的例子。

plt.scatter(X[:, 0],X[:, 1],c=y)

在 sk-learn 示例中,此代码段用于绘制数据点,并根据它们的标签为它们着色。这是有效的,因为在示例中我们正在处理二维数据,所以这很好。您正在处理的数据是 4 维的,因此您实际上只是在绘制前两个维度。

plt.scatter(X[:, 0], y, c=y)

另一方面是没有意义的。

xx = np.linspace(0,5)
yy = np.linspace(0,185)

h0 = plt.plot(xx,yy, "k-", label="non weighted")

您的决策边界实际上与实际决策边界无关。它只是坐标系中 y 对 x 的绘图。(除此之外,您正在处理多类别数据,因此您将拥有与类别一样多的决策边界。)

现在您的实际问题是数据维度。您试图在 2d 图中绘制 4 维数据,这根本行不通。一种可能的方法是执行降维以将 4d 数据映射到较低维空间,所以如果你愿意,我建议你阅读例如the excellent sklearn documentation了解 SVM,此外 something about dimensionality reduction.

关于python - 如何创建具有多个分类特征的 SVM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43000825/

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