11種比較常見的機(jī)器學(xué)習(xí)算法簡介
近年來,由于對技術(shù)的高需求和進(jìn)步,機(jī)器學(xué)習(xí)的普及已大大增加。 機(jī)器學(xué)習(xí)可以從數(shù)據(jù)中創(chuàng)造價值的潛力使其吸引了許多不同行業(yè)的企業(yè)。 大多數(shù)機(jī)器學(xué)習(xí)產(chǎn)品都是使用現(xiàn)成的機(jī)器學(xué)習(xí)算法進(jìn)行設(shè)計和實現(xiàn)的,并且需要進(jìn)行一些調(diào)整和細(xì)微更改。
機(jī)器學(xué)習(xí)算法種類繁多,可分為三大類:
- 監(jiān)督學(xué)習(xí)算法在給定一組觀察值的情況下,對特征(獨立變量)和標(biāo)簽(目標(biāo))之間的關(guān)系進(jìn)行建模。 然后,使用該模型使用特征預(yù)測新觀測的標(biāo)簽。 根據(jù)目標(biāo)變量的特性,它可以是分類(離散目標(biāo)變量)或回歸(連續(xù)目標(biāo)變量)任務(wù)。
- 無監(jiān)督學(xué)習(xí)算法試圖在未標(biāo)記的數(shù)據(jù)中找到結(jié)構(gòu)。
- 強(qiáng)化學(xué)習(xí)基于行動獎勵原則。 代理通過迭代計算其行為的報酬來學(xué)習(xí)達(dá)到目標(biāo)。
在本文中,我將介紹前兩類中最常見的算法。
注意:盡管深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一個子領(lǐng)域,但我不會在本文中包含任何深度學(xué)習(xí)算法。 我認(rèn)為深度學(xué)習(xí)算法由于復(fù)雜性和動態(tài)性而應(yīng)分開討論。 此外,我會猶豫地使這篇文章過長,使讀者感到厭煩。
開始吧。
1.線性回歸
線性回歸是一種有監(jiān)督的學(xué)習(xí)算法,它通過對數(shù)據(jù)擬合線性方程,嘗試對連續(xù)目標(biāo)變量和一個或多個自變量之間的關(guān)系進(jìn)行建模。
為了使線性回歸成為一個不錯的選擇,自變量和目標(biāo)變量之間必須存在線性關(guān)系。 有許多工具可以探索變量之間的關(guān)系,例如散點圖和相關(guān)矩陣。 例如,下面的散點圖顯示了自變量(x軸)和因變量(y軸)之間的正相關(guān)。 隨著一個增加,另一個也增加。

線性回歸模型試圖使回歸線適合最能表示關(guān)系或相關(guān)性的數(shù)據(jù)點。 最常用的技術(shù)是普通最小二乘(OLE)。 使用此方法,可以通過最小化數(shù)據(jù)點和回歸線之間距離的平方和來找到最佳回歸線。 對于上面的數(shù)據(jù)點,使用OLE獲得的回歸線看起來像:

2.支持向量機(jī)
支持向量機(jī)(SVM)是一種監(jiān)督學(xué)習(xí)算法,主要用于分類任務(wù),但也適用于回歸任務(wù)。
SVM通過繪制決策邊界來區(qū)分類。 如何繪制或確定決策邊界是SVM算法中最關(guān)鍵的部分。 在創(chuàng)建決策邊界之前,將每個觀察值(或數(shù)據(jù)點)繪制在n維空間中。 " n"是所使用功能的數(shù)量。 例如,如果我們使用"長度"和"寬度"對不同的"單元格"進(jìn)行分類,則觀察結(jié)果將繪制在二維空間中,并且決策邊界為一條線。 如果我們使用3個要素,則決策邊界是3維空間中的平面。 如果我們使用3個以上的特征,則決策邊界將變成一個很難可視化的超平面。

