组合从多个模型中提取的特征集

时间:2016-04-05 10:04:40

标签: machine-learning computer-vision svm feature-extraction conv-neural-network

我使用Sklearn和Caffe从大量训练和测试图像中提取了特征。为了执行特征提取,我使用了来自Caffe Model Zoo的3个不同的预训练网络。

使用3组功能中的任何一组,我可以训练SVM,其对测试数据的准确率约为80%。但是,利用所有3组功能的最佳方法是什么?

我尝试简单地将3个独立SVM的结果平均在一起(平均每个标签的概率预测),但它没有比单个模型产生任何改进。

将功能集连接成一个大集合并将其用于训练SVM(或其他)会有帮助吗?

请注意,数据集是多类多标签。谢谢。

2 个答案:

答案 0 :(得分:1)

这不是组合功能的好方法。 在机器学习中,我们使用集合技术。合奏技术:装袋,提升,堆叠和层次结构。 根据我的经验,我喜欢使用增强或堆叠。 Boosting是一种贪婪的学习策略,它不断改变数据的分布以及用于训练每个基础学习者的使用特征,以便即将到来的基础学习者将专注于困难的样本。 阅读有关中提琴琼斯adaboost分类器的信息。 如果您有严重的数据不平衡问题,请阅读有关SMOTEBoost算法的信息

答案 1 :(得分:0)

我尝试了以下解决方案,但是仅使用TFIDF + BOW功能时,它可以提供准确性:0.899029126214 当我向他们添加词汇功能时,精度为:0.7747572815533981 我已经使用特征同盟来统一相同的特征矩阵(TFIDF + bow),然后我使用h.stack来堆叠featureunion.vector +词法向量,其代码如下:

# average number of words per sentence

    fvs_lexical[e, 0] = words_per_sentence.mean()
    # sentence length variation
    fvs_lexical[e, 1] = words_per_sentence.std()
    # Lexical diversity
    fvs_lexical[e, 2] = len(vocab) / float(len(words))
# apply whitening to decorrelate the features
fvs_lexical = whiten(fvs_lexical)
#bag of wrods features
bow_vectorizer = CountVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english') 
#tfidf 
tfidf_vectorizer = TfidfVectorizer(max_df=0.90, min_df=2, max_features=1000, stop_words='english') 
#vectorizer and fitting for the unified features 
vectorizer = FeatureUnion([  ("baw", bow_vectorizer),("tfidf", tfidf_vectorizer)
fvs_lexical_vector = CountVectorizer(fvs_lexical)
x1 =vectorizer.fit_transform (train['text'].values.astype('U'))
x2 =fvs_lexical_vector.fit_transform (train['text'].values.astype('U'))
x= scipy.sparse.hstack((x2,x3),format='csr')
y = np.asarray(train['label'].values.astype('U')) 

然后我进行了逻辑回归