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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

机器学习入门系列(1)--机器学习概览

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习入门系列(1)--机器学习概览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文比較長,八千字,建議收藏起來慢慢看!

此外,這其實是合并公眾號最開始寫的兩篇文章,整合在一起了。

  • 機器學習入門系列(1)--機器學習概覽(上)

  • 機器學習入門系列(2)--機器學習概覽(下)

主要參考

  • 《hands-on-ml-with-sklearn-and-tf》

  • Andrew Ng 在 Coursea 上的機器學習課程

什么是機器學習

簡單的定義,機器學習是通過編程讓計算機從數據中進行學習的科學(和藝術)

但還有另外兩種定義,一個更廣義的定義:

機器學習是讓計算機具有學習的能力,無需進行明確編程。 —— 亞瑟·薩繆爾,1959

和一個工程性的定義:

計算機程序利用經驗 E 學習任務 T,性能是 P,如果針對任務 T 的性能 P 隨著經驗 E 不斷增長,則稱為機器學習。 —— 湯姆·米切爾,1997

一個簡單的例子,也是經常提及的例子:垃圾郵件過濾器。它可以根據垃圾郵件(比如,用戶標記的垃圾郵件)和普通郵件(非垃圾郵件,也稱作 ham)學習標記垃圾郵件。用來進行學習的樣例稱作訓練集。每個訓練樣例稱作訓練實例(或樣本)。在這個例子中,任務 T 就是標記新郵件是否是垃圾郵件,經驗E是訓練數據,性能 P 需要定義:例如,可以使用正確分類的比例。這個性能指標稱為準確率,通常用在分類任務中。

為什么要用機器學習

為什么要用機器學習方法呢?

原因如下:

  • 需要進行大量手工調整或需要擁有長串規則才能解決的問題:機器學習算法通常可以簡化代碼、提高性能

  • 問題復雜,傳統方法難以解決:最好的機器學習方法可以找到解決方案。

  • 環境有波動:機器學習算法可以適應新數據

  • 洞察復雜問題和大量數據

一些機器學習的應用例子:

  • 數據挖掘

  • 一些無法通過手動編程來編寫的應用:如自然語言處理,計算機視覺

  • 一些自助式的程序:如推薦系統

  • 理解人類是如何學習的

機器學習系統的類型

機器學習有多種類型,可以根據如下規則進行分類:

  • 是否在人類監督下進行訓練(監督,非監督,半監督和強化學習)

  • 是否可以動態漸進學習(在線學習 vs批量學習)

  • 它們是否只是通過簡單地比較新的數據點和已知的數據點,或者在訓練數據中進行模式識別,以建立一個預測模型,就像科學家所做的那樣(基于實例學習 vs基于模型學習)

監督/非監督學習

第一種分類機器學習的方法是可以根據訓練時監督的量和類型進行分類。主要有四類:監督學習、非監督學習、半監督學習和強化學習。

監督學習

監督學習,顧名思義就是帶有監督的學習,而監督就是體現在訓練數據都是有標簽的,所有在訓練模型的時候可以根據數據的真實標簽不斷調整模型,從而得到一個性能更好的模型。

監督學習主要有兩個常見的典型的任務--分類和回歸。

分類

分類問題主要就是預測新數據的類別問題。例如上文提到的垃圾郵件過濾器就是一個二分類問題,將郵件分為垃圾郵件還是正常的郵件,如下圖所示。

回歸

回歸問題主要是預測目標數值。比如給定預測房價的問題,給定一些特征,如房子大小、房間數量、地理位置等等,然后預測房子的價格。如下圖所示:

注意,一些回歸算法也可以用來進行分類,反之亦然。例如,邏輯回歸通常用來進行分類,它可以生成一屬于每個類別的概率值,然后選擇最大概率的類別作為預測的類別。

常用的監督學習算法有:

  • K近鄰算法

  • 線性回歸

  • 邏輯回歸

  • 支持向量機(SVM)

  • 決策樹和隨機森林

  • 神經網絡

非監督學習

和監督學習相反,非監督學習就是采用沒有標簽的數據集。

非監督主要有四個典型的任務,分別是聚類、降維、異常檢測和關聯規則學習。

1. 聚類

