gpt4 book ai didi

python - 如何使用两个特征向量训练 svm?

转载 作者:太空宇宙 更新时间:2023-11-04 07:31:36 24 4
gpt4 key购买 nike

我有两个 numpy 数组(特征)。 numpy 数组的维度是:

audio=(360,13) --->从音频文件中提取特征

image=(360,5)--> 从这些音频文件的频谱图中提取特征。

我想同时使用这两个数组来训练 svm 分类器。但我知道 svm train 只得到一个数组。 (svm.train(特征,标签))。我正在寻找是否有类似 svm.train(audio,image,label) 的东西

我也尝试连接这两个数组,但尺寸不同。我该如何解决这种情况?

最佳答案

虽然@Saedeas 提供了一个简单的解决方案,但我建议采用稍微不同的方式。

串联对于同质 特征很有用,当数据来自完全不同的模态(如音频 + 视频)时效果不佳。但是,可以使用核函数(SVM 的基础)的简单属性来处理这个问题,即两个核之和是一个核,因此我们可以定义:

K_{audio x video}(x,y) = a K_{video}(x_{video}, y_{video}) + 
(1-a) K_{audio}(x_{audio},y_{audio})

所以分别给定每个模态的内核,我们在其之上定义一个联合内核,其中 a 是要调整的超参数 a e [0,1]。

在代码方面,它可能会以与已经建议的类似的方式完成:

# First concat, but only for easier handling
new_data = np.concatenate((audio,image), axis=1)
y = ...

def video_kernel(X, Y):
...

def audio_kernel(X, Y):
...

# now new kernel
def new_kernel(X, Y, a=0.5):
return a*audio_kernel(X[:, :13], Y[:, :13]) + (1-a)*video_kernel(X[:, 13:], Y[:, 13:])

svm = SVC(kernel=new_kernel)
svm.fit(new_data, y)

关于python - 如何使用两个特征向量训练 svm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46246986/

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