> Decision boundary in 2D space is a line
決策邊界以與支持向量的距離最大的方式繪制。 如果決策邊界距離支持向量太近,它將對噪聲高度敏感并且不能很好地泛化。 即使自變量的很小變化也可能導(dǎo)致分類錯誤。
數(shù)據(jù)點并非總是如上圖所示線性可分離。 在這些情況下,SVM使用內(nèi)核技巧來測量較高維空間中數(shù)據(jù)點的相似性(或接近度),以使它們線性可分離。
內(nèi)核功能是一種相似性度量。 輸入是原始要素,輸出是新要素空間中的相似性度量。 這里的相似度表示緊密度。 實際上將數(shù)據(jù)點轉(zhuǎn)換為高維特征空間是一項昂貴的操作。 該算法實際上并未將數(shù)據(jù)點轉(zhuǎn)換為新的高維特征空間。 內(nèi)核化SVM無需實際進(jìn)行變換就可以根據(jù)高維特征空間中的相似性度量來計算決策邊界。 我認(rèn)為這就是為什么它也稱為內(nèi)核技巧。
在維數(shù)大于樣本數(shù)的情況下,SVM特別有效。 找到?jīng)Q策邊界時,SVM使用訓(xùn)練點的子集而不是所有點,從而提高了存儲效率。 另一方面,大型數(shù)據(jù)集的訓(xùn)練時間會增加,這會對性能產(chǎn)生負(fù)面影響。
3.樸素貝葉斯
樸素貝葉斯是一種用于分類任務(wù)的監(jiān)督學(xué)習(xí)算法。 因此,它也被稱為樸素貝葉斯分類器。
樸素貝葉斯假設(shè)要素彼此獨立,要素之間沒有關(guān)聯(lián)。 但是,現(xiàn)實生活中并非如此。 特征不相關(guān)的這種天真假設(shè)是將該算法稱為"天真"的原因。
樸素貝葉斯算法的直覺是貝葉斯定理:

p(A | B):給定事件B發(fā)生事件A的概率
p(B | A):給定事件A,事件B的概率
p(A):事件A的概率
p(B):事件B的概率
樸素貝葉斯分類器在給定一組特征值(即p(yi | x1,x2,…,xn))的情況下計算類的概率。 將其輸入貝葉斯定理:

p(x1,x2,…,xn | yi)表示給定類別標(biāo)簽的特定特征組合(數(shù)據(jù)集中的觀察值/行)的概率。 我們需要非常大的數(shù)據(jù)集來估計特征值所有不同組合的概率分布。 為了克服這個問題,樸素貝葉斯算法假定所有特征彼此獨立。 此外,可以刪除分母(p(x1,x2,…,xn)),因為它僅對給定觀測值(p(yi | x1,x2,…,xn)的一類條件概率的值進(jìn)行歸一化 )。
類(p(yi))的概率很容易計算:

在特征是獨立的假設(shè)下,p(x1,x2,…,xn | yi)可以寫成:

給定類別標(biāo)簽(即p(x1 | yi))的單個特征的條件概率可以從數(shù)據(jù)中輕松估算。 該算法需要為每個類別獨立存儲特征的概率分布。 例如,如果有5個類別和10個特征,則需要存儲50個不同的概率分布。
將所有這些加在一起,對于樸素貝葉斯算法來說,計算給定特征值(p(yi | x1,x2,…,xn))觀察類的概率變得容易。
與復(fù)雜算法相比,所有特征都是獨立的這一假設(shè)使樸素貝葉斯算法非??臁?在某些情況下,速度比精度更高。 另一方面,相同的假設(shè)使樸素貝葉斯算法不如復(fù)雜算法準(zhǔn)確。 速度是有代價的!
4. Logistic回歸
邏輯回歸是一種監(jiān)督學(xué)習(xí)算法,主要用于二進(jìn)制分類問題。 盡管"回歸"與"分類"相矛盾,但是這里的重點是"邏輯"一詞,指的是在該算法中執(zhí)行分類任務(wù)的邏輯函數(shù)。 邏輯回歸是一種簡單但非常有效的分類算法,因此通常用于許多二進(jìn)制分類任務(wù)。 客戶流失,垃圾郵件,網(wǎng)站或廣告點擊預(yù)測是邏輯回歸提供強(qiáng)大解決方案的一些示例。
邏輯回歸的基礎(chǔ)是邏輯函數(shù),也稱為Sigmoid函數(shù),該函數(shù)可以接受任何實數(shù)值,并將其映射到0到1之間的一個值。

考慮我們有以下線性方程式可以解決:

Logistic回歸模型將線性方程式作為輸入,并使用logistic函數(shù)和對數(shù)賠率執(zhí)行二進(jìn)制分類任務(wù)。 然后,我們將得到著名的邏輯回歸形圖:

