小白機器學習實用筆記


打算利用空餘時間學習python機器學習,通過寫文章的方式來記錄學習成果。持續更新中。。。。。

一.什麼是機器學習

機器學習是一種數據科學技術,它幫助計算機從現有數據中學習,從而預測未來的行爲、結果和趨勢

機器學習項目流程

1.根據原始數據明確問題,該做什麼
2.特徵工程
3找到合適算法,進行訓練預測
4模型的評估,判定效果


特徵工程三大步驟:特徵抽取、預處理、降維

1.特徵抽取:將文字、圖像等轉化爲數字
2.預處理:將數字轉化爲格式統一、符合規範的數值,並且減少特殊值
3.降維:進行數據的篩選,取出最有代表性的數據特徵

數據類型

· 散 型 數 據 : 由 記 錄 不 同 類 別 個 體 的 數 目 所 得 到 的 數 據 , 又 稱 計 數 數 據 , 所 有 這 些 數 據 全 部 都 是 整 數 , 而 且 不 能 再 細 分 , 也 不 能 進 一 步 提 高 他 們 的 精 確 度 。
· 連 續 型 數 據 : 變 量 可 以 在 某 個 範 圍 內 取 任 一 數 , 即 變 量 的 取 值 可 以 是 連 續 的 , 如 , 長 度 、 時 間 、 質 量 值 等 , 這 類 整 數 通 常 是 非 整 數 , 含 有 小 數 部 分 。

數據集

數據集的組成爲 特徵值+目標值
特徵值就是已有數據,目標值就是要預測(分類)的目標

監督學習與無監督學習

在這裏插入圖片描述
監督學習:有目標值+特徵值(特徵值爲已有數據,目標值爲預測數據)
無監督學習:沒有目標值,只有特徵值
分類:目標值爲離散型,分類最基本是二分類。
迴歸:目標值爲連續性



二.用sklearn對特徵進行提取(特徵抽取)

scikit-learn 是基於 Python 語言的機器學習工具

簡單高效的數據挖掘和數據分析工具

1: 字典的文字特徵提取

  • 調用:from sklearn.feature_extraction import DictVectorizer
  • 作用:能夠對字典進行特徵的提取
    在這裏插入圖片描述
  • 代碼實現
    dic=DictVectorizer()
    data=dic.fit_transform([{
   
    'city':'北京','temperature':100},{
   
    'city':'上海','temperature':60},{
   
    'city':'深圳','temperature':30}])
    print(data)

輸出: 在這裏插入圖片描述

這是one-hot方式編碼的sparse矩陣,有節約內存的優點
可以通過調整參數sparse=False來輸出數組
在這裏插入圖片描述

2:count方式提取文字特徵

  • 調用:from sklearn.feature_extraction.text import CountVectorizer
  • 作用:對句子或者段落進 行特徵提取,能夠對目標的詞語出現次數記錄,作爲句子的特點
    注意:
    1.英文不需要分段,因爲每個單詞之間有空格
    2.中文要用jieba庫,將漢字進行分段,對每個詞語都會進行空格分割,否則無法識別哪個爲一組詞(英文沒有這個問題)
    3.Jieba.cut()即可返回的是元祖,需要用list()轉爲列表,再.join爲字符串



  • 代碼實現(英文):
    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())#沒有sparse=False設置,所以需要用toarray方式輸出數組
  • 輸出:在這裏插入圖片描述
    在上列的輸出中,代表着下列特徵值0,1對應的特徵名,每一組數據有該特徵,對應1,沒有該特徵,對應0
  • 代碼實現(中文):
	atext= jieba.cut ( "山有木兮未有枝,心悅君兮君不知,有種種吸引力、感召力,神祕感迫使心靈不斷地靠近,隨着迷霧的不斷解開,那層面紗不復存在,變得習以爲常,漸漸地進行疏遠,爲何如此傷心?是自我不夠堅定還是心靈難達境界,讓我獨自傷心,滿心的希望、不捨與留戀,現如今變得冷漠、傷心、無奈" )
    btext= jieba.cut ('在對的時間遇到對的人,是一種緣分')
    ctext= jieba.cut("在錯的時間遇到錯的人,是一種殘忍")
    #轉換爲列表Jieba.cut()只可返回的是元祖,需要用list()轉爲列表,再.join爲字符串
    aa=list(atext)
    bb=list(btext)
    cc=list(ctext)
    #用空格將他們再變連爲字符串
    t1 = ' '.join ( aa )
    t2 = ' '.join ( bb )
    t3 = ' '.join ( cc )#t3:在 錯 的 時間 遇到 錯 的 人 , 是 一種 殘忍
    cv = CountVectorizer ()
    data = cv.fit_transform ( [t1,t2,t3] )
    print ( cv.get_feature_names () )
    print ( data.toarray () )
  • 輸出:
    在這裏插入圖片描述

3:tf-idf對文字特徵提取

對於文本特徵識別,什麼詞出現在其他文章中越少,越有代表性
TF-IDF的主要思想是:如果某個詞或者短語在一篇文章中出現的頻率高,並且在其他文章中很少出現,則認爲此詞或者短語更具有更好的類別區分能力,適合用來分類

  • tf *idf便是該詞語的重要性,是特徵提取的方式
    • Tf:term frequency:詞的頻率
    • Idf:逆文檔頻率 ,由log(總文檔數量/該詞出現的文檔數量)得出
      這樣能夠有效的剔除像‘明天’,‘所以’這樣的詞,因爲他們經常在文檔中出現,讓其不影響結果的判斷
  • 調用:from sklearn.feature_extraction.text import TfidfVectorizer在這裏插入圖片描述
  • 代碼實現:
	atext = jieba.cut (
        "山有木兮未有枝,心悅君兮君不知,有種種吸引力、感召力,神祕感迫使心靈不斷地靠近,隨着迷霧的不斷解開,那層面紗不復存在,變得習以爲常,漸漸地進行疏遠,爲何如此傷心?是自我不夠堅定還是心靈難達境界,讓我獨自傷心,滿心的希望、不捨與留戀,現如今變得冷漠、傷心、無奈" )
    btext = jieba.cut ( '在對的時間遇到對的人,是一種緣分' )
    ctext = jieba.cut ( "在錯的時間遇到錯的人,是一種殘忍" )
    # 轉換爲列表
    aa = list ( atext )
    bb = list ( btext )
    cc = list ( ctext )
    t1 = ' '.join ( aa )
    t2 = ' '.join ( bb )
    t3 = ' '.join ( cc )
    tf = TfidfVectorizer()
    data = tf.fit_transform ( [t1 , t2 , t3] )
    print ( tf.get_feature_names () )
    print ( data.toarray () )
  • 輸出:在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章