日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习】特征提取

發布時間:2024/9/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】特征提取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

特征提取

目標

  • 應用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方法輸入數據并轉換(注意返回格式)

def dict_demo():"""字典特征值提取:return:"""data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]# 1. 實例化一個轉換器 默認返回 sparse矩陣 將非0值按位置表示出來 以節省內存 提高加載效率transfer = DictVectorizer(sparse=False)# 應用場景:數據集中類別特征值較多;將數據集的特征-》字典類型;DictVectorizer轉換;本身拿到的就是字典# 2. 調用fit_transform()data_new = transfer.fit_transform(data)print("data_new:\n", data_new)print("特征名字:\n", transfer.get_feature_names())return None

注意觀察沒有加上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_demo():"""文本特征值抽取:return:"""data = ["life is short, i like python", "life is too long i dislike python"]# 1、實例化一個轉換器類transfer = CountVectorizer()# 演示停用詞# transfer = CountVectorizer(stop_words=["is", "too"])data_new = transfer.fit_transform(data)print("data_new:\n", data_new.toarray())print("特征名字:\n", transfer.get_feature_names())# 2、調用fit_transformreturn None

問題:如果我們將數據替換成中文?

發現英文默認是以空格分開的。其實就達到了一個分詞的效果,所以我們要對中文進行分詞處理

下面代碼需要提前把文本做好空格間隙

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的輸入值

def count_word(text):"""進行中文分詞 我愛北京天安門-》我 愛 北京 天安門:param text::return:"""a = " ".join(list(jieba.cut(text)))print(a)return adef count_chinese_demo2():"""中文文本特征值抽取 自動分詞:return:"""data = ["在過去兩個月里,我和60多位小伙伴進行了1對1的一小時溝通;","TA絕大多數是想要嘗試副業變現的朋友。","從一線城市到三線城市,從寶媽到職場人,從職場到體制內。"]# 1、實例化一個轉換器類transfer = CountVectorizer(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())# 2、調用fit_transformreturn None

問題:該如何處理某個詞或短語在多篇文章中出現的次數高這種情況?

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 None

Tf-idf的重要性

分類機器學習算法進行文章分類中前期數據處理方式

總結

以上是生活随笔為你收集整理的【机器学习】特征提取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。