我們可以按原樣使用計算出的概率。 例如,輸出可以是"此電子郵件為垃圾郵件的概率為95%"或"客戶點擊此廣告的概率為70%"。 但是,在大多數(shù)情況下,概率用于對數(shù)據(jù)點進(jìn)行分類。 例如,如果概率大于50%,則預(yù)測為肯定類別(1)。 否則,預(yù)測為否定等級(0)。
對于所有高于50%的概率值,并不總是希望選擇肯定的類別。 關(guān)于垃圾郵件案例,我們幾乎必須確定要將電子郵件歸類為垃圾郵件。 由于檢測為垃圾郵件的電子郵件直接進(jìn)入垃圾郵件文件夾,因此我們不希望用戶錯過重要的電子郵件。 除非我們幾乎確定,否則電子郵件不會被歸類為垃圾郵件。 另一方面,在與健康相關(guān)的問題中進(jìn)行分類時,要求我們更加敏感。 即使我們有點懷疑細(xì)胞是惡性的,我們也不想錯過它。 因此,用作正面和負(fù)面類別之間閾值的值取決于問題。 很好的是,邏輯回歸使我們可以調(diào)整此閾值。
5. K最近鄰居(kNN)
K最近鄰(kNN)是一種監(jiān)督學(xué)習(xí)算法,可用于解決分類和回歸任務(wù)。 kNN背后的主要思想是,數(shù)據(jù)點的值或類由其周圍的數(shù)據(jù)點確定。
kNN分類器通過多數(shù)投票原則確定數(shù)據(jù)點的類別。 例如,如果k設(shè)置為5,則檢查5個最接近點的類別。 根據(jù)多數(shù)類別進(jìn)行預(yù)測。 同樣,kNN回歸采用5個最接近點的平均值。 讓我們來看一個例子。 考慮以下屬于4個不同類別的數(shù)據(jù)點:

讓我們看看預(yù)測的類別如何根據(jù)k值變化:


確定最佳k值非常重要。 如果k太低,則模型太具體,不能很好地概括。 它還傾向于對噪聲敏感。 該模型在火車上實現(xiàn)了很高的準(zhǔn)確性,但是對于新的,以前看不見的數(shù)據(jù)點而言,它的預(yù)測能力很差。 因此,我們很可能最終會得出過擬合模型。 另一方面,如果k太大,則模型過于籠統(tǒng),在訓(xùn)練集和測試集上都不是很好的預(yù)測指標(biāo)。 這種情況稱為欠擬合。
kNN簡單易懂。 它沒有做任何假設(shè),因此可以在非線性任務(wù)中實現(xiàn)。 隨著數(shù)據(jù)點數(shù)量的增加,kNN變得非常慢,因為模型需要存儲所有數(shù)據(jù)點。 因此,它也不是有效的存儲器。 kNN的另一個缺點是它對異常值敏感。
6.決策樹
決策樹建立在反復(fù)詢問問題以對數(shù)據(jù)進(jìn)行分區(qū)的基礎(chǔ)上。 使用決策樹的可視化表示來更容易地概念化分區(qū)數(shù)據(jù):

