组合从多个模型中提取的特征集
Combining feature sets extracted from multiple models
我使用 Sklearn 和 Caffe 从大量训练和测试图像中提取了特征。为了执行特征提取,我使用了来自 Caffe Model Zoo 的 3 个不同的预训练卷积神经网络。
使用这 3 组特征中的任何一组,我可以训练一个 SVM,它对测试数据的准确率约为 80%。但是,利用所有 3 组功能的最佳方式是什么?
我试过简单地将 3 个单独的 SVM 的结果平均在一起(平均每个标签的概率预测),但它没有比单个模型有任何改进。
将特征集连接成一个大集合并将其用于训练 SVM(或其他)是否有帮助?
注意数据集是多类多标签的。谢谢。
这不是组合特征的好方法。
在机器学习中,我们使用集成技术。集成技术:bagging、boosting、stacking 和 hierarchy。
根据我的经验,我喜欢使用 boosting 或 stacking。
Boosting 是一种贪婪的学习策略,它不断改变数据的分布以及使用的特征来训练每个基学习器,因此即将到来的基学习器将专注于困难的样本。
阅读有关 viola jones adaboost 分类器的信息。
如果您有严重的数据不平衡问题,请阅读 SMOTEBoost 算法
我已经尝试了以下解决方案,但是当仅使用 TFIDF + BOW 功能时,它给出了精度:0.899029126214
当我向它们添加词汇特征时,准确性:0.7747572815533981
我使用 featu运行ion 联合相同的特征矩阵(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'))
然后我有 运行 逻辑回归
我使用 Sklearn 和 Caffe 从大量训练和测试图像中提取了特征。为了执行特征提取,我使用了来自 Caffe Model Zoo 的 3 个不同的预训练卷积神经网络。
使用这 3 组特征中的任何一组,我可以训练一个 SVM,它对测试数据的准确率约为 80%。但是,利用所有 3 组功能的最佳方式是什么?
我试过简单地将 3 个单独的 SVM 的结果平均在一起(平均每个标签的概率预测),但它没有比单个模型有任何改进。
将特征集连接成一个大集合并将其用于训练 SVM(或其他)是否有帮助?
注意数据集是多类多标签的。谢谢。
这不是组合特征的好方法。 在机器学习中,我们使用集成技术。集成技术:bagging、boosting、stacking 和 hierarchy。 根据我的经验,我喜欢使用 boosting 或 stacking。 Boosting 是一种贪婪的学习策略,它不断改变数据的分布以及使用的特征来训练每个基学习器,因此即将到来的基学习器将专注于困难的样本。 阅读有关 viola jones adaboost 分类器的信息。 如果您有严重的数据不平衡问题,请阅读 SMOTEBoost 算法
我已经尝试了以下解决方案,但是当仅使用 TFIDF + BOW 功能时,它给出了精度:0.899029126214 当我向它们添加词汇特征时,准确性:0.7747572815533981 我使用 featu运行ion 联合相同的特征矩阵(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'))
然后我有 运行 逻辑回归