數據挖掘基本任務:分類與預測、聚類分析、關聯規則、時序模式、偏差檢測、智能推薦等,幫助企業提取數據中蘊含的商業價值,提高企業的競爭力。
DM過程:
a目標定義(任務理解、指標確定)
b數據採集(建模抽樣、質量把控、實時採集)
c數據整理(數據探索、數據清洗、數據變換)
d構建模型(模式發現、構建模型、驗證模型)
e模型評價(設定評價標準、多模型對比、模型優化)
f模型發佈(模型部署、模型重構)
十大DM算法:
在香港舉辦的2006年度IEEE數據挖掘國際會議ICDM上,與會專家遴選出了十個最有影響力的數據挖掘算法:C4.5、k-means、SVM、Apriori、EM、PageRank、AdaBoost、KNN、NaïveBayes和CART。
1、k-means
k-means算法是一種常用的非監督學習聚類算法,它的作用是在我們不知道有哪些類別的情況下,將數據以K個類心,聚成K個聚類。通常我們會先確定一個相異度度量方法,常用的相異度有:歐式距離、曼哈頓距離、馬氏距離、餘弦距離等。根據兩個數據間的“距離”來確定兩個數據之間的相異度。
k-means算法:
a 所有數據中取K個數據(可隨機,也可選定)作爲K個聚類的初始類心。
b 遍歷所有數據,計算他們到K個類心的“距離”,並將其歸類到對應“距離”最小的那個類心所在的聚類中。
c 根據聚類結果,重新計算K個聚類各自的中心,計算方法是取聚類中所有元素各自維度的算術平均數。
d 若新的類心與之前的類心不同,則重複b、c步驟,直到聚類結果不再變化。
e 將結果輸出。
相異度的計算:相異度就是兩個東西差別有多大。標量、二元變量、分類變量、序數變量、向量的相異度有不同的計算方法。
A 標量
歐幾里得距離:
曼哈頓距離:
閔可夫斯基距離:
歐氏距離和曼哈頓距離可以看做是閔可夫斯基距離在p=2和p=1下的特例.
下面要說一下標量的規格化問題。上面這樣計算相異度的方式有一點問題,就是取值範圍大的屬性對距離的影響高於取值範圍小的屬性。例如上述例子中第三個屬性的取值跨度遠大於前兩個,這樣不利於真實反映真實的相異度,爲了解決這個問題,一般要對屬性值進行規格化。所謂規格化就是將各個屬性值按比例映射到相同的取值區間,這樣是爲了平衡各個屬性對距離的影響。通常將各個屬性均映射到[0,1]區間,映射公式爲:
其中max(ai)和min(ai)表示所有元素項中第i個屬性的最大值和最小值。
B 二元變量
所謂二元變量是隻能取0和1兩種值變量,有點類似布爾值,通常用來標識是或不是這種二值屬性,相異度可用“取值不同的同位屬性數/單個元素的屬性位數”,或者非對稱二元相異度“取值不同的同位屬性數/(單個元素的屬性位數-同取0的位數)”來標識相異度。
C 分類變量
分類變量是二元變量的推廣,類似於程序中的枚舉變量,但各個值沒有數字或序數意義,如顏色、民族等等,對於分類變量,用“取值不同的同位屬性數/單個元素的全部屬性數”來標識其相異度。
D 序數變量
序數變量是具有序數意義的分類變量,通常可以按照一定順序意義排列,如冠軍、亞軍和季軍。對於序數變量,一般爲每個值分配一個數,叫做這個值的秩,然後以秩代替原值當做標量屬性計算相異度。
E 向量
對於向量,由於它不僅有大小而且有方向,所以閔可夫斯基距離不是度量其相異度的好辦法,一種流行的做法是用兩個向量的餘弦度量,其度量公式爲:
其中||X||表示X的歐幾里得範數()。要注意,餘弦度量度量的不是兩者的相異度,而是相似度!
2、Apriori
Apriori是最經典的關聯規則算法,它的作用是依據數據,挖掘各個事物之間的可能關聯(eg:啤酒尿布問題)。Apriori算法使用頻繁項集的先驗知識,使用一種稱作逐層搜索的迭代方法,k項集用於探索(k+1)項集。首先,通過掃描事務(交易)記錄,找出所有的頻繁1項集,該集合記做L1,然後利用L1找頻繁2項集的集合L2,L2找L3,如此下去,直到不能再找到任何頻繁k項集。最後再在所有的頻繁集中找出強規則,即產生用戶感興趣的關聯規則。
定理1:如果一個項集是頻繁的,那麼其所有的子集(subsets)也一定是頻繁的。
定理2:如果一個項集是非頻繁的,那麼其所有的超集(supersets)也一定是非頻繁的。
定理3:如果規則X⟶Y−X不滿足置信度閾值,則對於X的子集X′,規則X′⟶Y−X′也不滿足置信度閾值。
Apriori算法:
Apriori算法採用連接步和剪枝步兩種方式來找出所有的頻繁項集。
這條關聯規則的支持度:support = P(A並B)
這條關聯規則的置信度:confidence= support(A並B)/suport(A)
1) 連接步
爲找出Lk(所有的頻繁k項集的集合),通過將Lk-1(所有的頻繁k-1項集的集合)與自身連接產生候選k項集的集合。候選集合記作Ck。設l1和l2是Lk-1中的成員。記li[j]表示li中的第j項。假設Apriori算法對事務或項集中的項按字典次序排序,即對於(k-1)項集li,li[1] <li[2]<……….li[k-1]。將Lk-1與自身連接,如果(l1[1]=l2[1])&&(l1[2]=l2[2])&&……..&& (l1[k-2]=l2[k-2])&&(l1[k-1]<l2[k-1]),那認爲l1和l2是可連接。連接l1和l2
產生的結果是{l1[1],l1[2],……,l1[k-1],l2[k-1]}。
2) 剪枝步
CK是LK的超集,也就是說,CK的成員可能是也可能不是頻繁的。通過掃描所有的事務(交易),確定CK中每個候選的計數,判斷是否小於最小支持度計數,如果不是,則認爲該候選是頻繁的。爲了壓縮Ck,可以利用Apriori性質:任一頻繁項集的所有非空子集也必須是頻繁的,反之,如果某個候選的非空子集不是頻繁的,那麼該候選肯定不是頻繁的,從而可以將其從CK中刪除。
(Tip:爲什麼要壓縮CK呢?因爲實際情況下事務記錄往往是保存在外存儲上,比如數據庫或者其他格式的文件上,在每次計算候選計數時都需要將候選與所有事務進行比對,衆所周知,訪問外存的效率往往都比較低,因此Apriori加入了所謂的剪枝步,事先對候選集進行過濾,以減少訪問外存的次數。可能產生大量的候選集,以及可能需要重複掃描數據庫,是Apriori算法的兩大缺點。)
eg:
3、Naïve Bayes(樸素貝葉斯)
樸素貝葉斯是很經典的統計分類方法,屬於監督學習,它的理論依據是貝葉斯原理。
即,也是最爲簡單的貝葉斯分類器。
叫它樸素貝葉斯分類是因爲這種方法的思想真的很樸素,樸素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認爲此待分類項屬於哪個類別。通俗來說,就好比這麼個道理,你在街上看到一個黑人,我問你你猜這哥們哪裏來的,你十有八九猜非洲。爲什麼呢?因爲黑人中非洲人的比率最高,當然人家也可能是美洲人或亞洲人,但在沒有其它可用信息下,我們會選擇條件概率最大的類別,這就是樸素貝葉斯的思想基礎。
NaiveBayes算法:
A 假設有一個可由n個獨立屬性表示的待分類項其中爲n個獨立屬性.
B 已知有m個類別
C 求條件概率
D 取上面條件概率的最大值,其對應的類別即爲待分類項所在的類別
可見,條件概率的計算是算法中的關鍵與難點,這個時候就需要用到貝葉斯公式了。假設我們有一定量的訓練樣本,其中是已經分類過的待分類項。下面是條件概率的計算步驟:
A 統計計算每個類別的頻率,即
B 統計計算每個特徵屬性在每個類別中的條件概率,即
C 以及貝葉斯公式可得 (一個屬性下某類別的概率 = 某類別的概率*某類別下此屬性的概率/此屬性在所有類別下的概率總和)
又因爲屬性相互獨立,可得
另外根據全概率公式可知
根據以上公式,即可求得待分類項對於每個類別的條件概率。
實驗上,我們通常用一部分數據作爲訓練樣本,用一部分數據作爲測試樣本,以避免過度擬合。理論上說,樸素貝葉斯的分類效果應該優於決策樹分類的,但是實際生活中樸素貝葉斯的效果卻不太理想,因爲很難保證各特徵屬性相互獨立。
樸素貝葉斯的分類流程:
4、KNN(K近鄰算法)
KNN(K Nearest Neighbor)算法與K-Means算法有相似之處,但是KNN算法嚴格來說是一種歸類算法,應屬於半監督學習。KNN算法算是最簡單的歸類算法了,這個算法是機器學習裏面一個比較經典的算法, 總體來說KNN算法是相對比較容易理解的算法。其中的K表示最接近自己的K個數據樣本。KNN算法和K-Means算法不同的是,K-Means算法用來聚類,用來判斷哪些東西是一個比較相近的類型,而KNN算法是用來做歸類的,也就是說,有一個樣本空間裏的樣本分成很幾個類型,然後,給定一個待分類的數據,通過計算接近自己最近的K個樣本來判斷這個待分類數據屬於哪個分類。你可以簡單的理解爲由那離自己最近的K個點來投票決定待分類數據歸爲哪一類。
與K-means算法相同,這裏面同樣涉及到了相異度度量的問題,我們需要設定一個度量想法來確定兩個項之間的相異度,如,歐氏距離,餘弦距離,曼哈頓距離等。
wikipedia官方解釋上有這樣一張圖片:
問其中帶問號的點屬於什麼類別,
· 當K==3,那麼我們統計得到,離帶問號的點最接近的3個點中2個紅色三角,1個藍色正方,那麼根據KNN算法,該點與紅色三角屬於同一類別。
· 當K==5,那麼我們統計得到,離帶問號的點最接近的3個點中2個紅色三角,3個藍色正方,那麼根據KNN算法,該點與藍色正方屬於同一類別。
由此可見,K的取值對於待分類項是一個關鍵問題
· 如果選擇較小的K值,就相當於用較小的領域中的訓練實例進行預測,“學習”近似誤差會減小,只有與輸入實例較近或相似的訓練實例纔會對預測結果起作用,與此同時帶來的問題是“學習”的估計誤差會增大,換句話說,K值的減小就意味着整體模型變得複雜,容易發生過擬合;
· 如果選擇較大的K值,就相當於用較大領域中的訓練實例進行預測,其優點是可以減少學習的估計誤差,但缺點是學習的近似誤差會增大。這時候,與輸入實例較遠(不相似的)訓練實例也會對預測器作用,使預測發生錯誤,且K值的增大就意味着整體的模型變得簡單。
· K=N,則完全不足取,因爲此時無論輸入實例是什麼,都只是簡單的預測它屬於在訓練實例中最多的累,模型過於簡單,忽略了訓練實例中大量有用信息。
5、SVM(支持向量機算法)
支持向量機算法應用領域十分廣泛,圖像分類,數據分類,統計迴歸等等,是十分經典的監督式學習算法。
最簡單的SVM分類就是線性分類,如下圖
這個圖大家應該都不陌生,就是用一個線性方程將所有數據分爲兩類,當然這也是最簡單的情況了,況且就算這樣簡單的情況下,線性方程也仍然不唯一,如下圖
哪種分法最好呢??一般來說,能夠與兩個類別的界限越明晰,分類越好,怎麼理解,如下圖
藍點和紅點分別是兩個類別中距離分類線最近的點,它們與分類線的距離越大,那麼分類效果就越好,這幾個點就是支持向量。這個原則也也成爲Maximum Marginal(最大間距),是SVM的一個理論基礎之一。
當然你一定也想到了,當所有的點並不能用一條線分類的時候怎麼辦,就如下面的圖
左邊的圖明顯不能用一條直線劃分,這個時候,我們有兩種選擇
a. 將數據從原來的線性空間投射到高維的空間裏,並在高維的空間裏進行超平面劃分,如果還是不行,就向更高維空間投射(記得看過一本書說總能在某一個高維空間進行劃分,不知道是否嚴謹),關於投射變換,就跟核函數有關係,核函數有很多種
b. 依舊使用線性劃分,但是允許誤差,這裏面又會引入懲罰函數的概念
6、Decision Tree(決策樹算法)
決策樹(decision tree)是一個樹結構(可以是二叉樹或非二叉樹)。其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作爲決策結果。
決策樹在決策分析與風險評估等領域有十分廣泛的應用,屬於監督學習,它在一定程度上可以作爲趨勢探測。樸素貝葉斯分類與貝葉斯網絡兩種分類算法都以貝葉斯定理爲基礎,可以對分類及決策問題進行概率推斷。相比貝葉斯算法,決策樹的優勢在於構造過程不需要任何領域知識或參數設置,因此在實際應用中,對於探測式的知識發現,決策樹更加適用。
如下圖是預測一個人是否擁有電腦的簡單決策樹模型:
這種圖相信大家都一眼能夠看懂,在建立這個樹的時候,我們假設每個數據項都有屬性“年齡”,“是否學生”,“信用等級”等特徵屬性,那麼我們在建立樹的時候,就需要考慮每到一個結點應該使用什麼屬性合適。這裏就要引入三個概念,一個是“熵”,一個是“期望熵”,另一個是“信息增益”:
· 熵:熵是接收的每條消息中包含的信息的平均量,信息論中,熵的計算方法是:,其中P(xi)是指第i個類別在整個訓練樣本中的比例
· 期望熵:我們以屬性A對訓練樣本進行劃分,那麼期望熵即爲,按照屬性A,訓練樣本可以劃分爲v個類別。
· 信息增益:兩個概率分佈相異度的一種度量,非對稱的(來之維基百科),其定義,對於分類來講,信息增益越大分類效果越好,決策樹也就越簡潔。就比如兩個分類,我們以天氣來決策是否出去:1.不下雨就出去,下雨就不出去。2.不下雨可能出去可能不出去,不下雨就不出去。那麼分類1就會比分類2的效果好一點,對於天氣這個屬性來說,分類1的信息增益也會比分類2的信息增益大。
由上面我們可以知道,在每次選擇屬性作爲決策結點時,我們通常選擇當前信息增益最大的屬性。這也是數據挖掘領域經典的ID3算法。
ID3算法的一個缺陷就是偏向於選擇取值多的屬性。爲了解決這個問題,又引入了C4.5算法,其基於ID3算法做了部分改進,其中最主要的一條就是將信息增益換做了增益率來選擇屬性作爲決策結點。
C4.5算法首先定義了“分裂信息”,其定義可以表示成:
設D爲用類別對訓練元組進行的劃分,然後,增益率被定義爲:
C4.5選擇具有最大增益率的屬性作爲分裂屬性,其具體應用與ID3類似
另外,決策樹模型在應用的時候,也常和啓發式方法結合,可以達到優化的效果。
在決策樹構造過程中可能會出現這種情況:所有屬性都作爲分裂屬性用光了,但有的子集還不是純淨集,即集合內的元素不屬於同一類別。在這種情況下,由於沒有更多信息可以使用了,一般對這些子集進行“多數表決”,即使用此子集中出現次數最多的類別作爲此節點類別,然後將此節點作爲葉子節點。
在實際構造決策樹時,通常要進行剪枝,這時爲了處理由於數據中的噪聲和離羣點導致的過分擬合問題。剪枝有兩種:
先剪枝——在構造過程中,當某個節點滿足剪枝條件,則直接停止此分支的構造。
後剪枝——先構造完成完整的決策樹,再通過某些條件遍歷樹進行剪枝。
7、EM算法(最大期望算法)
EM算法預備知識:
1) 極大似然估計
極大似然估計就是用來估計模型參數的統計學方法。
eg: 經典問題——學生身高問題
我們需要調查我們學校的男生和女生的身高分佈。 假設你在校園裏隨便找了100個男生和100個女生。他們共200個人。將他們按照性別劃分爲兩組,然後先統計抽樣得到的100個男生的身高。假設他們的身高是服從高斯分佈的。但是這個分佈的均值u和方差∂2我們不知道,這兩個參數就是我們要估計的。記作θ=[u, ∂]T。
問題:我們知道樣本所服從的概率分佈的模型和一些樣本,而不知道該模型中的參數。
問題數學化:(1)樣本集X={x1,x2,…,xN} N=100(2)概率密度:p(xi|θ)抽到男生i(的身高)的概率 100個樣本之間獨立同分布,所以我同時抽到這100個男生的概率就是他們各自概率的乘積。就是從分佈是p(x|θ)的總體樣本中抽取到這100個樣本的概率,也就是樣本集X中各個樣本的聯合概率,用下式表示:
這個概率反映了,在概率密度函數的參數是θ時,得到X這組樣本的概率。需要找到一個參數θ,其對應的似然函數L(θ)最大,也就是說抽到這100個男生(的身高)概率最大。這個叫做θ的最大似然估計量,記爲
求最大似然函數估計值的一般步驟
首先,寫出似然函數:
其次,對似然函數取對數,並整理:
然後,求導數,令導數爲0,得到似然方程;
最後,解似然方程,得到的參數即爲所求。
總結:多數情況下我們是根據已知條件來推算結果,而極大似然估計是已經知道了結果,然後尋求使該結果出現的可能性最大的條件,以此作爲估計值。
2) Jensen不等式
凸函數:設f是定義域爲實數的函數,如果對於所有的實數x,f(x)的二次導數大於等於0,那麼f是凸函數(數學中是凸)。
Jensen不等式表述如下:如果f是凸函數,X是隨機變量,那麼E[f(X)]>=f(E[X])。當且僅當X是常量時,上式取等號。
eg:
圖中,實線f是凸函數,X是隨機變量,有0.5的概率是a,有0.5的概率是b。X的期望值就是a和b的中值了,圖中可以看到E[f(X)]>=f(E[X])成立。
Jensen不等式應用於凹函數時,不等號方向反向。
傳統EM算法詳述:
eg:我們抽取的100個男生和100個女生樣本的身高,但是我們不知道抽取的那200個人裏面的每一個人到底是從男生的那個身高分佈裏面抽取的,還是女生的那個身高分佈抽取的。用數學的語言就是,抽取得到的每個樣本都不知道是從哪個分佈抽取的。這個時候,對於每一個樣本,就有兩個東西需要猜測或者估計:(1)這個人是男的還是女的?(2)男生和女生對應的身高的高斯分佈的參數是多少?
EM算法要解決的問題是:(1)求出每一個樣本屬於哪個分佈(2)求出每一個分佈對應的參數
身高問題使用EM算法求解步驟:
(1)初始化參數:先初始化男生身高的正態分佈的參數:如均值=1.7,方差=0.1
(2)計算每一個人更可能屬於男生分佈或者女生分佈;
(3)通過分爲男生的n個人來重新估計男生身高分佈的參數(最大似然估計),女生分佈也按照相同的方式估計出來,更新分佈。
(4)這時候兩個分佈的概率也變了,然後重複步驟(1)至(3),直到參數不發生變化爲止。
算法推導:
已知:樣本集X={x(1),…,x(m)},包含m個獨立的樣本;
未知:每個樣本i對應的類別z(i)是未知的(相當於聚類);
輸出:我們需要估計概率模型p(x,z)的參數θ;
目標:找到適合的θ和z讓L(θ)最大。
要使L(θ)最大,我們可以不斷最大化下界J,來使得L(θ)不斷提高,達到最大值。
問題:
什麼時候下界J(z,Q)與L(θ)在此點θ處相等?
根據Jensen不等式,自變量X是常數,等式成立。即:
由於,則可以得到:分子的和等於c
在固定參數θ後,使下界拉昇的Q(z)的計算公式,解決了Q(z)如何選擇的問題。這一步就是E步,建立L(θ)的下界。接下來的M步,就是在給定Q(z)後,調整θ,去極大化L(θ)的下界J。
算法流程:
1)初始化分佈參數θ;重複以下步驟直到收斂:
E步驟:根據參數初始值或上一次迭代的模型參數來計算出隱性變量的後驗概率,其實就是隱性變量的期望。作爲隱藏變量的現估計值:
M步驟:將似然函數最大化以獲得新的參數值:
總結:期望最大算法(EM算法)是一種從不完全數據或有數據丟失的數據集(存在隱含變量)中求解概率模型參數的最大似然估計方法。傳統的EM算法對初始值敏感,聚類結果隨不同的初始值而波動較大。總的來說,EM算法收斂的優劣很大程度上取決於其初始參數。
eg:
這是一個拋硬幣的例子,H表示正面向上,T表示反面向上,參數θ表示正面朝上的概率。硬幣有兩個,A和B,硬幣是有偏的。本次實驗總共做了5組,每組隨機選一個硬幣,連續拋10次。如果知道每次拋的是哪個硬幣,那麼計算參數θ就非常簡單了,如上圖所示。
如果不知道每次拋的是哪個硬幣呢?那麼,我們就需要用EM算法,基本步驟爲:1、給θA和θB一個初始值;2、(E-step)估計每組實驗是硬幣A的概率(本組實驗是硬幣B的概率=1-本組實驗是硬幣A的概率)。分別計算每組實驗中,選擇A硬幣且正面朝上次數的期望值,選擇B硬幣且正面朝上次數的期望值;3、(M-step)利用第三步求得的期望值重新計算θA和θB;4、當迭代到一定次數,或者算法收斂到一定精度,結束算法,否則,回到第2步。
稍微解釋一下上圖的計算過程。初始值θA=0.6,θB=0.5。
圖中的0.45是怎麼得來的呢?由兩個硬幣的初始值0.6和0.5,容易得出投擲出5正5反的概率是pA=C(10,5)*(0.6^5)*(0.4^5),pB=C(10,5)*(0.5^5)*(0.5^5), pA/(pA+pB)=0.449, 0.45就是0.449近似而來的,表示第一組實驗選擇的硬幣是A的概率爲0.45。圖中的2.2H,2.2T是怎麼得來的呢? 0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T,表示第一組實驗選擇A硬幣且正面朝上次數的期望值是2.2。其他的值依次類推。
8、AdaBoost算法
Adaboost(Adaptive Boosting)算法是boost算法中最爲經典的算法了,也是分類效果很好的監督式學習算法。“boost”顧名思義就是“提升”的意思,將弱分類器提升爲強分類器,它的核心思想先針對同一訓練集訓練出一定量的弱分類器,然後將這些弱分類器集合成一個強分類器。 下圖是Adaboost算法的官方說明:
y1...yn是n個弱分類器,通過一定方式合並可以得到強分類器YM,當然每個弱分類器的貢獻度不同。一般來說,越到後面的弱分類器貢獻度應該越高。
爲什麼呢?舉個例子,y2的獲得與y1參與有關,我們在訓練某個弱分類器的時候,對於它之前的弱分類器訓練錯誤的數據,我們將加大他們的權重,着重訓練。而對於訓練正確的數據,我們就會減小權重。也就是說,後面訓練成的分類器,一定程度上“學習了它之前的分類器”,這又是adaboost的另一個理論基礎。
算法具體過程:
b for m=1,……M:
1).訓練弱分類器ym(),使其最小化權重誤差函數(在訓練數據集上的誤差率等於將這幾個數據的權值相加)(weightederror function):
2)接下來計算該弱分類器的話語權α(在最終分類器中所佔的權重,誤差率低的弱分類器在最終分類器中佔的權重較大):
3)更新訓練樣本的權值分佈:
其中Zm:
c最後,按弱分類器權重組合各個弱分類器,通過符號函數sign的作用得到一個強分類器:
算法實例:http://blog.csdn.net/gyqjn/article/details/45501185
9、PageRank算法
PageRank算法被廣泛應用於信息檢索等領域,這和TF-IDF算法一樣,但是他們之間又有本質的區別。
PageRank是用來對網頁進行排序的,我們在使用搜索引擎的時候,會先輸入搜索語句,通常會檢索出成千上萬個結果,每一個結果都對應一個網頁,我們自然是不可能打開每個網頁查看。這個時候,這些檢索出來的網頁排序就顯得即爲重要,因爲按照一般人習慣,最多隻會點進排名靠前的幾個或者十幾個網頁。如果你排名靠前的網頁內容不相關或質量較差,會極大地影響用戶體驗。
PageRank中的“Page”並不是網頁的意思,而是這個算法創始人的名字佩奇,也是谷歌創始人之一。這個算法使得當時的谷歌從衆多的搜索引擎中脫穎而出,成爲它的制勝法寶。直到現在,這個算法通過不斷改進,也成爲各大搜索引擎核心理論基礎。
在這個算法出現之前,TF-IDF算法爲通用的算法,通過關鍵字出現頻率等對網頁進行排序,導致很多網頁開發商爲了瀏覽量大量刷新熱點詞等。導致檢索出來的網頁質量都較差。
PangRank算法的核心思想就是一種自動投票機制,與學術引用機制相仿,一篇論文被別的論文引用次數越多,說明這個論文質量越高,越權威。相似的,一個網頁被鏈接得越多,說明這個網頁越加被其他網頁信任,他的質量就會更高。如果它也是被檢索出的網頁之一,那麼在排序時,這個網頁就能獲得較高權重,很有可能排在前面。
所以每個網頁都會有一個PR值,分值從1到10。而且分值間的差距並不是線性的,5到6之間的差距可能是4到5之間差距的5、6倍。每個網頁會對它鏈接的網頁貢獻PR值,它鏈接的網頁越多,那麼它向每個網頁貢獻的PR值就會越小,可以有效防止刷鏈接的現象。這樣所有網頁就會組成一個網絡,每個網頁爲一個結點,需要定時的更新每個網頁的PR值。
這是Pagerank的核心思想,但是仍然有很多缺陷,比如新加入的網頁很容易受到忽略,排名靠前網頁可能內容不夠相關等等。所以實際應用的算法應該複雜得多。
下面鏈接詳細講解了有關PageRank算法的內容,包括個人很感興趣的搜索引擎
http://blog.codinglabs.org/articles/intro-to-pagerank.html
10、TF-IDF算法
TF-IDF算法的思想也很簡單,它被廣泛應用於關鍵字搜索,它的作用就是通過統計的方法給每個關鍵字賦予權值。
舉一個例子:每個人的身份證號可以唯一標記一個人的身份,但是我們仔細觀察可以發現,很多人身份證的前6位是一樣的,那麼這六位對於識別人就沒有那麼大的貢獻,而後面的12位基本很難出現相同,那麼這12位對於標記一個人信息就會有較大的貢獻度。那麼我們怎麼確定一個關鍵詞的貢獻度呢?
TF-IDF的全名是term frequency–inverse documentfrequency,翻譯過來也就是詞頻-逆文檔頻率,下面我們就詞頻和逆文檔頻率分別講解TF-IDF算法:
· TF(詞頻):若一個關鍵詞在一個文檔中大量出現,那麼這個關鍵詞極有可能標識着這個文檔的內容,所以一個關鍵詞對標記一個文檔的貢獻度與其在該文檔中出現的頻率正相關。
· IDF(逆文檔頻率):很容易想到,一些能夠在文檔中大量出現的詞不一定具有代表性。如,“的”“與”這些詞大量使用但是對標記文檔並沒有太大的貢獻。所以如果一個關鍵詞在所有文檔中都高頻出現,那麼我們就需要大大減小它的貢獻度。
一句話說,TF-IDF與一個詞在文檔中的出現次數成正相關,與該詞在整個文檔中的出現次數成負相關。
TF-IDF算法常用於提取關鍵詞,也可以和餘弦相似原理結合來判斷兩個文件的相似度。實際上,TF-IDF算法也常和K-Means算法結合,來給每個類心賦予權值。類似問題,TF-IDF算法均可應用,不僅僅侷限於關鍵詞搜索領域。
參考資源:
- http://blog.csdn.net/dreamgchuan/article/details/51082176
- 算法雜貨鋪——k均值聚類(K-means)
- web挖掘之Apriori算法 JAVA實現
- 算法雜貨鋪——分類算法之樸素貝葉斯分類(Naive Bayesian classification)
- 機器學習中的算法(2)-支持向量機(SVM)基礎
- 支持向量機SVM(一)
- 從最大似然到EM算法淺解
- (EM算法)The EM Algorithm
- AdaBoost–從原理到實現
- 機器學習中的數學(3)-模型組合(Model Combining)之Boosting與Gradient Boosting
- 淺析PageRank算法
- TF-IDF與餘弦相似性的應用(一):自動提取關鍵詞
- TF-IDF與餘弦相似性的應用(二):找出相似文章
- https://en.wikipedia.org/wiki/Tf%E2%80%93idf
- https://en.wikipedia.org/wiki/Entropy
- https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence