機器學習的一些常用演算法

来源:http://www.cnblogs.com/bigdatafly/archive/2016/06/26/5618453.html
-Advertisement-
Play Games

下麵是些泛泛的基礎知識,但是真正搞機器學習的話,還是非常有用。像推薦系統、DSP等目前項目上機器學習的應用的關鍵,我認為數據處理非常非常重要,因為很多情況下,機器學習的演算法是有前提條件的,對數據是有要求的。 機器學習強調三個關鍵詞:演算法、經驗、性能,其處理過程如下圖所示。 上圖表明機器學習是數據通過 ...


  下麵是些泛泛的基礎知識,但是真正搞機器學習的話,還是非常有用。像推薦系統、DSP等目前項目上機器學習的應用的關鍵,我認為數據處理非常非常重要,因為很多情況下,機器學習的演算法是有前提條件的,對數據是有要求的。

機器學習強調三個關鍵詞:演算法、經驗、性能,其處理過程如下圖所示。

 

 

上圖表明機器學習是數據通過演算法構建出模型並對模型進行評估,評估的性能如果達到要求就拿這個模型來測試其他的數據,如果達不到要求就要調整演算法來重新建立模型,再次進行評估,如此迴圈往複,最終獲得滿意的經驗來處理其他的數據。

1.2 機器學習的分類

1.2.1 監督學習

監督是從給定的訓練數據集中學習一個函數(模型),當新的數據到來時,可以根據這個函數(模型)預測結果。監督學習的訓練集要求包括輸入和輸出,也可以說是特征和目標。訓練集中的目標是由人標註(標量)的。在監督式學習下,輸入數據被稱為“訓練數據”,每組訓練數據有一個明確的標識或結果,如對防垃圾郵件系統中“垃圾郵件”、“非垃圾郵件”,對手寫數字識別中的“1”、“2”、“3”等。在建立預測模型時,監督式學習建立一個學習過程,將預測結果與“訓練數據”的實際結果進行比較,不斷調整預測模型,直到模型的預測結果達到一個預期的準確率。常見的監督學習演算法包括回歸分析和統計分類:

l  二元分類是機器學習要解決的基本問題,將測試數據分成兩個類,如垃圾郵件的判別、房貸是否允許等問題的判斷。

l  多元分類是二元分類的邏輯延伸。例如,在網際網路的流分類的情況下,根據問題的分類,網頁可以被歸類為體育、新聞、技術等,依此類推。

監督學習常常用於分類,因為目標往往是讓電腦去學習我們已經創建好的分類系統。數字識別再一次成為分類學習的常見樣本。一般來說,對於那些有用的分類系統和容易判斷的分類系統,分類學習都適用。

監督學習是訓練神經網路和決策樹的最常見技術。神經網路和決策樹技術高度依賴於事先確定的分類系統給出的信息。對於神經網路來說,分類系統用於判斷網路的錯誤,然後調整網路去適應它;對於決策樹,分類系統用來判斷哪些屬性提供了最多的信息,如此一來可以用它解決分類系統的問題。

 

 

1.2.2 無監督學習

與監督學習相比,無監督學習的訓練集沒有人為標註的結果。在非監督式學習中,數據並不被特別標識,學習模型是為了推斷出數據的一些內在結構。常見的應用場景包括關聯規則的學習以及聚類等。常見演算法包括Apriori演算法和k-Means演算法。這類學習類型的目標不是讓效用函數最大化,而是找到訓練數據中的近似點。聚類常常能發現那些與假設匹配的相當好的直觀分類,例如基於人口統計的聚合個體可能會在一個群體中形成一個富有的聚合,以及其他的貧窮的聚合。

 

 

非監督學習看起來非常困難:目標是我們不告訴電腦怎麼做,而是讓它(電腦)自己去學習怎樣做一些事情。非監督學習一般有兩種思路:第一種思路是在指導Agent時不為其指定明確的分類,而是在成功時採用某種形式的激勵制度。需要註意的是,這類訓練通常會置於決策問題的框架里,因為它的目標不是產生一個分類系統,而是做出最大回報的決定。這種思路很好地概括了現實世界,Agent可以對那些正確的行為做出激勵,並對其他的行為進行處罰。

