【机器学习】特征提取
特征提取
目標
-
應用DictVectorizer實現對類別特征進行數值化、離散化
-
應用CountVectorizer實現對文本特征進行數值化
-
應用TfidfVectorizer實現對文本特征進行數值化
-
說出兩種文本特征提取的方式區別
定義
特征提取是將任意數據(如文本或圖像)轉換為可用于機器學習的數字特征
注:特征值化是為了計算機更好的去理解數據
-
字典特征提取(特征離散化)
-
文本特征提取
-
圖像特征提取(深度學習)
特征提取API
sklearn.feature_extraction
字典特征提取
作用:對字典數據進行特征值化
- sklearn.feature_extraction.DictVectorizer(sparse=True,…)
- DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器,返回值:返回sparse矩陣
- DictVectorizer.inverse_transform(X) X:array數組或者sparse矩陣 返回值:轉換之前數據格式
- DictVectorizer.get_feature_names() 返回類別名稱
應用
對以下數據進行特征提取
data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]流程分析
-
實例化類DictVectorizer
-
調用fit_transform方法輸入數據并轉換(注意返回格式)
注意觀察沒有加上sparse=False參數的結果
這個結果并不是想要看到的,所以加上參數,得到想要的結果,在這里把這個處理數據的技巧用專業的稱呼"one-hot"編碼。
總結
對于特征當中存在類別信息的都會做one-hot編碼處理
文本特征提取
作用:對文本數據進行特征值化
-
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
- 返回詞頻矩陣
-
CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代對象 返回值:返回sparse矩陣
-
CountVectorizer.inverse_transform(X) X:array數組或者sparse矩陣 返回值:轉換之前數據格
-
CountVectorizer.get_feature_names() 返回值:單詞列表
-
sklearn.feature_extraction.text.TfidfVectorizer
應用
對以下數據進行特征提取
data = ["life is short, i like python", "life is too long i dislike python"]流程分析
-
實例化類CountVectorizer
-
調用fit_transform方法輸入數據并轉換 (注意返回格式,利用toarray()進行sparse矩陣轉換array數組)
問題:如果我們將數據替換成中文?
發現英文默認是以空格分開的。其實就達到了一個分詞的效果,所以我們要對中文進行分詞處理
下面代碼需要提前把文本做好空格間隙
def count_chinese_demo():"""中文文本特征值抽取:return:"""data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]data2 = ["我愛北京天安門", "天安門上太陽升"]# 1、實例化一個轉換器類transfer = CountVectorizer()data_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())print("特征名字:\n", transfer.get_feature_names())# 2、調用fit_transformreturn None更好的處理方式見下方案
jieba分詞處理
- jieba.cut()
- 返回詞語組成的生成器
需要安裝下jieba庫
pip install jieba
案例分析
data = ["在過去兩個月里,我和60多位小伙伴進行了1對1的一小時溝通;","TA絕大多數是想要嘗試副業變現的朋友。","從一線城市到三線城市,從寶媽到職場人,從職場到體制內。"]分析
-
準備句子,利用jieba.cut進行分詞
-
實例化CountVectorizer
-
將分詞結果變成字符串當作fit_transform的輸入值
問題:該如何處理某個詞或短語在多篇文章中出現的次數高這種情況?
Tf-idf文本特征提取
TF-IDF的主要思想是:如果某個詞或短語在一篇文章中出現的概率高,并且在其他文章中很少出現,則認為此詞或者短語具有很好的類別區分能力,適合用來分類。
TF-IDF作用:用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。
公式
詞頻(term frequency,tf)指的是某一個給定的詞語在該文件中出現的頻率
逆向文檔頻率(inverse document frequency,idf)是一個詞語普遍重要性的度量。某一特定詞語的idf,可以由總文件數目除以包含該詞語之
文件的數目,再將得到的商取以10為底的對數得到
最終得出結果可以理解為重要程度。
注:假如一篇文件的總詞語數是100個,而詞語"非常"出現了5次,那么"非常"一詞在該文件中的詞頻就是5/100=0.05。而計算文件頻率(IDF)的方法是以文件集的文件總數,除以出現"非常"一詞的文件數。所以,如果"非常"一詞在1,000份文件出現過,而文件總數是10,000,000份的話,其逆向文件頻率就是lg(10,000,000 / 1,0000)=3。最后"非常"對于這篇文檔的tf-idf的分數為0.05 * 3=0.15
案例
def tfidf_demo():"""用TF-IDF方法進行文本特征值抽取:return:"""data = ["在過去兩個月里,我和60多位小伙伴進行了1對1的一小時溝通;","TA絕大多數是想要嘗試副業變現的朋友。","從一線城市到三線城市,從寶媽到職場人,從職場到體制內。"]transfer = TfidfVectorizer(stop_words=["從寶媽"])data_new = transfer.fit_transform(count_word(item) for item in data)print("data_new:\n", data_new.toarray())print("特征名字:\n", transfer.get_feature_names())return NoneTf-idf的重要性
分類機器學習算法進行文章分類中前期數據處理方式
總結
以上是生活随笔為你收集整理的【机器学习】特征提取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】机器学习概述
- 下一篇: Mac触控板设置