ali*_*ali 1 python artificial-intelligence classification machine-learning svm
我有两个numpy数组(功能)。numpy数组的尺寸为:
audio =(360,13)--->从音频文件中提取特征
image =(360,5)->特征是从这些音频文件的频谱图中提取的。
我想一起使用这两个数组来训练svm分类器。但是我知道svm train只能得到一个数组。(svm.train(feature,label))。我正在寻找是否有像svm.train(音频,图像,标签)之类的东西
我也尝试连接这两个数组,但是维数不同。我该如何解决这种情况?
虽然@Saedeas提供了一个简单的解决方案,但我建议采用略有不同的方式。
串联对于同质功能很有用,当数据来自完全不同的形式(例如音频和视频)时,它不能很好地工作。但是,可以使用内核函数的简单属性(这是SVM的基础)来解决这一问题,即两个内核的总和是一个内核,因此我们可以定义:
K_{audio x video}(x,y) = a K_{video}(x_{video}, y_{video}) +
(1-a) K_{audio}(x_{audio},y_{audio})
Run Code Online (Sandbox Code Playgroud)
因此,分别为每个模态指定内核,我们在其顶部定义一个联合内核,其中a是要调整的超参数ae [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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |