基於sklearn的文字特徵抽取

2021-09-04 10:51:54 字數 2253 閱讀 4094

機器學習的樣本一般都是特徵向量,但是除了特徵向量以外經常有非特徵化的資料,最常見的就是文字

當某個特徵為有限的幾個字串時,可以看成一種結構化資料,處理這種特徵的方法一般是將其轉為獨熱碼的幾個特徵。例如僅能取三個字串的特徵:a,b,c,可以將其轉換為001,010,100的三個特徵。

當特徵僅是一系列字串時,可以使用詞袋法處理,這種方法不考慮詞彙順序,僅考慮出現的頻率

對於經常出現的無意義詞彙,如the和a等,可以將其指定為停用詞消除其對於結果的干擾

from sklearn.datasets import fetch_20newsgroups

news = fetch_20newsgroups(subset='all')

from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33)

print(len(x_train),len(x_test))

'''特徵提取'''

from sklearn.feature_extraction.text import countvectorizer

from sklearn.feature_extraction.text import tfidfvectorizer

# count vertorizer

c_vec = countvectorizer()

x_count_train = c_vec.fit_transform(x_train)

x_count_test = c_vec.transform(x_test)

# countvctorizer + 去停用詞

c_vec_s = countvectorizer(analyzer='word',stop_words='english')

x_count_stop_train = c_vec_s.fit_transform(x_train)

x_count_stop_test = c_vec_s.transform(x_test)

# tfidf vectorizer

t_vec = tfidfvectorizer()

x_tfidf_train = t_vec.fit_transform(x_train)

x_tfidf_test = t_vec.transform(x_test)

# #tfidf vectorizer + 去停用詞

t_vec_s = tfidfvectorizer(analyzer='word',stop_words='english')

x_tfidf_stop_train = t_vec_s.fit_transform(x_train)

x_tfidf_stop_test = t_vec_s.transform(x_test)

'''模型訓練'''

from sklearn.*****_bayes import multinomialnb

# count vectorizer

nb_c = multinomialnb()

nb_c.fit(x_count_train,y_train)

nb_c.score(x_count_test,y_test)

# 0.83977079796264853

# count vectorizer + 去除停用詞

nb_cs = multinomialnb()

nb_cs.fit(x_count_stop_train,y_train)

nb_cs.score(x_count_stop_test,y_test)

# 0.86375212224108655

# tfidf vectorizer

nb_t = multinomialnb()

nb_t.fit(x_tfidf_train,y_train)

nb_t.score(x_tfidf_test,y_test)

# 0.84634974533106966

# tfidf vectorizer+去除停用詞

nb_ts = multinomialnb()

nb_ts.fit(x_tfidf_stop_train,y_train)

nb_ts.score(x_tfidf_stop_test,y_test)

# 0.88264006791171479

基於sklearn的特徵篩選

樣本中的有些特徵是所謂的 優秀特徵 使用這些特徵可以顯著的提高泛化能力。而有些特徵在樣本類別區分上並不明顯,在訓練中引入這些特徵會導致算力的浪費 另外有些特徵對樣本的分類有反作用,引入這些特徵反而會導致泛化能力下降 與pca 主成分分析 不同,特徵篩選不修改特徵值,而是尋找對模型效能提公升較大的盡量...

基於sklearn的特徵選擇方法

在資料探勘工作中,通常處理的是乙個包含大量特徵且含義未知的資料集,並基於該資料集挖掘到有用的特徵。那麼這裡面一般是四個步驟 特徵工程 特徵選擇 模型構造 模型融合。特徵工程主要是清洗特徵 刪除無用特徵和構造新特徵,經過特徵工程這個過程我們可能會得到大量的特徵 而特徵選擇的目的就是從這大量的特徵中挑選...

sklearn特徵的提取 上)

首先必須知道什麼是特徵工程 特徵工程是通過對原始資料的處理和加工,將原始資料屬性通過處理轉換為資料特徵的過程,屬性是資料本身具有的維度,特徵是資料中所呈現出來的某一種重要的特性,通常是通過屬性的計算,組合或轉換得到的。比如主成分分析就是將大量的資料屬性轉換為少數幾個特徵的過程。某種程度而言,好的資料...