首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异源特征的特征联合

异源特征的特征联合
EN

Stack Overflow用户
提问于 2015-10-04 13:59:29
回答 1查看 2K关注 0票数 5

我有三个不同的功能集,为给定的一组音频文件。它们中的每一个都是作为维数组存储的特征矩阵,如下所示:

  • 特征1:(978*153)
  • 特征2:(978*800)
  • 特征3:(978*12)

使用不同的技术从音频文件中提取这些特征中的每一个。

我想做的是把他们一起训练成一个分类器。(使用管道)。我在链接2中读过和博客链接,但是它涉及不同的提取方法,然后使用分类器。由于我已经提取了上面提到的数据,所以我想知道下一步要做什么,即如何将它们组合成一个管道。

我知道这里不能要求直接的代码--我只想要指针如何组合数据(可能使用管道),这些数据是从不同的方法中提取出来的,例如使用SVM对它们进行分类。

EN

回答 1

Stack Overflow用户

发布于 2015-10-04 18:27:30

假设您想要处理独立模型中的一组特性,然后将它们的结果集合在一起,我将在下面给出一个答案。但是,如果您想简单地使用单个模型中所有3种特征提取技术中的特性,那么只需将它们一起添加到单个数据集中,并将其用于培训。

我认为在Pipeline中做到这一点的最简单的方法是创建一个(978*965) pandas DataFrame,它包含所有三种技术的特性。然后,在您的管道中,您可以定义一个自定义类,它可以选择一组特性,例如:

代码语言:javascript
复制
class VarSelect(BaseEstimator, TransformerMixin):
    def __init__(self, keys):
        self.keys = keys
    def fit(self, x, y=None):
        return self
    def transform(self, df):
        return df[self.keys].values

然后,您将需要一个适合模型的简单类,然后将其转换为提供预测(需要将模型堆叠在一起)。类似的东西应该可以工作(取决于您的问题是回归还是分类):

代码语言:javascript
复制
class ModelClassTransformer(BaseEstimator, TransformerMixin):
    def __init__(self, model):
        self.model = model
    def fit(self, *args, **kwargs):
        self.model.fit(*args, **kwargs)
        return self
    def transform(self, X, **transform_params):
        return DataFrame(self.model.predict_proba(X))

class ModelRegTransformer(BaseEstimator, TransformerMixin):
    def __init__(self, model):
        self.model = model
    def fit(self, *args, **kwargs):
        self.model.fit(*args, **kwargs)
        return self
    def transform(self, X, **transform_params):
        return DataFrame(self.model.predict(X))

现在您已经拥有了所有这些东西,您可以创建一个管道,在您的数据集的子集上训练单个模型,然后将它们放在最后的集成模型中。使用一组SVM的示例管道(如您所请求)可能如下所示:

代码语言:javascript
复制
Pipeline([
    ('union', FeatureUnion([
        ('modelA', Pipeline([
            ('var', VarSelect(keys=vars_a)),
            ('scl', StandardScaler(copy=True, with_mean=True, with_std=True)),
            ('svm', ModelRegTransformer(SVC(kernel='rbf')))),
        ])),
        ('modelB', Pipeline([
            ('var', VarSelect(keys=vars_b)),
            ('scl', StandardScaler(copy=True, with_mean=True, with_std=True)),
            ('svm', ModelRegTransformer(SVC(kernel='rbf'))),
        ])),
        ('modelC', Pipeline([
            ('var', VarSelect(keys=vars_c)),
            ('scl', StandardScaler(copy=True, with_mean=True, with_std=True)),
            ('svm', ModelRegTransformer(SVC(kernel='rbf'))),
        ]))
    ])),
    ('scl', StandardScaler(copy=True, with_mean=True, with_std=True)),
    ('svm', SVC(kernel='rbf'))
])
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32934267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档