機器學習進階 第一節 第二課

      網友投稿 850 2025-03-31

      Scikit-learn 庫


      概述

      安裝

      特征抽取

      sklearn 特征抽取 API

      字典特征抽取

      DictVectorizer 語法

      流程

      文本特征抽取

      CountVectorizer 語法

      流程

      案例

      TF-IDF

      Tf

      Idf

      公式

      TfidfVectorizer 語法

      流程

      概述

      Scikit-learn 庫是 Python 語言的機器學習工具, 包括許多知名的機器學習算法的實現. Scikit-learn 文檔完善, 容易上手, 有豐富的 API, 使其在學術界頗受歡迎. 目前穩定版本 0.23.

      安裝

      創建一個機遇 Python3 的虛擬環境: (可以在你自己已有的虛擬環境中)

      mkvirtualenv -p /user/bin/python3.5 ml3

      1

      然后通過導入命令查看是否可以使用:

      import sklearn

      1

      注: 安裝 scikit-learn 需要 Numpy, pandas 等庫.

      特征抽取

      # 導入包 from sklearn.feature_extraction.text import CountVectorizer # 實例化CountVectorizer() vector = CountVectorizer() # 調用fit_transform輸入并轉換數據 txt = ["life is short, I like Pyhton","life is too long, I dislike python"] res = vector.fit_transform(txt) # 調試輸出 print(vector.get_feature_names()) print(res.toarray()) 輸出結果: ['dislike', 'is', 'life', 'like', 'long', 'pyhton', 'python', 'short', 'too'] [[0 1 1 1 0 1 0 1 0] [1 1 1 0 1 0 1 0 1]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      通過上述代碼, 我們可以得出結論: 特征抽取對文本等數據進行特征值化.

      注: 特征值化是為了計算機更好的去理解數據.

      sklearn 特征抽取 API

      sklearn.feature_extraction

      字典特征抽取

      字典特征抽取: 對字典數據進行特征值化.

      類: sklearn.feature_extraction.DictVectorizer

      DictVectorizer 語法

      DictVectorizer(sparse=True,...)

      1

      DictVectorizer.fit_transform(X)

      X: 字典或包含字典的迭代器

      返回值: 返回 sparse 矩陣

      DicVectorizer.inverse_transform(X)

      X: array 數組或者 sparse 矩陣

      返回值: 轉換之前數據格式

      DictVectorizer.get_future_names()

      返回類別名稱

      DictVectorizer.transform(X)

      按照原先的標準轉換

      流程

      實例化類 DictVectorizer

      調用 fit_transform 方法輸入數據并轉換 (注意返回格式)

      from sklearn.feature_extraction import DictVectorizer def dictvec(): """ 字典數據抽取 :return: None """ # 實例化 dict = DictVectorizer() # 調用fit_transform txt = [{"city":"北京","temperature":100},{"city":"上海","temperature":60},{"city":"深圳","temperature":30}] data = dict.fit_transform(txt) # 調試輸出 print(data) return None if __name__ == "__main__": dictvec() 輸出結果: (0, 1) 1.0 (0, 3) 100.0 (1, 0) 1.0 (1, 3) 60.0 (2, 2) 1.0 (2, 3) 30.0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      設置 sparse=Flase

      # 實例化 dict = DictVectorizer(sparse=False)

      1

      2

      輸出結果:

      [[ 0. 1. 0. 100.] [ 1. 0. 0. 60.] [ 0. 0. 1. 30.]]

      1

      2

      3

      特征抽取:

      from sklearn.feature_extraction import DictVectorizer def dictvec(): """ 字典數據抽取 :return: None """ # 實例化 dict = DictVectorizer() # 調用fit_transform txt = [{"city":"北京","temperature":100},{"city":"上海","temperature":60},{"city":"深圳","temperature":30}] data = dict.fit_transform(txt) # 調試輸出 print(dict.get_feature_names()) print(data) return None if __name__ == "__main__": dictvec() 輸出結果: ['city=上海', 'city=北京', 'city=深圳', 'temperature'] (0, 1) 1.0 (0, 3) 100.0 (1, 0) 1.0 (1, 3) 60.0 (2, 2) 1.0 (2, 3) 30.0

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      文本特征抽取

      文本特征抽取: 對文本數據進行特征值化.

      類: sklearn.feature_extraction.text.CountVectorizer

      CountVectorizer 語法

      CountVectorizer(): 返回詞頻矩陣

      1

      CountVectorizer.fit_transform(X)

      X: 文本或者包含文本字符串的可迭代對象

      返回值: 返回 sparse 矩陣

      CountVectorizer.inverse_reansform(X)

      X: array 數組或者 sparse 矩陣

      返回值: 轉換之前數據格式

      CountVectorizer.get_future_names()

      返回值: 單詞列表

      流程

      實例化類 CountVectorizer

      調用 fit_transform 方法輸入數據并轉換 (注意返回格式)

      注意返回格式, 利用 toarray() 進行 sparse 矩陣轉換 array 數組

      from sklearn.feature_extraction.text import CountVectorizer def countvec(): """ 對文本進行特征值化 :return: None """ # 實例化 cv = CountVectorizer() txt = ["life is short, I like Pyhton", "life is too long, I dislike python"] data = cv.fit_transform(txt) # 調試輸出 print(cv.get_feature_names()) print(data.toarray()) return None if __name__ == "__main__": countvec() 輸出結果: ['dislike', 'is', 'life', 'like', 'long', 'pyhton', 'python', 'short', 'too'] [[0 1 1 1 0 1 0 1 0] [1 1 1 0 1 0 1 0 1]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      案例

      對三段話進行特征值化

      今天很殘酷, 明天更殘酷, 后天很美好. 但絕大部分是死在明天晚上, 所以每個人不要放棄今天

      我們看到的從很遠星系來的光是在幾百萬年之前發出去的. 這樣當我們看到宇宙時, 我們是在看它的過去

      如果只用一種方式了解某樣事物, 你就不會真正了解它. 了解事物真正含義的秘密取決于如何將其我們所了解的事物相聯系

      from sklearn.feature_extraction.text import CountVectorizer import jieba def cutword(): text1 = "今天很殘酷, 明天更殘酷, 后天很美好. 但絕大部分是死在明天晚上, 所以每個人不要放棄今天." text2 = "我們看到的從很遠星系來的光是在幾百萬年之前發出去的. 這樣當我們看到宇宙時, 我們是在看它的過去." text3 = "如果只用一種方式了解某樣事物, 你就不會真正了解它. 了解事物真正含義的秘密取決于如何將其我們所了解的事物相聯系." con1 = jieba.cut(text1) con2 = jieba.cut(text2) con3 = jieba.cut(text3) # 轉換成列表 content1 = list(con1) content2 = list(con2) content3 = list(con3) # 把列表轉換成字符串 c1 = " ".join(content1) c2 = " ".join(content2) c3 = " ".join(content3) return c1, c2, c3 def hanzivec(): """ 中文特征值化 :return: None """ # 分詞 c1, c2, c3 = cutword() # 實例化 cv = CountVectorizer() txt = [c1, c2, c3] data = cv.fit_transform(txt) # 調試輸出 print(cv.get_feature_names()) print(data.toarray()) return None if __name__ == "__main__": hanzivec() 輸出結果: ['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發出', '取決于', '只用', '后天', '含義', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕大部分', '美好', '聯系', '過去', '這樣'] [[0 0 1 0 0 0 2 0 0 0 0 0 1 0 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0] [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1] [1 1 0 0 4 3 0 0 0 0 1 1 0 1 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      TF-IDF

      TF-IDF 的主要思想是: 如果某個詞或短語在一篇文章中出現的概率高, 并且在其他文章中很少出現, 則認為此次或者短語具有很好的類別區分能力, 適合用來分類.

      TF-IDF 作用: 用以評估一詞對于一個文件集或一個語料庫中的其中一份文件的重要程度.

      類: sklearn.feature_extraction.text.TfidfVectorizer

      Tf

      Tf: term frequency (詞的頻率)

      Idf

      Idf: inverse document frequency (逆文檔頻率)

      公式

      log(總文檔數量 / 該詞出現的文檔數量)

      TfidfVectorizer 語法

      TfidfVectorizer(stop_word=None,...) 返回詞的權重矩陣

      1

      TfidVectorizer.fit_transform(X)

      X: 文本返回或者包含文本字符串的可迭代對象

      返回值: 返回 spare 矩陣

      TfidVectorizer.inverse_transfrom(X)

      X: array 數組或者 sparse 矩陣

      返回值: 裝換之前數據格式

      TfidfVectorizer.get_feature_names()

      返回值: 單詞列表

      流程

      為什么需要 TfidVectorizer ?

      分類機器學習算法的重要依據

      代碼展示:

      from sklearn.feature_extraction.text import TfidfVectorizer import jieba def cutword(): text1 = "今天很殘酷, 明天更殘酷, 后天很美好. 但絕大部分是死在明天晚上, 所以每個人不要放棄今天." text2 = "我們看到的從很遠星系來的光是在幾百萬年之前發出去的. 這樣當我們看到宇宙時, 我們是在看它的過去." text3 = "如果只用一種方式了解某樣事物, 你就不會真正了解它. 了解事物真正含義的秘密取決于如何將其我們所了解的事物相聯系." con1 = jieba.cut(text1) con2 = jieba.cut(text2) con3 = jieba.cut(text3) # 轉換成列表 content1 = list(con1) content2 = list(con2) content3 = list(con3) # 把列表轉換成字符串 c1 = " ".join(content1) c2 = " ".join(content2) c3 = " ".join(content3) return c1, c2, c3 def hanzivec(): """ 中文特征值化 :return: None """ # 分詞 c1, c2, c3 = cutword() # 實例化 tv = TfidfVectorizer() txt = [c1, c2, c3] data = tv.fit_transform(txt) # 調試輸出 print(tv.get_feature_names()) print(data.toarray()) return None if __name__ == "__main__": hanzivec() 輸出結果: ['一種', '不會', '不要', '之前', '了解', '事物', '今天', '光是在', '幾百萬年', '發出', '取決于', '只用', '后天', '含義', '如何', '如果', '宇宙', '我們', '所以', '放棄', '方式', '明天', '星系', '晚上', '某樣', '殘酷', '每個', '看到', '真正', '秘密', '絕大部分', '美好', '聯系', '過去', '這樣'] [[0. 0. 0.2236068 0. 0. 0. 0.4472136 0. 0. 0. 0. 0. 0.2236068 0. 0. 0. 0. 0. 0.2236068 0.2236068 0. 0.4472136 0. 0.2236068 0. 0.4472136 0.2236068 0. 0. 0. 0.2236068 0.2236068 0. 0. 0. ] [0. 0. 0. 0.2410822 0. 0. 0. 0.2410822 0.2410822 0.2410822 0. 0. 0. 0. 0. 0. 0.2410822 0.55004769 0. 0. 0. 0. 0.2410822 0. 0. 0. 0. 0.48216441 0. 0. 0. 0. 0. 0.2410822 0.2410822 ] [0.15698297 0.15698297 0. 0. 0.62793188 0.47094891 0. 0. 0. 0. 0.15698297 0.15698297 0. 0.15698297 0.15698297 0.15698297 0. 0.1193896 0. 0. 0.15698297 0. 0. 0. 0.15698297 0. 0. 0. 0.31396594 0.15698297 0. 0. 0.15698297 0. 0. ]]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      機器學習進階 第一節 第二課

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:北京的apaas(北京的春節課文)
      下一篇:八十五、store數據,actionCreators 與 constants 的拆分和redux-immutable的使用
      相關文章
      亚洲色欲久久久久综合网| 久久亚洲中文字幕精品有坂深雪| 中文字幕亚洲精品资源网| 狠狠亚洲婷婷综合色香五月排名| 亚洲AV成人无码网天堂| 亚洲视屏在线观看| 自怕偷自怕亚洲精品| 亚洲成人在线电影| 亚洲性天天干天天摸| 亚洲精品高清国产一久久| 亚洲国产成人久久综合碰碰动漫3d| 国产精品亚洲A∨天堂不卡 | 亚洲熟妇AV乱码在线观看| 亚洲国产成人综合| 亚洲国产av美女网站| 亚洲乱码一区av春药高潮| 亚洲av永久无码嘿嘿嘿| 亚洲激情视频图片| 亚洲日本va一区二区三区| 亚洲乱码中文字幕在线| 亚洲精品日韩一区二区小说| 亚洲AV综合色区无码一二三区 | 色偷偷噜噜噜亚洲男人| 蜜芽亚洲av无码一区二区三区| 亚洲av无一区二区三区| www亚洲精品久久久乳| 亚洲AV无码一区二三区| 中文字幕亚洲专区| 国产精品国产亚洲精品看不卡| 亚洲AV无码乱码在线观看裸奔 | 91麻豆精品国产自产在线观看亚洲| a级亚洲片精品久久久久久久 | 亚洲第一福利网站在线观看| 亚洲A丁香五香天堂网| 久久亚洲中文字幕精品一区| 久久精品国产精品亚洲人人 | 亚洲人成影院在线高清| 最新亚洲精品国偷自产在线| 亚洲av日韩综合一区久热| 亚洲成人影院在线观看| 亚洲精品卡2卡3卡4卡5卡区|