機器學習的樣本一般都是特徵向量,但是除了特徵向量以外經常有非特徵化的資料,最常見的就是文字
當某個特徵為有限的幾個字串時,可以看成一種結構化資料,處理這種特徵的方法一般是將其轉為獨熱碼的幾個特徵。例如僅能取三個字串的特徵: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特徵的提取 上)
首先必須知道什麼是特徵工程 特徵工程是通過對原始資料的處理和加工,將原始資料屬性通過處理轉換為資料特徵的過程,屬性是資料本身具有的維度,特徵是資料中所呈現出來的某一種重要的特性,通常是通過屬性的計算,組合或轉換得到的。比如主成分分析就是將大量的資料屬性轉換為少數幾個特徵的過程。某種程度而言,好的資料...