1. spark mllib機器學習什麼語言
1、機器學習概念
1.1機器學習的定義
在維基網路上對機器學習提出以下幾種定義:
l「機器學習是一門人工智慧的科學,該領域的主要研究對象是人工智慧,特別是如何在經驗學習中改善具體演算法的性能」。
l「機器學習是對能通過經驗自動改進的計算機演算法的研究」。
l「機器學習是用數據或以往的經驗,以此優化計算機程序的性能標准。」一種經常引用的英文定義是:A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E。
可以看出機器學習強調三個關鍵詞:演算法、經驗、性能,其處理過程如下圖所示。
3、Spark MLlib架構解析
2. 分類演算法 - 樸素貝葉斯演算法
相信很多同學在高中或者大學的時候都學過貝葉斯原理,即條件原理。
現分別有 A、B 兩個容器,在容器 A 里分別有 7 個紅球和 3 個白球,在容器 B 里有 1 個紅球和 9 個白球,現已知從這兩個容器里任意抽出了一個紅球,問這個球來自容器 A 的概率是多少?
假設已經抽出紅球為事件 B,選中容器 A 為事件 A,則有:P(B) = 8/20,P(A) = 1/2,P(B|A) = 7/10,按照公式,則有:P(A|B) = (7/10)*(1/2) / (8/20) = 0.875
之所以稱為樸素貝葉斯, 是因為它假設每個輸入變數是獨立的。 現實生活中這種情況基本不滿足,但是這項技術對於絕大部分的復雜問題仍然非常有效。
樸素貝葉斯模型由兩種類型的概率組成:
1、每個類別的概率P(Cj);
2、每個屬性的條件概率P(Ai|Cj)。
為了訓練樸素貝葉斯模型,我們需要先給出訓練數據,以及這些數據對應的分類。那麼上面這兩個概率,也就是類別概率和條件概率。他們都可以從給出的訓練數據中計算出來。一旦計算出來,概率模型就可以使用貝葉斯原理對新數據進行預測。
貝葉斯原理、貝葉斯分類和樸素貝葉斯這三者之間是有區別的
貝葉斯原理是最大的概念,它解決了概率論中「逆向概率」的問題,在這個理論基礎上,人們設計出了貝葉斯分類器,樸素貝葉斯分類是貝葉斯分類器中的一種,也是最簡單,最常用的分類器。樸素貝葉斯之所以樸素是因為它假設屬性是相互獨立的,因此對實際情況有所約束, 如果屬性之間存在關聯,分類准確率會降低。
(1) 演算法邏輯簡單,易於實現
(2)分類過程中時空開銷小(假設特徵相互獨立,只會涉及到二維存儲)
(1)理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。
(2)在屬性相關性較小時,樸素貝葉斯性能最為良好。對於這一點,有半樸素貝葉斯之類的演算法通過考慮部分關聯性適度改進。
庫有3種演算法:GaussianNB、MultinomialNB和BernoulliNB。
這三個類適用的分類場景各不相同,主要根據數據類型來進行模型的選擇。一般來說,如果樣本特徵的分布大部分是連續值,使用GaussianNB會比較好。如果如果樣本特徵的分大部分是多元離散值,使用MultinomialNB比較合適。而如果樣本特徵是二元離散值或者很稀疏的多元離散值,應該使用BernoulliNB。
3. Spark的機器學習庫MLLib為什麼沒有實現高斯分布的樸素貝葉斯
include#include#defineMAX100structaddr{charname[30];charstreet[40];charcity[20];charstate[3];unsignedlongintzip;}addr_list[MAX];voidinit_list(void);intmenu_select(void);voidenter(void);intfind_free(void);voiddeleted(void);voidlist(void);intmain(void){charchoice;init_list();/*initializethestructurearray*/for(;;){choice=menu_select();switch(choice){case1:enter();break;case2:deleted();break;case3:list();break;case4:exit(0);}}return0;}/*initializethelist*/voidinit_list(void){registerintt;for(t=0;t4);returnc;}/*Inputaddressintothelist*/voidenter(void){intslot;chars[80];slot=find_free();if(slot==-1)
4. 樸素貝葉斯演算法是什麼
樸素貝葉斯方法是在貝葉斯演算法的基礎上進行了相應的簡化,即假定給定目標值時屬性之間相互條件獨立。
也就是說沒有哪個屬性變數對於決策結果來說佔有著較大的比重,也沒有哪個屬性變數對於決策結果佔有著較小的比重。雖然這個簡化方式在一定程度上降低了貝葉斯分類演算法的分類效果,但是在實際的應用場景中,極大地簡化了貝葉斯方法的復雜性。
樸素貝葉斯分類(NBC)是以貝葉斯定理為基礎並且假設特徵條件之間相互獨立的方法,先通過已給定的訓練集,以特徵詞之間獨立作為前提假設,學習從輸入到輸出的聯合概率分布,再基於學習到的模型,輸入X求出使得後驗概率最大的輸出Y。
個人貢獻:
貝葉斯在數學方面主要研究概率論。他首先將歸納推理法用於概率論基礎理論,並創立了貝葉斯統計理論,對於統計決策函數、統計推斷、統計的估算等做出了貢獻。1763年發表了這方面的論著,對於現代概率論和數理統計都有很重要的作用。貝葉斯的另一著作《機會的學說概論》發表於1758年.貝葉斯所採用的許多術語被沿用至今。
他對統計推理的主要貢獻是使用了"逆概率"這個概念,並把它作為一種普遍的推理方法提出來。貝葉斯定理原本是概率論中的一個定理,這一定理可用一個數學公式來表達,這個公式就是著名的貝葉斯公式。
5. 樸素貝葉斯的推理學習演算法
樸素貝葉斯的推理學習演算法
貝葉斯公式簡易推導式:
樸素貝葉斯的樸素在於假設B特徵的每個值相互獨立,所以樸素貝葉斯的公式是這樣的
學習與分類演算法:
(1)計算先驗概率和條件概率
拉普拉斯平滑:
(2)代入被測樣本向量,得到不同類別P,再根據後驗概率最大化,取P最大的類別作為該標簽類別。
樸素貝葉斯優點在於對於小規模數據很好,適合多分類。缺點是數據輸入形式敏感而且特徵值之間的相互獨立很難保證帶來的影響。
6. 數據挖掘十大經典演算法(1)——樸素貝葉斯(Naive Bayes)
在此推出一個演算法系列的科普文章。我們大家在平時埋頭工程類工作之餘,也可以抽身對一些常見演算法進行了解,這不僅可以幫助我們拓寬思路,從另一個維度加深對計算機技術領域的理解,做到觸類旁通,同時也可以讓我們搞清楚一些既熟悉又陌生的領域——比如數據挖掘、大數據、機器學習——的基本原理,揭開它們的神秘面紗,了解到其實很多看似高深的領域,其實背後依據的基礎和原理也並不復雜。而且,掌握各類演算法的特點、優劣和適用場景,是真正從事數據挖掘工作的重中之重。只有熟悉演算法,才可能對紛繁復雜的現實問題合理建模,達到最佳預期效果。
本系列文章的目的是力求用最干練而生動的講述方式,為大家講解由國際權威的學術組織the IEEE International Conference on Data Mining (ICDM) 於2006年12月評選出的數據挖掘領域的十大經典演算法。它們包括:
本文作為本系列的第一篇,在介紹具體演算法之前,先簡單為大家鋪墊幾個數據挖掘領域的常見概念:
在數據挖掘領域,按照演算法本身的行為模式和使用目的,主要可以分為分類(classification),聚類(clustering)和回歸(regression)幾種,其中:
打幾個不恰當的比方 :
另外,還有一個經常有人問起的問題,就是 數據挖掘 和 機器學習 這兩個概念的區別,這里一句話闡明我自己的認識:機器學習是基礎,數據挖掘是應用。機器學習研製出各種各樣的演算法,數據挖掘根據應用場景把這些演算法合理運用起來,目的是達到最好的挖掘效果。
當然,以上的簡單總結一定不夠准確和嚴謹,更多的是為了方便大家理解打的比方。如果大家有更精當的理解,歡迎補充和交流。
好了,鋪墊了這么多,現在終於進入正題!
作為本系列入門的第一篇,先為大家介紹一個容易理解又很有趣的演算法—— 樸素貝葉斯 。
先站好隊,樸素貝葉斯是一個典型的 有監督的分類演算法 。
光從名字也可以想到,要想了解樸素貝葉斯,先要從 貝葉斯定理 說起。
貝葉斯定理是我們高中時代學過的一條概率學基礎定理,它描述了條件概率的計算方式。不要怕已經把這些知識還給了體育老師,相信你一看公式就能想起來。
P(A|B)表示事件B已經發生的前提下,事件A發生的概率,叫做事件B發生下事件A的條件概率。其基本求解公式為:
其中,P(AB)表示A和B同時發生的概率,P(B)標識B事件本身的概率。
貝葉斯定理之所以有用,是因為我們在生活中經常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關心P(B|A)。
而貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯定理:
有了貝葉斯定理這個基礎,下面來看看樸素貝葉斯演算法的基本思路。
你看,其思想就是這么的樸素。那麼,屬於每個分類的概率該怎麼計算呢?下面我們先祭出形式化語言!
那麼現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:
因為分母對於所有類別為常數,因為我們只要將分子最大化皆可。又因為各特徵屬性是條件獨立的,所以有:
如果你也跟我一樣,對形式化語言有嚴重生理反應,不要怕,直接跳過前面這一坨,我們通過一個鮮活的例子,用人類的語言再解釋一遍這個過程。
某個醫院早上收了六個門診病人,如下表。
現在又來了第七個病人,是一個打噴嚏的建築工人。請問他最有可能患有何種疾病?
本質上,這就是一個典型的分類問題, 症狀 和 職業 是特徵屬性, 疾病種類 是目標類別
根據 貝葉斯定理
可得
假定"打噴嚏"和"建築工人"這兩個特徵是獨立的,因此,上面的等式就變成了
這是可以計算的。
因此,這個打噴嚏的建築工人,有66%的概率是得了感冒。同理,可以計算這個病人患上過敏或腦震盪的概率。比較這幾個概率,就可以知道他最可能得什麼病。
接下來,我們再舉一個樸素貝葉斯演算法在實際中經常被使用的場景的例子—— 文本分類器 ,通常會用來識別垃圾郵件。
首先,我們可以把一封郵件的內容抽象為由若干關鍵片語成的集合,這樣是否包含每種關鍵詞就成了一封郵件的特徵值,而目標類別就是 屬於垃圾郵件 或 不屬於垃圾郵件
假設每個關鍵詞在一封郵件里出現與否的概率相互之間是獨立的,那麼只要我們有若干已經標記為垃圾郵件和非垃圾郵件的樣本作為訓練集,那麼就可以得出,在全部垃圾郵件(記為Trash)出現某個關鍵詞Wi的概率,即 P(Wi|Trash)
而我們最重要回答的問題是,給定一封郵件內容M,它屬於垃圾郵件的概率是多大,即 P(Trash|M)
根據貝葉斯定理,有
我們先來看分子:
P(M|Trash) 可以理解為在垃圾郵件這個范疇中遇見郵件M的概率,而一封郵件M是由若干單詞Wi獨立匯聚組成的,只要我們所掌握的單詞樣本足夠多,因此就可以得到
這些值我們之前已經可以得到了。
再來看分子里的另一部分 P(Trash) ,這個值也就是垃圾郵件的總體概率,這個值顯然很容易得到,用訓練集中垃圾郵件數除以總數即可。
而對於分母來說,我們雖然也可以去計算它,但實際上已經沒有必要了,因為我們要比較的 P(Trash|M) 和 P(non-Trash|M) 的分母都是一樣的,因此只需要比較分子大小即可。
這樣一來,我們就可以通過簡單的計算,比較郵件M屬於垃圾還是非垃圾二者誰的概率更大了。
樸素貝葉斯的英文叫做 Naive Bayes ,直譯過來其實是 天真的貝葉斯 ,那麼他到底天真在哪了呢?
這主要是因為樸素貝葉斯的基本假設是所有特徵值之間都是相互獨立的,這才使得概率直接相乘這種簡單計算方式得以實現。然而在現實生活中,各個特徵值之間往往存在一些關聯,比如上面的例子,一篇文章中不同單詞之間一定是有關聯的,比如有些詞總是容易同時出現。
因此,在經典樸素貝葉斯的基礎上,還有更為靈活的建模方式—— 貝葉斯網路(Bayesian Belief Networks, BBN) ,可以單獨指定特徵值之間的是否獨立。這里就不展開了,有興趣的同學們可以做進一步了解。
最後我們來對這個經典演算法做個點評:
優點:
缺點:
好了,對於 樸素貝葉斯 的介紹就到這里,不知道各位看完之後是否會對數據挖掘這個領域產生了一點興趣了呢?
7. 有什麼關於 Spark 的書推薦
附錄從spark的角度解釋了Scala,並詳細解釋了Scala函數編程和面向對象編程。
8. 樸素貝葉斯
在所有的機器學習分類演算法中,樸素貝葉斯和其他絕大多數的分類演算法都不同。對於大多數的分類演算法,比如決策樹,KNN,邏輯回歸,支持向量機等,他們都是判別方法,但是樸素貝葉斯卻是生成方法。
如何理解這句話,看例題:
根據上述數據集,如果一對男女朋友,男生想女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請你判斷一下女生是嫁還是不嫁?
這里我們聯繫到樸素貝葉斯公式:
p(不帥、性格不好、身高矮、不上進|嫁) = p(不帥|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上進|嫁)---------->要使這個公式成立,需要各個特徵之間相互獨立。
而樸素貝葉斯演算法就是假設各個特徵之間相互獨立。
1、假如沒有這個假設,那麼我們對右邊這些概率的估計其實是不可做的,這么說,我們這個例子有4個特徵,其中帥包括{帥,不帥},性格包括{不好,好,爆好},身高包括{高,矮,中},上進包括{不上進,上進},那麼四個特徵的聯合概率分布總共是4維空間,總個數為2*3*3*2=36個。36個,計算機掃描統計還可以,但是現實生活中,往往有非常多的特徵,每一個特徵的取值也是非常之多,那麼通過統計來估計後面概率的值,變得幾乎不可做,這也是為什麼需要假設特徵之間獨立的原因。
2、假如我們沒有假設特徵之間相互獨立,那麼我們統計的時候,就需要在整個特徵空間中去找,比如統計p(不帥、性格不好、身高矮、不上進|嫁)。我們就需要在嫁的條件下,去找四種特徵全滿足分別是不帥,性格不好,身高矮,不上進的人的個數,這樣的話,由於數據的稀疏性,很容易統計到0的情況。 這樣是不合適的。
根據上面倆個原因,樸素貝葉斯法對條件概率分布做了條件獨立性的假設,由於這是一個較強的假設,樸素貝葉斯也由此得名!這一假設使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類准確率。
所以公式整理以後變為:
整理訓練數據中,嫁的樣本數如下:
分別計算各個概率:
p(嫁) = 6/12(總樣本數) = 1/2
p(不帥|嫁) = 3/6 = 1/2
p(性格不好|嫁)= 1/6
p(矮|嫁) = 1/6
p(不上進|嫁) = 1/6
總樣本為:
p(不帥) = 4/12 = 1/3
p(性格不好) = 4/12 = 1/3
p(身高矮) = 7/12
p(不上進) = 4/12 = 1/3
將以上概率帶入公式,就能得出嫁的概率。
總結:理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因為樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。
而在屬性相關性較小時,樸素貝葉斯性能最 為良好。
9. Spark的機器學習庫MLLib為什麼沒有實現高斯分布的樸素貝葉斯
所謂的大數據平台不是獨立存在的,比如網路是依賴搜索引擎獲得大數據並開展業務的,阿里是通過電子商務交易獲得大數據並開展業務的,騰訊是通過社交獲得大數據並開始業務的,所以說大數據平台不是獨立存在的,重點是如何搜集和沉澱數據,如何分析數據並挖掘數據的價值。
10. 樸素貝葉斯分類器原理
樸素貝葉斯分類器,實際上也是對人們常識做的一個演算法的完善。其以一種更為精準的量化來判斷分類,使用的方法是後驗概率。本文從與決策樹的比較出發,介紹先驗概率和後驗概率的關系,再詳細介紹一下樸素貝葉斯演算法的流程。
樸素貝葉斯演算法比較簡單,所以此文多是留以面試前復習之用。理清各個問題之間的關系是重點。
與決策樹的比較
我們在學習完經典的決策樹演算法之後,可以有這樣一個認識:決策樹的特點是它總是在沿著特徵做切分。隨著層層遞進,這個劃分會越來越細。大體上就像這樣:
對於決策樹不是很了解的朋友們可以看我這篇文章《經典決策樹演算法》
我今天在此基礎上,在介紹一種在概率框架下實施決策的基本方法。同樣的,這也很符合我們人類的經驗思維。這就是貝葉斯分類器。相比於決策樹,其分類示意如下:
此處的的藍色與紅色交織,就代表著概率的大小。貝葉斯分類器的名字很高大上,其實背後的原理非常簡單。就是根據概率來選擇我們要將某一個個體分在哪一類中。
我們可以這樣去理解貝葉斯分類器。西瓜藤新鮮的瓜甜的概率為0.7,若只看瓜藤,我們就將瓜藤新鮮的瓜判定為甜瓜。我們引入西瓜紋理這一個第二個特徵,假設紋理整齊的瓜甜的概率為0.8。則這時候我們要算出瓜藤新鮮且紋理整齊的瓜甜的概率,比如為0.9(為什麼要大於前兩個概率大家可以思考一下),這樣我們看到紋理和瓜藤這兩個特徵的時候就可以有概率的判斷瓜是否甜了。
這里我們可以類比一下分類決策樹。對於決策樹不是很了解的朋友們可以看我這篇文章《經典決策樹演算法》相比於決策樹將瓜藤新鮮的瓜甜的概率直接轉化成瓜藤新鮮我們就判斷成瓜甜,我們的貝葉斯更是有了一種概率性的容錯性,使得結果更加准確可靠一點。但是貝葉斯分類器對數據有著比決策樹更高的要求,其需要一個比較容易解釋,而且不同維度之間相關性較小的模型。這個我們在之後會細細提及。
先驗概率與後驗概率
我們來看貝葉斯公式:
可見,先驗概率,後驗概率和似然概率關系密切的很。值得注意的是,A和B的順序和這個先驗後驗是有關系的。A和B反了,先驗與後驗也需要反過來。舉個例子來說: 桌子上如果有一塊肉和一瓶醋,你如果吃了一塊肉,然後你覺得是酸的,那你覺得肉里加了醋的概率有多大?
對於這個問題,在吃起來是酸的條件下肉裡面放了醋的概率,便是後驗概率。肉加了醋的前提下吃起來是酸的概率便是似然概率,肉裡面加了醋的概率和吃起來是酸的概率便是先驗概率。
我們可以總結一下,A事件是導致的結果,B事件是導致的原因之一。這里我們吃到肉是酸的,則是各種原因的結果,而肉裡面放了醋則是導致這個A結果的諸多原因之一。為什麼說是之一呢,因為除了放了醋,也有可能是肉變質了等等。
樸素貝葉斯分類演算法
先通過一個經典例子來解釋樸素貝葉斯分類的演算法。由如下表格中的數據學習一個樸素貝葉斯的分類器並確定 的w類標記 ,表格中 , 為特徵,取值的集合分別為 , , 為類標記,
此時我們對於給定的 可以如下計算:
可見 時候後驗概率更大一些。所以
通過以上例子,我們會發現樸素貝葉斯的方法其實就是一種常規做法,拉普拉斯曾經說過,概率論就是將人們的常識使用數學公式表達。接下來我們來看看最完整的樸素貝葉斯分類演算法的數學表達。