因為無監督學習假定沒有事先分類的樣本,這在一些情況下會非常強大,例如,我們的分類方法可能並非最佳選擇。在這方面一個突出的例子是Backgammon(西洋雙陸棋)游戲,有一系列電腦程式(例如neuro-gammon和TD-gammon)通過非監督學習自己一遍又一遍地玩這個游戲,變得比最強的人類棋手還要出色。這些程式發現的一些原則甚至令雙陸棋專家都感到驚訝,並且它們比那些使用預分類樣本訓練的雙陸棋程式工作得更出色。

1.2.3 半監督學習

半監督學習(Semi-supervised Learning)是介於監督學習與無監督學習之間一種機器學習方式,是模式識別和機器學習領域研究的重點問題。它主要考慮如何利用少量的標註樣本和大量的未標註樣本進行訓練和分類的問題。半監督學習對於減少標註代價,提高學習機器性能具有非常重大的實際意義。主要演算法有五類:基於概率的演算法;在現有監督演算法基礎上進行修改的方法;直接依賴於聚類假設的方法等,在此學習方式下,輸入數據部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習數據的內在結構以便合理地組織數據來進行預測。應用場景包括分類和回歸,演算法包括一些對常用監督式學習演算法的延伸,這些演算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測,如圖論推理演算法(Graph Inference)或者拉普拉斯支持向量機(Laplacian SVM)等。

半監督學習分類演算法提出的時間比較短,還有許多方面沒有更深入的研究。半監督學習從誕生以來,主要用於處理人工合成數據,無雜訊干擾的樣本數據是當前大部分半監督學習方法使用的數據,而在實際生活中用到的數據卻大部分不是無干擾的,通常都比較難以得到純樣本數據。

 

 

1.2.4 強化學習

強化學習通過觀察來學習動作的完成,每個動作都會對環境有所影響,學習對象根據觀察到的周圍環境的反饋來做出判斷。在這種學習模式下,輸入數據作為對模型的反饋,不像監督模型那樣,輸入數據僅僅是作為一個檢查模型對錯的方式,在強化學習下,輸入數據直接反饋到模型,模型必須對此立刻做出調整。常見的應用場景包括動態系統以及機器人控制等。常見演算法包括Q-Learning 以及時間差學習(Temporal difference learning)。

 

 

在企業數據應用的場景下,人們最常用的可能就是監督式學習和非監督式學習的模型。在圖像識別等領域,由於存在大量的非標識的數據和少量的可標識數據,目前半監督式學習是一個很熱的話題。而強化學習更多地應用在機器人控制及其他需要進行系統控制的領域。

1.3 機器學習的常見演算法

常見的機器學習演算法有:

l  構造條件概率:回歸分析和統計分類;

l  人工神經網路;

l  決策樹;

l  高斯過程回歸;

l  線性判別分析;

l  最近鄰居法;

l  感知器;

l  徑向基函數核;

l  支持向量機;

l  通過再生模型構造概率密度函數;

l  最大期望演算法;

l  graphical model:包括貝葉斯網和Markov隨機場;

l  Generative Topographic Mapping;

l  近似推斷技術;

l  馬爾可夫鏈蒙特卡羅方法;

l  變分法;

l  最優化:大多數以上方法,直接或者間接使用最優化演算法。

根據演算法的功能和形式的類似性,我們可以把演算法分類,比如說基於樹的演算法,基於神經網路的演算法等等。當然,機器學習的範圍非常龐大,有些演算法很難明確歸類到某一類。而對於有些分類來說,同一分類的演算法可以針對不同類型的問題,下麵用一些相對比較容易理解的方式來解析一些主要的機器學習演算法:

1.3.1 回歸演算法