這代表了預(yù)測客戶流失的決策樹。 第一次劃分是基于每月的費用金額。 然后,算法不斷詢問問題以分離類標(biāo)簽。 隨著樹的深入,問題變得更加具體。
決策樹算法的目的是在每個分區(qū)盡可能多地提高預(yù)測性,以便模型不斷獲取有關(guān)數(shù)據(jù)集的信息。 隨機(jī)分割要素通常不能使我們深入了解數(shù)據(jù)集。 增加節(jié)點純度的拆分更具參考價值。 節(jié)點的純度與該節(jié)點中不同類別的分布成反比。 要提出的問題以提高純度或減少雜質(zhì)的方式選擇。
我們問多少個問題? 我們什么時候停止? 我們的樹什么時候足以解決我們的分類問題? 對所有這些問題的答案使我們想到了機(jī)器學(xué)習(xí)中最重要的概念之一:過度擬合。 該模型可以一直詢問問題,直到所有節(jié)點都純?yōu)橹埂?但是,這將是一個過于具體的模型,不能很好地推廣。 它通過訓(xùn)練集可以達(dá)到很高的精度,但是在新的,以前看不見的數(shù)據(jù)點上表現(xiàn)不佳,這表明過擬合。 scikit-learn中決策樹算法的樹深度由max_depth參數(shù)控制。
決策樹算法通常不需要規(guī)范化或縮放特征。 它還適用于混合特征數(shù)據(jù)類型(連續(xù),分類,二進(jìn)制)。 不利的一面是,它很容易過度擬合,因此必須進(jìn)行匯總才能很好地概括。
6.隨機(jī)森林
隨機(jī)森林是許多決策樹的集合。 隨機(jī)森林是使用稱為裝袋的方法構(gòu)建的,其中決策樹用作并行估計器。 如果用于分類問題,則結(jié)果基于從每個決策樹收到的結(jié)果的多數(shù)票。 對于回歸,葉節(jié)點的預(yù)測是該葉中目標(biāo)值的平均值。 隨機(jī)森林回歸采用決策樹結(jié)果的平均值。
隨機(jī)森林減少了過度擬合的風(fēng)險,準(zhǔn)確性比單個決策樹高得多。 此外,隨機(jī)森林中的決策樹并行運行,因此時間不會成為瓶頸。
隨機(jī)森林的成功很大程度上取決于使用不相關(guān)的決策樹。 如果我們使用相同或非常相似的樹,則總體結(jié)果將與單個決策樹的結(jié)果相差無幾。 隨機(jī)森林通過自舉和特征隨機(jī)性來實現(xiàn)具有不相關(guān)的決策樹。
自舉是從訓(xùn)練數(shù)據(jù)中隨機(jī)選擇樣本進(jìn)行替換。 它們稱為引導(dǎo)程序樣本。

> Bootstrap samples (Figure source)
通過為隨機(jī)森林中的每個決策樹隨機(jī)選擇特征來實現(xiàn)特征隨機(jī)性。 可以使用max_features參數(shù)控制隨機(jī)森林中每棵樹使用的特征數(shù)量。

> Feature randomness
隨機(jī)森林是針對許多不同問題的高度精確的模型,不需要規(guī)范化或縮放。 但是,與快速線性模型(即樸素貝葉斯)相比,對于高維數(shù)據(jù)集(即文本分類)而言,這不是一個好選擇。

7.梯度提升決策樹(GBDT)
GBDT是一種集成算法,使用提升方法來組合各個決策樹。
提升意味著將一系列學(xué)習(xí)算法串聯(lián)起來,以從許多順序連接的弱學(xué)習(xí)者那里獲得一個強(qiáng)學(xué)習(xí)者。 對于GBDT,弱學(xué)習(xí)者是決策樹。
每棵樹都試圖最小化前一棵樹的錯誤。 Boosting中的樹是學(xué)習(xí)能力較弱的樹,但是連續(xù)添加許多樹,每棵樹都專注于前一棵樹的錯誤,因此可以構(gòu)建一個高效且準(zhǔn)確的模型。 與裝袋不同,加強(qiáng)不涉及自舉采樣。 每次添加新樹時,它都適合初始數(shù)據(jù)集的修改版本。