聚類就是將數據根據一定的規則分成多個類,通常是采用相似性。比如對于博客訪客的聚類,通過聚類算法,檢測相似性訪客的分組,如下圖所示。不需要告訴算法訪客是哪個類別,它會自動根據訪客的屬性找到相互間的關系,比如它可能找出訪客的職業關系,將訪客分為有 40% 的是上班族,有 50% 的是學生,或者對于技術博客,可能就是根據開發方向,劃分為前端、后臺、移動開發、人工智能等等。甚至,如果采用層次聚類分析算法,還可以繼續對上述的分類進行更加詳細的劃分。這種做法可以幫助博主知道自己博客的主要群體是誰,更好規劃自己博客發表的文章應該以什么方向為主。

可視化算法也是極佳的非監督學習案例:給算法大量復雜的且不加標簽的數據,算法輸出數據的2D或3D圖像。如下圖所示,算法會試圖保留數據的結構(即嘗試保留輸入的獨立聚類,避免在圖像中重疊),這樣就可以明白數據是如何組織起來的,也許還能發現隱藏的規律。

2. 降維

降維的目的是簡化數據、但是不能失去大部分信息。做法之一是合并若干相關的特征。例如,汽車的里程數與車齡高度相關,降維算法就會將它們合并成一個,表示汽車的磨損。這叫做特征提取。

此外,在采用機器學習算法訓練的時候,可以對訓練集進行降維,這樣有助于提高訓練速度,降低占用的硬盤和內存空間,有時候也能提高算法的性能,但必須選擇合適的降維算法,否則性能實際上是很有可能會下降的。

3. 異常檢測

另一個重要的非監督任務是異常檢測(anomaly detection)。例如,檢測異常的信用卡轉賬以防欺詐,檢測制造缺陷,或者在訓練之前自動從訓練數據集去除異常值。異常檢測的系統使用正常值訓練的,當它碰到一個新實例,它可以判斷這個新實例是像正常值還是異常值。

4. 關聯規則學習

最后,另一個常見的非監督任務是關聯規則學習,它的目標是挖掘大量數據以發現屬性間有趣的關系。例如,假設你擁有一個超市。在銷售日志上運行關聯規則,可能發現買了燒烤醬和薯片的人也會買牛排。因此,你可以將這些商品放在一起。

