絕概率演算法
『壹』 數據挖掘的10大演算法我用大白話講清楚了,新手一看就懂
數據挖掘的10大演算法,新手一看就懂的大白話解釋
數據挖掘主要分為分類演算法、聚類演算法和關聯規則三大類。下面,我將用大白話解釋數據挖掘中的10大經典演算法,幫助新手快速理解。
一、PageRank(連接分析)
PageRank演算法用於評估網頁的重要性。它基於一個簡單原理:一個網頁的入口越多,且入鏈越優質,這個網頁的質量就越高。這就像一個人的微博粉絲數不一定等於他的實際影響力,還需要看粉絲的質量如何。如果是大V或者明星關注,影響力就很高。PageRank還引入了一個阻尼因子的概念,以解決不能直接通過鄰居訪問但仍有影響力的情形。
二、Apriori(關聯分析)
Apriori演算法用於從消費者交易記錄中發掘商品與商品之間的關聯關系。它主要通過支持度、置信度和提升度三個指標來衡量關聯關系的強度。比如,沃爾瑪通過數據分析發現,父親在購買尿不濕時,常常會順便搭配幾瓶啤酒來犒勞自己,於是超市嘗試將啤酒和尿不濕擺在一起銷售,結果銷量都大幅增加。
三、AdaBoost(分類演算法)
AdaBoost演算法是一種將多個弱分類器組合成強分類器的方法。它通過不斷調整樣本權重,使得分類器在後續迭代中更加關注之前分類錯誤的樣本。這就像利用錯題來提升學習效率,做錯的題下次多做點,隨著學習的深入,做錯的題會越來越少。
四、C4.5(決策樹,分類演算法)
C4.5演算法用於生成決策樹,主要用於分類。它選擇信息增益率最大的特徵進行分裂,就像挑西瓜時,先判斷它的紋路,如果很模糊就不是好瓜,如果清晰就是好瓜。
五、CART(決策樹,分類與回歸演算法)
CART演算法既可以用於分類也可以用於回歸。對於分類樹,它選擇基尼系數最小的屬性作為劃分屬性;對於回歸樹,它採用均方誤差或絕對值誤差為標准選取特徵。就像預測明天是陰、晴還是雨屬於分類問題,而預測明天的氣溫是多少度則屬於回歸問題。
六、樸素貝葉斯(分類演算法,條件概率)
樸素貝葉斯演算法是一種簡單有效的分類演算法。它基於概率論原理,通過先驗概率和條件概率推算出後驗概率,取概率最大的分類作為最終結果。就像給病人分類時,給定一個新病人是一個打噴嚏的建築工人,可以計算他患感冒的概率。
七、SVM(支持向量機,分類演算法)
SVM是一種有監督的學習模型,用於二分類問題。它找到具有最小間隔的樣本點,然後擬合出一個到這些樣本點距離和最大的線段/平面。對於非線性分布的數據,可以通過核函數將其映射為線性分布的數據。就像用一根線將桌上的紅球和藍球分成兩部分,或者用一個平面將箱子里的紅球和藍球分成兩部分。
八、KNN(K近鄰,分類與聚類演算法)
KNN演算法是一種既能分類也能回歸的演算法。它通過測量不同特徵值之間的距離來進行分類。對於待分類物體,計算它與其他物體之間的距離,然後選擇K個最近的鄰居,所佔數量最多的類別即為該分類對象的類別。這就像近朱者赤近墨者黑一樣。
九、K-Means(聚類演算法)
K-Means是一種無監督的聚類演算法。它隨機選取K個點為分類中心點,然後將每個點分配到最近的類,形成K個類後重新計算每個類的中心點,直到找到最終的確認參數。這就像大家隨機選K個老大,誰離得近就是那個隊列的人,隨著時間的推移老大的位置在變化,直到選出真正的中心老大。
十、EM(聚類演算法)
EM演算法也叫最大期望演算法,是一種聚類演算法。它先估計一個大概率的可能參數,然後再根據數據不斷地進行調整,直到找到最終的確認參數。這與K-Means演算法的區別在於,EM是計算概率而KMeans是計算距離;EM屬於軟聚類而K-Means屬於硬聚類。這就像分菜時,先分一部分到碟子A中,再把剩餘的分到碟子B中,然後觀察兩個碟子里的菜是否一樣多,哪個多就勻一些到少的那個碟子里,直到份量不發生變化為止。
以上就是數據挖掘中的10大經典演算法的大白話解釋。希望這些解釋能幫助新手更好地理解這些演算法的原理和應用。
『貳』 跪求:37選7中獎概率及演算法
問得很有意思,下面送你一個算頭獎的概率演算法吧
7個數字的排列組合方式有7*6*5*4*3*2*1=5040
37個數取7個出來排列的組合方式有37*36*35*34*33*32*31=51889178880種
故中頭獎的概率為5040/51889178880=9.71300/10*10*10*10*10*10*10*10(8個10)
『叄』 判斷一個大數是否為素數有哪些演算法時間復雜度最低的是哪個
判斷一個大數是否為素數的演算法主要包括概率性演算法和確定性演算法兩大類,其中時間復雜度最低的是AKS演算法。
概率性演算法: 費馬檢測:基於費馬小定理,但存在偽素數,即非素數卻能通過費馬檢測的數。 米勒羅賓檢測:費馬檢測的改進版,通過多次測試減少錯誤率,但仍存在極小概率的誤判。 Baillie–PSW:另一種概率性演算法,結合多種測試以提高准確性,但同樣無法保證絕對正確。
確定性演算法: 試除法:直接嘗試將數n除以所有小於等於√n的整數,若均不能整除則為素數,時間復雜度較高。 改進試除法:通過優化減少不必要的除法操作,但仍屬於試除法的范疇,時間復雜度有所降低但仍是多項式級別。 ECPP:高效但適用於特定類型的數,如某些大素數。 APRCL:另一種高效但條件受限的確定性演算法。 AKS演算法:首個多項式時間復雜度、確定性和無依賴性的素數檢驗演算法,適用於所有類型的數字,是判斷大數素性的黃金標准。
時間復雜度最低的是AKS演算法,它能夠在多項式時間內給出確定性的素數判斷,無需依賴任何未經證實的猜想,為素數判定提供了堅實的理論基礎和高效的實現方式。
『肆』 『終極演算法』摘抄筆記-貝葉斯學派
對於貝葉斯學派來說,學習「僅僅是」貝葉斯定理的另外一個運用,將所有模型當作假設,將數據作為論據:隨著你看到的數據越來越多,有些模型會變得越來越有可能性,而有些則相反,直到理想的模型漸漸突出,成為最終的勝者。
假設你半夜在一個陌生的星球上醒來。雖然你能看到的只是繁星閃爍的天空,你有理由相信太陽會在某個時間點升起,因為多數星球會自傳並繞著自己的太陽轉。所以你估計相應的概率應該會大於1/2(比如說2/3)。我們將其稱為太陽會升起來的「 先驗概率 」,因為這發生在看到任何證據之前。 「先驗概率」的基礎並不是數過去這個星球上太陽升起的次數,因為過去你沒有看到;它反映的是對於將要發生的事情,你優先相信的東西,這建立在你掌握的宇宙常識之上 。但現在星星開始漸漸暗淡,所以你對於太陽會升起的信心越來越強,這建立於你在地球上生存的經歷之上。你的這種信心源自「 後驗概率 」,因為這個概率是 在看到一些證據後得出的。天空開始漸漸變亮,後驗概率又變得更大了 。
貝葉斯通過以下句子概況了這一點:P(原因|結果)隨著P(結果),即結果的先驗概率(也就是在原因不明的情況下結果出現的概率)的下降而下降。最終,其他條件不變,一個原因是前驗的可能性越大,它該成為後驗的可能性就越大。綜上所述,貝葉斯定理認為: P(原因|結果)=P(原因)×P(結果|原因)/ P(結果)
貝葉斯定理之所以有用,是因為通常給定原因後,我們就會知道結果,但我們想知道的是已知結果,如何找出原因。例如,我們知道感冒病人發燒的概率,但真正想知道的是,發燒病人患感冒的概率是多少。
貝葉斯定理作為統計學和機器學習的基礎,受到計算難題和巨大爭論的困擾。你想知道原因也情有可原:這不就是我們之前在感冒的例子中看到的那樣,貝葉斯定理是由條件概率概念得出的直接結果嗎?的確,公式本身沒有什麼問題。爭議在於相信貝葉斯定理的人怎麼知道推導該定理的各個概率,以及那些概率的含義是什麼。 對於多數統計學家來說,估算概率的唯一有效方法就是計算相應事件發生的頻率 。例如,感冒的概率是0.2,因為被觀察的100名病人中,有20名發燒了。這是「頻率論」對於概率的解釋,統計學中占據主導地位的學派就是由此來命名的。但請注意,在日出的例子以及拉普拉斯的無差別原則中,我們會做點不一樣的事:千方百計找到方法算出概率。到底有什麼正當的理由,能夠假設太陽升起的概率是1/2、2/3,或者別的呢?
然而, 貝葉斯學派眼中的概率 。概率並非頻率,而是一種主觀程度上的信任。因此,用概率來做什麼由你決定,而貝葉斯推理讓你做的事就是:通過新證據來修正你之前相信的東西,得到後來相信的東西(也被稱為「轉動貝葉斯手柄」)。
隨著變數的增加,如果有20種症狀和1萬個病人就會遇到之前提到過的組合爆照問題。因此我們會做簡化的假設來減少概率的數量,這些概率的數量由我們估算而來,且我們可以掌控。一個很簡單且受人追捧的假設就是,在給定原因的情況下,所有的結果都相互獨立。如果我們想直接估算P(感冒|發燒、咳嗽等),假如不利用定理先將其轉化成P(發燒、咳嗽等|感冒),那麼我們就還需要指數數量的概率,每個組合的症狀以及感冒或非感冒都有一個概率。
如果學習演算法利用貝葉斯定理,且給定原因時,假定結果相互獨立,那麼該學習演算法被稱為「樸素貝葉斯分類器」。
統計學家喬治·博克斯說的一句很有名的話:「所有的模型都是錯的,但有些卻有用。」雖然一個模型過於簡化,但你有足夠的數據用來估算那就比沒有數據的完美模型要好。令人詫異的是,有些模型錯誤百出,同時又很有用。經濟學家彌爾頓·弗里德曼甚至在一篇很有影響力的文章中提出,最有說服力的理論往往受到最大程度的簡化,只要這些理論所做的預測是准確的,因為它們用最簡潔的方法解釋最復雜的問題。
1913年第一次世界大戰前夕,俄國數學家安德烈·馬爾可夫發表了一篇文章,將所有事情的概率運用到詩歌當中。詩中,他模仿俄國文學的經典:普希金的《尤金·奧涅金》,運用了當今我們所說的「馬爾可夫鏈」。他沒有假定每個字母都是隨機產生的,與剩下的毫無關聯,而是 最低限度引入了順序結構:每個字母出現的概率由在它之前、與它緊接的字母來決定 。
例如母音和輔音常常會交替出現,所以如果你看到一個輔音,那麼下一個字母(忽略發音和空格)很有可能就是母音,但如果字母之間互相獨立,出現母音的可能性就不會那麼大。這可能看起來微不足道,但在計算機發明出來之前的年代,這需要花費數小時來數文字,而馬爾可夫的觀點在當時則很新穎。如果母音i是一個布爾型變數,《尤金·奧涅金》的第i個字母是母音,則該變數為真,如果它是一個輔音則為假。
源於谷歌的 頁面排名 ,本身就是一條馬爾可夫鏈。拉里·佩奇認為, 含有許多鏈接的頁面,可能會比只含幾個的要重要,而且來自重要頁面的鏈接本身也更有價值 。這樣就形成了一種無限倒退,但我們可以利用馬爾可夫鏈來掌控這種倒退。想像一下,一個頁面搜索用戶通過隨機點擊鏈接來從這個頁面跳到另外一個頁面:這時馬爾可夫鏈的狀態就不是文字而是頁面了,這樣問題就變得更為復雜,但數學原理是一樣的。那麼每個頁面的得分就是搜索用戶花在該頁面上的時間,或者等於他徘徊很久後停留在該頁面上的概率。
如果我們測量的不僅僅是母音對輔音的概率,還有字母順序遵循字母表順序的概率,利用與《尤金·奧涅金》一樣的統計數據,我們可以很愉快地生成新的文本:選擇第一個字母,然後在第一個字母的基礎上選擇第二個字母,以此類推。當然結果是一堆沒有意義的數據,但如果我們讓每個字母都依照之前的幾個字母而不止一個字母,這個過程就開始聽起來更像一個酒鬼的瘋話,雖然從整體上看沒有意義,但從局部上看卻很連貫。雖然這還不足以通過圖靈測試,但像這樣的模型是機器翻譯系統的關鍵組成部分,比如谷歌翻譯可以讓你看到整版的英文頁面(或者幾乎整版),不管原頁面的語言是什麼。
如果某些狀態組成一條馬爾可夫鏈,但我們看不到它們,得從觀察中將它們推導出來。人們稱其為 隱藏的馬爾可夫模型 ,或者簡稱為HMM(有點誤導人,因為被隱藏的是狀態,而不是模型)。HMM和Siri一樣,處於語音識別系統的中心。在語音識別過程中,隱藏的狀態是書面形式的單詞,而觀察值則是對Siri說的聲音,而目標則是從聲音中推斷出單詞。模型有兩個組成部分:給定當前單詞的情況下,下一個單詞出現的概率和在馬爾可夫鏈中的一樣;在單詞被說出來的情況下,聽到各種聲音的概率。
HMM還是計算生物學家最為喜愛的工具。一個蛋白質分子是一個氨基酸序列,而DNA則是一個鹼基序列。舉個例子,如果我們想預測一個蛋白質分子怎樣才能形成三維形狀,我們可以把氨基酸當作觀察值,把每個點的褶皺類型當作隱藏狀態。同樣, 我們可以用一個HMM來確定DNA中基因開始轉錄的地點,還可以確定其他許多屬性。
如果狀態和觀察值都是連續而非離散變數,那麼HMM就變成人們熟知的卡爾曼濾波器。經濟學家利用卡爾曼濾波器來從數量的時間序列中消除冗餘,比如GDP(國內生產總值)、通貨膨脹、失業率。「真正的」GDP值屬於隱藏的狀態;在每一個時間點上,真值應該與觀察值相似,同時也與之前的真值相似,因為經濟很少會突然跳躍式增長。卡爾曼濾波器會交替使用這兩者,同時會生成流暢的曲線,仍與觀察值一致。
馬爾可夫鏈隱含這樣的猜想:考慮到現在,未來會有條件地獨立於過去。 此外,HMM假設每個觀察值只依賴於對應的狀態。貝葉斯網路對貝葉斯學派來說,就像邏輯與符號學者的關系:一種通用語,可以讓我們很好地對各式各樣的情形進行編碼,然後設計出與這些情形相一致的演算法。我們可以把貝葉斯網路想成「生成模型」,即從概率的角度,形成世界狀態的方法:首先要決定盜竊案或地震是否會發生,然後在此基礎上決定報警器是否會響起,再次在此基礎上決定鮑勃和克萊爾是否會打電話。貝葉斯網路講述這樣的故事:A發生了,接著它導致B的發生;同時,C也發生了,而B和C共同引起D的發生。為了計算特定事件的概率,我們只需將與之相關事件的概率相乘即可。
你身後有幾個士兵:假設夜深人靜時你正帶領排成縱隊的一個排,穿過敵人的領地,而你想確認所有士兵仍在跟著你。你可以停下,自己數人數,但那樣做會浪費太多時間。一個更聰明的辦法就是只問排在你後面的第一個兵:「你後面有幾個兵?」每個士兵都會問自己後面的士兵同一個問題,知道最後一個士兵回答「一個也沒有。」倒數第二個士兵現在可以說「一個」,以此類推,直到回到第一個士兵,每個士兵都會在後面士兵所報數的基礎上加一。現在你知道有多少兵還跟著你,你甚至都不用停下來。
語音識別的方法:Siri用同樣的想法來計算你剛才說的概率,通過它從麥克風中聽到的聲音來進行「報警」。把「Call the police」(報警)想成一排單詞,正以縱隊形式在頁面上行走,「police」想知道它的概率,但要做到這一點,它需要知道「the」的概率;「the」回過頭要知道「call」的概率。所以「call」計算它的概率,然後將其傳遞給「the」,「the」重復步驟並將概率傳遞給「police」。現在「police」知道它的概率了,這個概率受到句子中每個詞語的適當影響,但我們絕不必建立8個概率的完整表格(第一個單詞是否為「call」,第二個是否為「the」,第三個是否為「police」)。實際上,Siri考慮在每個位置中出現的所有單詞,而不僅僅是第一個單詞是否為「call」等,但演算法是一樣的。也許Siri認為,在聲音的基礎上,第一個單詞不是「call」就是「tell」,第二個不是「the」就是「her」,第三個不是「police」就是「please」。個別地,也許最有可能的單詞是「call」、「the」和「please」。但那樣會變成一句沒有意義的話「Call the please」,所以要考慮其他單詞,Siri得出結論,認為句子就是「Call the police」。
然而,最受人青睞的選擇就是借酒澆愁,喝得酩酊大醉,然後整夜都在跌跌撞撞。該選擇的技術術語為「馬爾可夫鏈蒙特卡洛理論」(Markov chain Monte Carlo,MCMC):有「蒙特卡洛」這個部分,是因為這個方法涉及機遇,比如到同名的賭場去,有「馬爾可夫鏈」部分,是因為它涉及採取一系列措施,每個措施只能依賴於前一個措施。MCMC中的思想就是隨便走走,就像眾所周知的醉漢那樣,以這樣的方式從網路的這個狀態跳到另一個狀態。這樣長期下來,每個狀態受訪的次數就與它的概率成正比。人們在談論MCMC時,往往把它當作一種模擬,但它其實不是:馬爾可夫鏈不會模仿任何真實的程序,我們將其創造出來,目的是為了從貝葉斯網路中有效生成樣本,因為貝葉斯網路本身就不是序變模式。
對於貝葉斯學派來說,知識越過模型的結構和參數,進入先驗分布中。原則上,之前的參數可以是任意我們喜歡的值,但諷刺的是,貝葉斯學派趨向於選擇信息量不足的先驗假設(比如將相同概率分配給所有假設),因為這樣更易於計算。在任何情況下,人類都不是很擅長估算概率。對於結構這方面,貝葉斯網路提供直觀的方法來整合知識:如果你認為A直接引起B,那麼應把箭頭從A指向B。
在生物信息中,貝葉斯學習能對單個數據表起作用,表中的每列表示一個變數(例如,一個基因的表達水平),而每行表示一個實例(例如,一個微陣列實驗,包含每個基因被觀察到的水平)。