由于樹是順序添加的,因此增強(qiáng)算法學(xué)習(xí)緩慢。 在統(tǒng)計學(xué)習(xí)中,學(xué)習(xí)緩慢的模型表現(xiàn)更好。
損失函數(shù)用于檢測殘差。 例如,均方誤差(MSE)可用于回歸任務(wù),對數(shù)損失(對數(shù)損失)可用于分類任務(wù)。 值得注意的是,添加新樹后,模型中的現(xiàn)有樹不會更改。 添加的決策樹適合當(dāng)前模型的殘差。
學(xué)習(xí)速率和n_estimator是用于梯度提升決策樹的兩個關(guān)鍵超參數(shù)。 學(xué)習(xí)率表示為α,僅表示模型學(xué)習(xí)的速度。 每棵新樹都會修改整個模型。 修改的大小由學(xué)習(xí)率控制。 n_estimator是模型中使用的樹數(shù)。 如果學(xué)習(xí)率低,我們需要更多的樹來訓(xùn)練模型。 但是,我們在選擇樹數(shù)時需要非常小心。 使用過多樹木會產(chǎn)生過度擬合的高風(fēng)險。
與隨機(jī)森林相比,GBDT在分類和回歸任務(wù)上都非常有效,并且提供了更準(zhǔn)確的預(yù)測。 它可以處理混合類型的功能,不需要預(yù)處理。 GBDT需要仔細(xì)調(diào)整超參數(shù),以防止模型過度擬合。
GBDT算法是如此強(qiáng)大,以至于已經(jīng)實現(xiàn)了許多升級版本,例如XGBOOST,LightGBM,CatBoost。
關(guān)于過度擬合的注意事項
隨機(jī)森林和梯度增強(qiáng)決策樹之間的一個關(guān)鍵區(qū)別是模型中使用的樹數(shù)。 增加隨機(jī)森林中的樹木數(shù)量不會導(dǎo)致過度擬合。 在某一點之后,模型的準(zhǔn)確性不會因添加更多樹而增加,但也不會因添加過多樹而受到負(fù)面影響。 由于計算原因,您仍然不想添加不必要的樹,但是不存在與隨機(jī)森林中的樹數(shù)相關(guān)聯(lián)的過擬合風(fēng)險。
但是,就過度擬合而言,梯度增強(qiáng)決策樹中的樹數(shù)非常關(guān)鍵。 添加過多的樹會導(dǎo)致過擬合,因此一定要停止添加樹,這一點很重要。
8. K-均值聚類
聚類是一種將一組數(shù)據(jù)點組合在一起的方式,即將相似的數(shù)據(jù)點組合在一起。 因此,聚類算法在數(shù)據(jù)點之間尋找相似性或相異性。 聚類是一種無監(jiān)督的學(xué)習(xí)方法,因此沒有與數(shù)據(jù)點相關(guān)的標(biāo)簽。 聚類算法試圖找到數(shù)據(jù)的底層結(jié)構(gòu)。
聚類不是分類。
分類任務(wù)中的觀測值(或數(shù)據(jù)點)具有標(biāo)簽。 每個觀察結(jié)果根據(jù)一些測量結(jié)果進(jìn)行分類。 分類算法嘗試對觀測值的度量(特征)與其指定的類別之間的關(guān)系建模。 然后,模型預(yù)測新觀測的類別。
K-均值聚類旨在將數(shù)據(jù)分為k個聚類,以使同一聚類中的數(shù)據(jù)點相似,而不同聚類中的數(shù)據(jù)點相距更遠(yuǎn)。 因此,這是一種基于分區(qū)的群集技術(shù)。 兩個點的相似性取決于它們之間的距離。
K-均值聚類試圖使聚類內(nèi)的距離最小化,并使不同聚類之間的距離最大化。 K-均值算法無法確定簇數(shù)。 創(chuàng)建KMeans對象時,我們需要對其進(jìn)行定義,這可能是一項艱巨的任務(wù)。
考慮以下數(shù)據(jù)集的2D可視化:

可以將其劃分為4個不同的群集,如下所示:

現(xiàn)實生活中的數(shù)據(jù)集要復(fù)雜得多,在這些數(shù)據(jù)集中聚類沒有明顯分開。 但是,該算法以相同的方式工作。 K均值是一個迭代過程。 它基于期望最大化算法。 確定群集數(shù)量后,它可以通過執(zhí)行以下步驟來工作:
- 為每個群集隨機(jī)選擇形心(群集的中心)。
- 計算所有數(shù)據(jù)點到質(zhì)心的距離。
- 將數(shù)據(jù)點分配給最近的群集。
- 通過獲取群集中所有數(shù)據(jù)點的平均值,找到每個群集的新質(zhì)心。
- 重復(fù)步驟2,3和4,直到所有點收斂并且聚類中心停止移動。
K-Means聚類相對快速且易于解釋。 它還能夠以智能方式選擇初始質(zhì)心的位置,從而加快收斂速度。
k均值的挑戰(zhàn)之一是必須預(yù)先確定簇的數(shù)量。 K-means算法無法猜測數(shù)據(jù)中存在多少個簇。 如果存在將數(shù)據(jù)中的組分開的非線性結(jié)構(gòu),則k均值將不是一個好的選擇。
9.層次聚類
分層聚類意味著通過迭代分組或分離數(shù)據(jù)點來創(chuàng)建聚類樹。 有兩種類型的層次結(jié)構(gòu)聚類:
- 聚集聚類
- 分裂聚類
分層聚類的優(yōu)點之一是我們不必指定聚類的數(shù)量(但可以)。

