2015-08-30 54 views
2

我想使用自己的算法從訓練數據中提取特徵,然後使用CountVectorizescikit-learn中進行擬合和變換。如何使用自己的算法提取scikit-learn中的特徵(文本特徵提取)

目前我做的:

from sklearn.feature_extraction.text import CountVectorizer 
cvect_obj = CountVectorizer() 
vects = cvect_obj.fit_transform(traning_data) 

fit_transform(traning_data)自動提取特徵並進行轉換,但我想用我自己的算法來提取特徵。

+0

您能否詳細說說您希望用來提取功能的算法以及您希望使用這些功能的方式?您希望完成的機器學習任務是什麼? – duhaime

+0

@duhaime目前我正在審查分類正面或負面。使用單元模型,我在測試數據上獲得了77%的準確性。但是我想在提供pos標籤後僅提取雙格語短語和單詞情感詞,並使用提取的短語和情感詞作爲特徵。 – iammehrabalam

+0

也許你應該生成一些稀疏矩陣然後使用它。 – tumbleweed

回答

1

實際上,它是不可能直接使用它的。作爲Scikit-learn的規則,它們只添加完善的算法。根據經驗,至少3年以上的出版物,200多次引用和廣泛的使用和有用性。對於廣泛使用的方法提供明確改進(例如增強的數據結構或有效的近似)的技術也將被考慮列入。不過,您的實施並不需要在scikit-learn中與scikit-learn工具一起使用,不過。以scikit-learn兼容的方式實現您最喜歡的算法,將其上傳到github,它將在相關項目下列出。

1

由於您無法更改sklearn核心,因此您始終可以保留自己的特徵提取。所有你必須確定的是,sklearn中的大部分數字模塊都處理稀疏矩陣,如scipy.sparse.csr_matrix。

所有你需要的是一個方法或模塊,它以原始形式(比如一個句子)獲取數據,並將其轉換爲稀疏矩陣。基本骨架我會寫會:

class MyFeatureExtractor: 
    def __init__(): 
    dictionary = {} 
    vocab = [] 

    def fit(list of sentences): 
    # learn the words after basic nlp pipeline 
    # build dictionary/map between word and feature index 

    def transform(new sentences): 
    # for each sentence, build a sparse vector of length equal to 
    # your vocabulary, or size of dictionary 
    # return the matrix 

現在你可以使用你的FeatureExtractor改造就像普通sklearn模塊。