No.11 特徵工程之特徵抽取
【導讀:當今人類即將或者已然了進入智能時代,這是·情報通·人工智慧科普系列第[11]篇文章,歡迎閱讀和收藏】
1 基本概念
特徵工程是將原始數據轉換為更好地代表預測模型的潛在問題的特徵的過程,從而提高了對未知數據的模型準確性。
特徵抽取是將任意數據(如文本或圖像)轉換為可用於機器學習的數字特徵,具體有如下幾個方面:
1、 字典特徵提取(特徵離散化)
2、 文本特徵提取
3、 圖像特徵提取
2 術語解釋
特徵:某一類對象區別於其他類對象的相應特點或特性。特徵是通過測量或處理能夠抽取的數據。
特徵類型:包括邊緣、角、區域、脊。邊緣時組成兩個圖像區域之間邊界的像素。角是圖像中點似的特徵,在具備它有兩維結構。區域是描寫一個圖像中的一個區域性的結構。
線性特徵提取演算法:包括 PCA (主成分分析)、 LDA (線性判別分析)、 ICA (獨立成分分析)。PCA 的思想是尋找表示數據分布的最優子空間(降維、可以去相關) ;LDA 的思想 是需找可分性判據最大的子空間;ICA 的思想是將原始數據降維並提取出相互獨立的屬性。
非線性特徵提取演算法:包括 Kernel PCA 、 Kernel FDA 、 Manifold Learning 流形學習。
3 詳細說明
特徵抽取 API:sklearn.feature_extraction
3.1 字典特徵抽取
對字典數據進行特徵值化將其轉換為 One-hot 編碼。
API 介紹
sklearn.feature_extraction.DictVectorizer(sparse=True,…)
* DictVectorizer.fit_transform(X) X:?字典或者包含字典的迭代器返回值:返回?sparse?(稀疏)矩陣
* DictVectorizer.inverse_transform(X) X:array?數組或者?sparse?矩陣 返回值?:?轉換之前數據格式
* DictVectorizer.get_feature_names()?返回類別名稱
流程:
1、 實例化 DictVectorizer
2、 調用 fit_transform 方法輸入數據並轉換
編程案例:
from sklearn.feature_extraction import DictVectorizer
def dictvec():
"""?字典數據抽取?"""
#?實例化
dict=DictVectorizer(sparse=False)
data=dict.fit_transform([{"city":"?北京?","temperature":100},{"city":"?上海?","temperature":80},{"city":"?廣州?","temperature":70}])
#?返回類別名稱
name=dict.get_feature_names()
print(name)
print(data)
if __name__ == "__main__":
dictvec()
3.2 文本特徵抽取
對文本數據進行特徵值化。統計所有文章中的所有的詞,重複的詞只看做一次。對每篇文章,在詞的列表裡面進行統計每個詞出現的次數。英文文章可以直接進行統計,中文的文章要進行分詞才能進行統計。
API 介紹
* sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
*?返回詞頻矩陣
* CountVectorizer.fit_transform(X) X:?文本或者包含文本字元串的可迭代對象 返回值:返回?sparse?矩陣
* CountVectorizer.inverse_transform(X) X:array?數組或者?sparse?矩陣 返回值?:?轉換之前數據格
* CountVectorizer.get_feature_names()?返回值?:?單詞列表
流程:
1、 實例化類 CountVectorizer
2、 調用 fit_transform 方法輸入數據並轉換
編程案例:
from sklearn.feature_extraction.text import CountVectorizer
def countvec():
"""
對文本進行特徵化
:return:None
"""
#?實例化
cv=CountVectorizer()
data=cv.fit_transform(["life is short,i like python","life is too long,i dislike python"])
print(cv.get_feature_names())
print(data.toarray())
if __name__ == "__main__":
countvec()
3.3 圖像特徵提取
使用計算機提取圖像信息,決定每個圖像的點是否屬於一個圖像特徵。特徵提取的結果是把圖像上的點分為不同的子集,這些子集往往屬於孤立的點、連續的曲線或者連續的區域。
常用的圖像特徵有顏色特徵、紋理特徵、形狀特徵、空間關係特徵。
以顏色特徵提取為例介紹。
顏色特徵描述了圖像或圖像區域所對應的景物的表面性質。一般顏色特徵是基於像素點的特徵,此時所有屬於圖像或圖像區域的像素都有各自貢獻。由於顏色對圖像或圖像區域的方向、大小等變化不敏感,所以顏色特徵不能很好地捕捉圖像中對象的局部特徵。
常用的顏色特徵提取常用的特徵提取與匹配方法
( 1 ) 顏色直方圖
其優點在於:它能簡單描述一幅圖像中顏色的全局分布,即不同色彩在整幅圖像中所佔的比例,特別適用於描述那些難以自動分割的圖像和不需要考慮物體空間位置的圖像。其缺點在於:它無法描述圖像中顏色的局部分布及每種色彩所處的空間位置,即無法描述圖像中的某一具體的對象或物體。
最常用的顏色空間:RGB 顏色空間、 HSV 顏色空間。
顏色直方圖特徵匹配方法:直方圖相交法、距離法、中心距法、參考顏色表法、累加顏色直方圖法。
( 2 ) 顏色集
顏色直方圖法是一種全局顏色特徵提取與匹配方法,無法區分局部顏色信息。顏色集是對顏色直方圖的一種近似首先將圖像從 RGB 顏色空間轉化成視覺均衡的顏色空間(如 HSV 空間),並將顏色空間量化成若干個柄。然後,用色彩自動分割技術將圖像分為若干區域,每個區域用量化顏色空間的某個顏色分量來索引,從而將圖像表達為一個二進位的顏色索引集。在圖像匹配中,比較不同圖像顏色集之間的距離和色彩區域的空間關係
( 3 ) 顏色矩
這種方法的數學基礎在於:圖像中任何的顏色分布均可以用它的矩來表示。此外,由於顏色分布信息主要集中在低階矩中,因此,僅採用顏色的一階矩( mean )、二階矩( variance )和三階矩( skewness )就足以表達圖像的顏色分布。
( 4 ) 顏色聚合向量
其核心思想是:將屬於直方圖每一個柄的像素分成兩部分,如果該柄內的某些像素所佔據的連續區域的面積大於給定的閾值,則該區域內的像素作為聚合像素,否則作為非聚合像素。