我有三个不同的功能集,为给定的一组音频文件。它们中的每一个都是作为维数组存储的特征矩阵,如下所示:
使用不同的技术从音频文件中提取这些特征中的每一个。
我想做的是把他们一起训练成一个分类器。(使用管道)。我在链接2中读过这、这和博客链接,但是它涉及不同的提取方法,然后使用分类器。由于我已经提取了上面提到的数据,所以我想知道下一步要做什么,即如何将它们组合成一个管道。
我知道这里不能要求直接的代码--我只想要指针如何组合数据(可能使用管道),这些数据是从不同的方法中提取出来的,例如使用SVM对它们进行分类。
发布于 2015-10-04 18:27:30
假设您想要处理独立模型中的一组特性,然后将它们的结果集合在一起,我将在下面给出一个答案。但是,如果您想简单地使用单个模型中所有3种特征提取技术中的特性,那么只需将它们一起添加到单个数据集中,并将其用于培训。
我认为在Pipeline中做到这一点的最简单的方法是创建一个(978*965) pandas DataFrame,它包含所有三种技术的特性。然后,在您的管道中,您可以定义一个自定义类,它可以选择一组特性,例如:
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然后,您将需要一个适合模型的简单类,然后将其转换为提供预测(需要将模型堆叠在一起)。类似的东西应该可以工作(取决于您的问题是回归还是分类):
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的示例管道(如您所请求)可能如下所示:
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'))
])https://stackoverflow.com/questions/32934267
复制相似问题