聚集聚類是一種自下而上的方法。 首先假定每個數(shù)據(jù)點都是一個單獨的群集。 然后,將相似的群集進(jìn)行迭代組合。

上圖稱為樹狀圖,該圖表示基于樹的方法。 在分層聚類中,樹狀圖用于可視化聚類之間的關(guān)系。
分層聚類的優(yōu)點之一是我們不必預(yù)先指定聚類的數(shù)量。 但是,將所有數(shù)據(jù)點組合到一個群集中是不明智的。 我們應(yīng)該在某個時候停止合并集群。 Scikit-learn為此提供了兩個選項:
- 在達(dá)到多個群集后停止(n_clusters)
- 設(shè)置鏈接的閾值(distance_threshold)。 如果兩個群集之間的距離高于閾值,則這些群集將不會合并。
分裂聚類在現(xiàn)實生活中并不常用,因此我將簡要介紹一下。 簡單而清晰的解釋是分裂聚類與聚集聚類相反。 我們從一個包含所有數(shù)據(jù)點的巨型群集開始。 然后,將數(shù)據(jù)點分為不同的群集。 這是自下而上的方法。
層次集群總是生成相同的集群。 K-均值聚類可能會導(dǎo)致不同的聚類,具體取決于質(zhì)心(聚類中心)的啟動方式。 但是,與k均值相比,它是一種較慢的算法。 分層群集需要很長時間才能運行,尤其是對于大型數(shù)據(jù)集。
10. DBSCAN集群
基于分區(qū)的分層聚類技術(shù)對于標(biāo)準(zhǔn)形狀的聚類非常高效。 但是,當(dāng)涉及到任意形狀的聚類或檢測離群值時,基于密度的技術(shù)更為有效。

> Arbitrary shaped clusters

> Arbitrary shaped clusters
DBSCAN代表帶噪聲的應(yīng)用程序的基于密度的空間聚類。 它能夠找到任意形狀的聚類和帶有噪聲的聚類(即離群值)。
DBSCAN的主要思想是,如果某個點與該簇中的許多點接近,則該點屬于該簇。
DBSCAN有兩個關(guān)鍵參數(shù):
- eps:指定鄰域的距離。 如果兩個點之間的距離小于或等于eps,則將其視為鄰居。
- minPts:定義集群的最小數(shù)據(jù)點數(shù)。
根據(jù)這兩個參數(shù),將點分為核心點,邊界點或離群值:
- 核心點:如果在其半徑為eps的周圍區(qū)域中至少有minPts個點(包括該點本身),則該點為核心點。
- 邊界點:如果一個點可以從核心點到達(dá)并且在其周圍區(qū)域內(nèi)的點數(shù)少于minPts,則它是邊界點。
- 離群值:如果一個點不是核心點并且無法從任何核心點到達(dá),則該點就是離群值。
DBSCAN不需要預(yù)先指定群集數(shù)。 它對異常值具有魯棒性,并且能夠檢測到異常值。
在某些情況下,確定適當(dāng)?shù)泥徲?eps)距離并不容易,并且需要領(lǐng)域知識。
11.主成分分析(PCA)
PCA是降維算法,它基本上從現(xiàn)有特征中衍生出新特征,同時保留了盡可能多的信息。 PCA是一種無監(jiān)督的學(xué)習(xí)算法,但它也廣泛用作有監(jiān)督的學(xué)習(xí)算法的預(yù)處理步驟。
PCA通過查找數(shù)據(jù)集中要素之間的關(guān)系來推導(dǎo)新要素。
注意:PCA是線性降維算法。 也有非線性方法可用。
PCA的目的是通過使用較少的特征(或列)來盡可能多地解釋原始數(shù)據(jù)集中的方差。 新派生的功能稱為主成分。 主成分的順序是根據(jù)它們解釋的原始數(shù)據(jù)集的方差分?jǐn)?shù)確定的。

主要成分是原始數(shù)據(jù)集特征的線性組合。
PCA的優(yōu)勢在于,使用比原始數(shù)據(jù)集少得多的特征可以保留大量原始數(shù)據(jù)集。 主成分根據(jù)其解釋的差異量進(jìn)行排序。