回歸演算法是試圖採用對誤差的衡量來探索變數之間的關係的一類演算法。回歸演算法是統計機器學習的利器。在機器學習領域,人們說起回歸,有時候是指一類問題,有時候是指一類演算法,這一點常常會使初學者有所困惑。常見的回歸演算法包括:最小二乘法(Ordinary Least Square),邏輯回歸(Logistic Regression),逐步式回歸(Stepwise Regression),多元自適應回歸樣條(Multivariate Adaptive Regression Splines)以及本地散點平滑估計(Locally Estimated Scatterplot Smoothing)。

 

 

1.3.2 基於實例的演算法

基於實例的演算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本數據,然後根據某些近似性把新數據與樣本數據進行比較。通過這種方式來尋找最佳的匹配。因此,基於實例的演算法常常也被稱為“贏家通吃”學習或者“基於記憶的學習”。常見的演算法包括 k-Nearest Neighbor (KNN),、學習矢量量化(Learning Vector Quantization, LVQ)以及自組織映射演算法(Self-Organizing Map,SOM)

 

 

1.3.3 正則化方法

正則化方法是其他演算法(通常是回歸演算法)的延伸,根據演算法的複雜度對演算法進行調整。正則化方法通常對簡單模型予以獎勵而對複雜演算法予以懲罰。常見的演算法包括:Ridge Regression、Least Absolute Shrinkage and Selection Operator(LASSO)以及彈性網路(Elastic Net)。

 

 

1.3.4 決策樹學習

決策樹演算法根據數據的屬性採用樹狀結構建立決策模型,決策樹模型常常用來解決分類和回歸問題。常見的演算法包括:分類及回歸樹(Classification And Regression Tree, CART)、 ID3 (Iterative Dichotomiser 3)、C4.5、Chi-squared Automatic Interaction Detection (CHAID)、Decision Stump、機森林(Random Forest)、多元自適應回歸樣條(MARS)以及梯度推進機(Gradient Boosting Machine,GBM)。

 

 

1.3.5 貝葉斯學習

貝葉斯方法演算法是基於貝葉斯定理的一類演算法,主要用來解決分類和回歸問題。常見演算法包括:朴素貝葉斯演算法、平均單依賴估計(Averaged One-Dependence Estimators, AODE)以及 Bayesian Belief Network(BBN)。

 

 

1.3.6 基於核的演算法

基於核的演算法中最著名的莫過於支持向量機(SVM)了。基於核的演算法把輸入數據映射到一個高階的向量空間, 在這些高階向量空間里, 有些分類或者回歸問題能夠更容易解決。常見的基於核的演算法包括:支持向量機(Support Vector Machine,SVM)、徑向基函數(Radial Basis Function,RBF)以及線性判別分析(Linear Discriminate Analysis,LDA)等。

 

 

1.3.7 聚類演算法

聚類就像回歸一樣,有時候人們描述的是一類問題,有時候描述的是一類演算法。聚類演算法通常按照中心點或者分層的方式對輸入數據進行歸併。所有的聚類演算法都試圖找到數據的內在結構,以便按照最大的共同點將數據進行歸類。常見的聚類演算法包括 k-Means 演算法以及期望最大化演算法(Expectation Maximization,EM)。

 

1.3.8 關聯規則學習

關聯規則學習通過尋找最能夠解釋數據變數之間關係的規則,來找出大量多元數據集中有用的關聯規則。常見演算法包括 Apriori 演算法和 Eclat 演算法等。

 

1.3.9 人工神經網路演算法

人工神經網路演算法模擬生物神經網路,是一類模式匹配演算法。通常用於解決分類和回歸問題。人工神經網路是機器學習的一個龐大的分支,有幾百種不同的演算法(其中深度學習就是其中的一類演算法,我們會單獨討論)。重要的人工神經網路演算法包括:感知器神經網路(Perceptron Neural Network)、反向傳遞(Back Propagation)、Hopfield 網路、自組織映射(Self-Organizing Map, SOM)、學習矢量量化(Learning Vector Quantization,LVQ)。

 

1.3.10 深度學習演算法