下面是一些最重要的非監督學習算法:

  • 聚類

    • K 均值

    • 層次聚類分析(Hierarchical Cluster Analysis, HCA)

    • 期望最大值

    可視化和降維

    • 主成分分析(Principal Component Analysis, PCA)

    • 核主成分分析

    • 局部線性嵌入(Locally-Linear Embedding, LLE)

    • t-分布鄰域嵌入算法(t-distributed Stochastic Neighbor Embedding, t-SNE)

    關聯性規則學習

    • Apriori 算法

    • Eclat算法

    半監督學習

    一些算法可以處理部分帶標簽的訓練數據,通常是大量不帶標簽數據加上小部分帶標簽數據。這稱作半監督學習。如下圖所示,圖中灰色圓點表示沒有標簽的數據,僅有幾個三角形和正方形點表示帶標簽的數據。

    多數半監督學習算法是非監督和監督算法的結合

    例如,深度信念網絡(deep belief networks)是基于被稱為互相疊加的受限玻爾茲曼機(restricted Boltzmann machines,RBM)的非監督組件。RBM 是先用非監督方法進行訓練,再用監督學習方法進行整個系統微調。

    半監督學習的示例,如一些圖片存儲服務,比如 Google Photos,是半監督學習的好例子。一旦你上傳了所有家庭相片,它就能自動識別相同的人 A 出現了相片1、5、11 中,另一個人 B 出現在了相片 2、5、7 中。這是算法的非監督部分(聚類)。現在系統需要的就是你告訴這兩個人是誰。只要給每個人一個標簽,算法就可以命名每張照片中的每個人,特別適合搜索照片。

    強化學習

    強化學習和上述三種學習問題是非常不同的。學習系統在這里被稱為智能體( agent),可以對環境進行觀察,選擇和執行動作,獲得獎勵(負獎勵是懲罰,見下圖)。然后它必須自己學習哪個是最佳方法(稱為策略,policy),以得到長久的最大獎勵。策略決定了智能體在給定情況下應該采取的行動 。

    目前強化學習的應用還不算非常廣,特別是結合了深度學習的強化學習,主要是應用在機器人方面,當然最著名的一個應用就是 DeepMind 的 AlphaGo 了,它是通過分析數百萬盤棋局學習制勝策略,然后自己和自己下棋。要注意,在比賽中機器學習是關閉的;AlphaGo 只是使用它學會的策略。

    批量和在線學習

    第二種分類機器學習的準則是,它是否能從導入的數據流進行持續學習。也就是如果導入的是持續的數據流,機器學習算法能否在不斷采用新數據來訓練已經訓練好的模型,并且新的模型對新舊數據都還有很好的性能。

    批量學習

    在批量學習中,系統不能進行持續學習:必須用所有可用數據進行訓練。這通常會占用大量時間和計算資源,所以一般是線下做的。首先是進行訓練,然后部署在生產環境且停止學習,它只是使用已經學到的策略。這稱為離線學習。

    對于批量學習算法來說,當獲取到新數據的時候,就需要重新重頭訓練整個數據集,然后更新模型,如果是應用該算法系統,那就相當于需要更新系統,需要停掉舊版本的系統,重新上線新版本的系統。

    當然,一般訓練、評估、部署一套機器學習的系統的整個過程可以自動進行,所以即便是批量學習也可以適應改變。只要有需要,就可以方便地更新數據、訓練一個新版本。并且對于更新周期,可以選擇每 24 小時或者每周更新一次。

    但是,批量學習還是存在下面的缺點:

  • 實時性差,即對于需要快速適應變化的系統,比如預測股票變化、電商推薦系統等,就不適合采用批量學習算法;

  • 耗費大量計算資源,用全部數據訓練需要大量計算資源(CPU、內存空間、磁盤空間、磁盤 I/O、網絡 I/O 等等),特別是訓練集特別大的情況,更加凸顯這個問題的嚴峻性;

  • 無法應用在資源有限的設備上,比如需要自動學習的系統,但是如果采用智能手機,每次采用大量訓練數據重新訓練幾個小時是非常不實際的。

  • 在線學習

    批量學習的缺陷和問題可以通過采用在線學習算法來解決。

    在在線學習中,是用數據實例持續地進行訓練,可以一次一個或一次幾個實例(稱為小批量)。每個學習步驟都很快且廉價,所以系統可以動態地學習到達的新數據。

    在線學習雖然名字帶著在線兩個字,但是實際上它的訓練過程也是離線的,因此應該說是持續學習或者增量學習。

    在線學習有下面幾個優點:

  • 實時性好。在線學習算法非常適合接收連續流的數據,然后自動更新模型,實時性比批量學習更好;

  • 可以節省大量計算資源。在線學習算法在學習新數據后,可以扔掉訓練數據,從而節省大量存儲空間;此外,訓練得過程不需要加載所有訓練數據,對于內存、CPU 等資源的要求也大大減少;

  • 實現核外學習(out-of-core learning)。當內存不足以加載訓練集的時候,可以采用在線學習算法多次訓練,每次加載一部分訓練集,即將一部分訓練集當做新數據不斷加載,直到訓練完所有數據。

  • 在線學習也存在兩個挑戰:

  • 學習速率問題。學習速率是在線學習的一個重要參數,它反映了在線學習算法有多快地適應數據的改變,必須選擇一個合適的學習速率,因為學習速率過大,系統可以很快適應新數據,但是也容易遺忘舊數據,比如圖像分類問題,訓練了一個 50 類分類器后,增加新的 10 類數據,一旦學習速率過快,系統只會記住新的 10 個類別,忘記了前面的 50 個類別的數據。相反的,如果你設定的學習速率低,系統的惰性就會強:即,它學的更慢,但對新數據中的噪聲或沒有代表性的數據點結果不那么敏感。

  • 壞數據的影響。如果采用壞數據訓練,會破壞系統的性能。要減小這種風險,你需要密集監測,如果檢測到性能下降,要快速關閉(或是滾回到一個之前的狀態)。你可能還要監測輸入數據,對反常數據做出反應(比如,使用異常檢測算法)。

  • 基于實例 vs 基于模型學習

    第三種分類機器學習的方法是判斷它們是如何進行歸納推廣的。大多機器學習任務是關于預測的。這意味著給定一定數量的訓練樣本,系統需要能推廣到之前沒見到過的樣本。對訓練數據集有很好的性能還不夠,真正的目標是對新實例預測的性能。

    有兩種主要的歸納方法:基于實例學習和基于模型學習。

    基于實例學習

    基于實例學習是系統先用記憶學習案例,然后使用相似度測量推廣到新的例子,如下圖所示:

    這種學習算法可以說是機器學習中最簡單的算法了,它實際上就是采用存儲的數據集進行分類或者回歸,典型的算法就是 KNN 算法,即 K 近鄰算法,它就是將新的輸入數據和已經保存的訓練數據采用相似性度量(一般采用歐式距離)得到最近的 K 個訓練樣本,并采用 K 個訓練樣本中類別出現次數最多的類別作為預測的結果。

    所以,這種算法的缺點就比較明顯了:

    • 一是對存儲空間的需求很大,需要占用的空間直接取決于實例數量的大小;

    • 二是運行時間比較慢,因為需要需要與已知的實例進行比對。

    基于模型學習

    和基于實例學習相反的就是基于模型學習:建立這些樣本的模型,然后使用這個模型進行預測。如下圖所示:

    基于模型學習算法的流程一般如下所示:

    • 研究數據。先對數據進行分析,這可能包含清洗數據、特征篩選、特征組合等等

    • 選擇模型。選擇合適的模型,從簡單的線性回歸、邏輯回歸,到慢慢復雜的隨機森林、集成學習,甚至深度學習的卷積神經網絡模型等等

    • 用訓練數據進行訓練。也就是尋找最適合算法模型的參數,使得代價函數取得最小值。

    • 使用模型對新案例進行預測(這稱作推斷)。預測結果非常好,就能上線系統;如果不好,就需要進行錯誤分析,問題出現在哪里,是數據問題還是模型問題,找到問題,然后繼續重復這個流程。

    機器學習的主要挑戰

    在介紹基于模型學習算法的流程的時候,對于預測結果不好的問題分析,主要說了是數據問題還是模型問題,這同時也就是機器學習的效果不好的兩個主要原因,即錯誤的數據和錯誤的算法。

    訓練數據量不足

    第一個問題就是訓練數據的數量問題,這是非常重要的問題。

    因為即使是簡單的問題,一般也需要數千的樣本,這還是因為簡單的問題一般采用簡單的算法就可以解決,對于復雜的圖像或語音問題,通常需要數百萬的樣本,特別是如果采用現在非常熱門的深度學習算法,比如卷積神經網絡模型,這些復雜的模型如果沒有足夠的數據量支持,非常容易陷入過擬合的情況。

    實際上更多數量的訓練集也是為了獲得更有代表性的數據,能夠學習到這類數據的所有特征。

    但是,應該注意到,小型和中型的數據集仍然是非常常見的,獲得額外的訓練數據并不總是輕易和廉價的,所以不要拋棄算法

    沒有代表性的訓練數據

    無論采用基于實例還是基于模型的學習,讓訓練數據對新數據具有代表性是非常重要的。如果訓練集沒有代表性,那么訓練得到的模型就是不可能得到準確性的模型,比如人臉識別中,模型沒有學習到某個人最明顯的代表性的特征,比如高鼻梁或者沒有眉毛等突出特征,那么模型對這個人的識別率就不會很高。

    使用具有代表性的訓練集對于推廣到新案例是非常重要的。但是做起來比說起來要難:如果樣本太小,就會有樣本噪聲(即會有一定概率包含沒有代表性的數據),但是即使是非常大的樣本也可能沒有代表性,如果取樣方法錯誤的話。這叫做樣本偏差。

    低質量的數據

    低質量的數據指的是數據有錯誤、帶有過多噪聲或者是出現異常值等的數據,這種數據會影響系統整體的性能,因此,數據清洗對于構建一個機器學習系統或者一個機器學習項目來說都是必不可少的步驟。

    對于這些低質量的數據,通常可以按照如下做法處理:

    • 如果一些實例是明顯的異常值,最好刪掉它們或嘗試手工修改錯誤;

    • 如果一些實例缺少特征(比如,你的 5% 的顧客沒有說明年齡),你必須決定是否忽略這個屬性、忽略這些實例、填入缺失值(比如,年齡中位數),或者訓練一個含有這個特征的模型和一個不含有這個特征的模型,等等。

    不相關的特征

    不相關的特征對于整個機器學習系統是有著反作用的效果,訓練數據必須包含足夠多的相關特征且非相關特征不多的情況下,才能訓練出一個性能不錯的模型。機器學習項目成功的關鍵之一是用好的特征進行訓練。這個過程稱作特征工程,包括:

    • 特征選擇:在所有存在的特征中選取最有用的特征進行訓練。

    • 特征提取:組合存在的特征,生成一個更有用的特征(如前面看到的,可以使用降維算法)。

    • 收集新數據創建新特征。

    過擬合

    上述四種情況都是壞數據的情況,接下來是兩種算法問題,也是機器學習最常見的兩種算法方面的問題,過擬合和欠擬合

    過擬合就是指算法模型在訓練集上的性能非常好,但是泛化能力很差,即在測試集上的效果卻很糟糕的情況。比如下圖,采用一個高階多項式回歸模型來預測生活滿意度和人均 GDP 的關系,很明顯看出來,這個模型過擬合了訓練數據,其預測效果并不會達到在訓練數據上這么好的效果。

    通常對于比較復雜的模型,比如深度神經網絡,它能夠檢測和識別到數據中比較細微的規律和特征,但是如果訓練集包含噪聲,或者訓練集數量太少(數量太少會引入樣本噪聲),這種情況下,模型同樣會學習這種噪聲,從而導致模型的泛化能力的下降。

    一般解決過擬合的方法有:

    • 簡化模型,這包括了采用簡單點的模型、減少特征數量以及限制模型,即采用正則化;

    • 增加訓練數據

    • 減小訓練數據的噪聲,即數據清洗,比如修正數據錯誤和去除異常值等

    其中正則化方法是比較常用的方法,它的作用就是限制模型,不讓模型過于復雜,從而降低過擬合的風險或者是緩和過擬合的程度。常用的正則化方法是?L2 和 L1 正則化。正則化方法通常會采用一個超參數來控制其限制模型的強度。超參數是一個學習算法的參數(而不是模型的)。這樣,它是不會被學習算法本身影響的,它優于訓練,在訓練中是保持不變的。如何調節超參數也是構建一個機器學習算法模型非常重要的一個步驟,也是讓性能能夠進一步提升的做法。

    欠擬合

    欠擬合和過擬合剛好相反,它就是模型的性能非常差,在訓練數據和測試數據上的性能都不好。

    通常也是因為模型過于簡單,沒有能夠很好學習到數據的有效的相關的特征,解決方法有:

    • 選擇一個更強大的模型,帶有更多參數

    • 用更好的特征訓練學習算法(特征工程)

    • 減小對模型的限制(比如,減小正則化超參數)

    測試和評估

    當訓練好一個機器學習模型后,接下來就需要對模型進行預測和評估,判斷得到的模型是否可用,是否還能進行提升,并進行錯誤分析等操作。

    一般在訓練模型前,我們會將數據集分成兩個集合,分別是訓練集和測試集,通常 8:2 的比例,也就是 80% 的數據作為訓練集,剩余是測試集。然后采用訓練集訓練模型,在測試集上用按照學習的問題采用對應評估指標評估模型的性能,比如分類問題,一般就是采用分類的準確率或者錯誤率作為評估的標準。

    但這種劃分數據集的方法,存在一個問題,就是如果需要調節超參數,比如對于正則化的超參數、學習率等,繼續采用測試集來進行評估不同超參數對模型性能的影響,這會導致最后在測試集上測試得到性能最好的模型,實際上是過擬合了測試集,那么模型的泛化能力也不會太好。

    所以,為了解決這個問題,我們還需要為調節超參數劃分一個專門的數據集,測試集應該是用于測試最終得到的模型的性能。因此,我們再劃分一個叫做驗證集的數據集。

    一種做法是可以將所有數據按照一定比例劃分為訓練集、驗證集和測試集,比如按照 6:2:2 的比例劃分;當然更通常的做法是采用交叉驗證:訓練集分成互補的子集,每個模型用不同的子集訓練,再用剩下的子集驗證。一旦確定模型類型和超參數,最終的模型使用這些超參數和全部的訓練集進行訓練,用測試集得到推廣誤差率。

    總結

    最后我們總結下:

  • 機器學習就是讓機器通過學習數據得到更好解決某些問題的能力,而不需要確定的代碼規則;

  • 機器學習按照不同的劃分標準可以分為不同的學習類型,包括監督和非監督學習、批量和在線學習,基于實例和基于模型學習;

  • 最常見的監督學習任務是分類和回歸;

  • 常見的非監督學習任務是聚類、降維、異常值檢測和關聯規則學習;

  • 機器學習的四個主要挑戰是

    • 數據量太少

    • 數據問題,包括沒有代表性數據和質量差

    • 不相關特征

    • 模型過擬合或者欠擬合

    6.采用交叉驗證方法進行超參數條件和模型的選擇

    歡迎關注我的微信公眾號--機器學習與計算機視覺,或者掃描下方的二維碼,大家一起交流,學習和進步!

    如果覺得好看,歡迎點贊!

    總結

    以上是生活随笔為你收集整理的机器学习入门系列(1)--机器学习概览的全部內容,希望文章能夠幫你解決所遇到的問題。

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