深度學習演算法是對人工神經網路的發展,在近期贏得了很多關註,特別是百度也開始發力深度學習後,更是在國內引起了很多關註。在計算能力變得日益廉價的今天,深度學習試圖建立大得多也複雜得多的神經網路。很多深度學習的演算法是半監督式學習演算法,用來處理存在少量未標識數據的大數據集。常見的深度學習演算法包括:受限波爾茲曼機(Restricted Boltzmann Machine, RBN)、 Deep Belief Networks(DBN)、捲積網路(Convolutional Network)、堆棧式自動編碼器(Stacked Auto-encoders)。

 

1.3.11 降低維度演算法

像聚類演算法一樣,降低維度演算法試圖分析數據的內在結構,不過降低維度演算法是以非監督學習的方式,試圖利用較少的信息來歸納或者解釋數據。這類演算法可以用於高維數據的可視化或者用來簡化數據以便監督式學習使用。常見的演算法包括:主成份分析(Principle Component Analysis,PCA)、偏最小二乘回歸(Partial Least Square Regression,PLS)、 Sammon 映射、多維尺度(Multi-Dimensional Scaling, MDS)、投影追蹤(Projection Pursuit)等。

 

 

1.3.12 集成演算法

集成演算法用一些相對較弱的學習模型獨立地對同樣的樣本進行訓練,然後把結果整合起來進行整體預測。集成演算法的主要難點在於究竟集成哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類非常強大的演算法,同時也非常流行。常見的演算法包括:Boosting、Bootstrapped Aggregation(Bagging)、AdaBoost、堆疊泛化(Stacked Generalization, Blending)、梯度推進機(Gradient Boosting Machine, GBM)、隨機森林(Random Forest)。

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.實現方式 1.1使用HttpUrlConnection 1.2使用HttpClient 1.3使用Socket,比如:豌豆莢,聊天工具 2.通訊渠道 2.1 WLAN(wi-fi),100米左右的數據傳輸 2.2 手機APN接入點(基站) 2.2.1 wap的方式,中國特色,首先會連接電信運營商 ...
  • IOS的用戶體驗做的很好,其中一點很重要的地方就是動畫效果。 最近在學習Android的Animation,簡單實現了一個IOS相機濾鏡退出的動畫: 佈局文件:activity_animation_demo.xml 佈局未考慮各個解析度,只是為了實現動畫邏輯,(代碼測試是在720P解析度的手機上) ...
  • 能添加圖標的label 效果 源碼 https://github.com/YouXianMing/UI-Component-Collection 中的 IconEdgeInsetsLabel 細節 1. 繼承自UILabel 2. 重載了UILabel的兩個方法 ...
  • 1.數據區分 手機端:常量存儲 伺服器端:資料庫建表存儲 2.數據來源 android,ios,pc,wap 3.數據採集,數據挖掘 IMEI:設備編號 IMSI:SIM卡編號 4.數據加密 4.1RSA演算法 4.2簡單代碼處理:時間戳(SimpleDateFormat)+隨機值(Random) 4 ...
  • Paxos演算法是萊斯利·蘭伯特(Leslie Lamport)1990年提出的一種基於消息傳遞的一致性演算法。Paxos演算法解決的問題是一個分散式系統如何就某個值(決議)達成一致。在工程實踐意義上來說,就是可以通過Paxos實現多副本一致性,分散式鎖,名字管理,序列號分配等。比如,在一個分散式資料庫系 ...
  • mysql -u root -p 輸入密碼進入資料庫 show database; 查詢當前庫 use databasename 切換到某個庫 show tables; 列出當前資料庫的表 desc tbalename 列出表的欄位 select user() + + | user() | + + ...
  • 一些需求是原生Flume無法滿足的,因此,基於開源的Flume我們增加了許多功能。 EventDeserializer的缺陷 Flume的每一個source對應的deserializer必須實現介面EventDeserializer,該介面定義了readEvent/readEvents方法從各種日誌 ...
  • 舉個例子如一張消息表 結構如些 Id (自增主鍵) Content(內容) UserId(說話人Id) IsWonderful(是否是精彩發言) Top(是否置頂) IsBarrage( 是否是彈幕) 當這個結構的表 數據還少時取 經常發言 置頂發言 和彈幕 速度比較快 但是數據一多 30多萬條的時 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...