當前位置:首頁 » 操作系統 » bic演算法

bic演算法

發布時間: 2022-12-28 22:39:20

Ⅰ 序列比對及演算法模式的選擇

選擇序列比對的方法:Muscle或者ClustalW。 ClustalW 的基本原理是首先做序列的兩兩比對,根據該兩兩比對計算兩兩距離矩陣,是一種經典的比對方法,使用范圍也比較廣泛。 Muscle 的功能僅限於多序列比對,它的最大優勢是速度,比ClustalW的速度快幾個數量級,而且序列數越多速度的差別越大。方法可以通過點擊圖中上方Alignment或者下方的圖標「W」和「Muscle」來選擇。如果你的序列是 DNA編碼序列 ,就一定要選擇 Align Codons ,因為序列通過密碼子比對比DNA序列的比對會更加真實,避免間隙對比對結果產生的影響。
(但是該選項會因為序列中含有終止密碼而報錯。)
比對之後要去檢查一下比對的情況,有的差異很大的或許是因為序列方向反了,這個時候要把它反轉回來,右擊這條序列,點擊Reverse Complement,反轉後一定要再次點擊比對,檢查是否大部分都對齊了。

分析後返回主頁面,接下來我們要選擇一個最優的模型,提高建樹的精確度。點擊 MODELS 中的 Find Best DNA/Protein Models(ML) 軟體就會根據你的數據幫你計算尋找最適合的模型。
分析計算結果。具有 最低BIC分數 (BayesianInformation Criterion)的模型被認為 是最好地描述替代模式 。對於每個模型,還給出了AICc值(Akaike Information Criterion, corrected,值越低擬合程度越好),以及用來計算上述兩個分值的最大似然值(lnL)和參數數量(包括分支長度)。在這里就可以看到,BIC分數最低的模型是K2+G+I,K2+G+I在這里就是最好的模型。
但因為實際在後面的模型選擇中, 軟體有時沒有提供組合的模型來選擇 ,所以我們繼續看下面的BIC分數,可以找到 單個模型 中得分 最小的 ,就是我們在這里要選擇的最優模型。

Ⅱ BBR演算法中輪數計算方法

        輪數在擁塞演算法中是一個重要的概念,基於丟包的擁塞演算法中,比如reno演算法在擁塞避免階段,每輪進行一次擁塞窗口加1,bic演算法也是每輪進行一次擁塞窗口增加,只是增加的幅度不同,而基於時延的擁塞演算法,如vegas演算法,檢測出一輪內的最小rtt_us值,與rtt_min對比推斷得到當前網路的數據包排隊的情況。這些例子中可以看出,對於演算法的實現都需要考慮輪數的統計。

        那演算法是如何計算輪數的呢?主要分為三種,一種形如reno,bic這類演算法中,輪數的計算建立在 某一輪能發送snd_cwnd個數據包,當累計了snd_cwnd個數據包確認,就為一輪結束。演算法中有個snd_cwnd_cnt變數用來累計當前輪已經收到了多少的數據包確認,當該值大於等於擁塞窗口snd_cwnd,就認為一輪結束了。

以reno為例,w為控制增窗的頻率快慢,reno中等於snd_cwnd

   void tcp_cong_avoid_ai(struct tcp_sock *tp, u32 w)

   {

        if (tp->snd_cwnd_cnt >= w) { //累計了snd_cwnd個ack數據包

            if (tp->snd_cwnd < tp->snd_cwnd_clamp)//未超過申明的最大窗口值

                tp->snd_cwnd++;

             tp->snd_cwnd_cnt = 0; //累計ack個數清零

         } else {//累計ack個數

            tp->snd_cwnd_cnt++;

        }

}

        第二類,如vegas這種基於時延的擁塞演算法中,用序列號進行區分,記錄某一輪的起始點對應的snd_nxt,當snd_nxt所對應的數據包沒有發生重傳,被接收端ack確認的時間即為一個rtt,也就是一輪,如下圖所示,數據包a被ack確認時,只有線段SEQ1以上的數據包是之後發送的,當這區間某個數據包被ack確認,說明已經經過了一輪rtt,新一輪中,只有線段SEQ2以上的數據包是之後發送的。

以vegas演算法為例,

if (after(ack, vegas->beg_snd_nxt)) {

    /* Do the Vegas once-per-RTT cwnd adjustment. */

    /* Save the extent of the current window so we can use this

    * at the end of the next RTT.

    */

    vegas->beg_snd_nxt  = tp->snd_nxt;

    ...

}

        第三種就是bbr演算法中所使用的輪數計算方法,用時間來區分,每個數據包發送都記錄當前交付到對端的數據包個數delivered,某一時刻T為一輪的起始點,對應的交付到對端個數為D,時間小於T的記錄的delivered都小於D,之後發送的數據包記錄的delivered都大於等於D,當接收端收到ack(sack)數據包對應發送的delivered大於等於D,說明T時刻之後發送的數據包至少有個一到達了接收端,即經過了一輪RTT。

        如上圖所示,時刻T1所對應的tp->delivered 為D,那時刻T1右側發送的數據包都是之後發送的,記錄prior_delivered都大於等於D,當兩個重傳數據包被ack確認時,其對應的prior_delivered都為D,說明T1時刻之後發送的兩個數據包經過一個RTT傳輸已經被接收,已經經過了一輪,開始了新一輪,而此時tp->delivered為D+2,之後發送的數據包記錄的prior_delivered都大於等於D+2,當收到ack確認的數據包記錄的prior_delivered大於等於D+2,說明時間已經又過了一輪,新一輪已經開始。

/* See if we've reached the next RTT */

if (!before(rs->prior_delivered, bbr->next_rtt_delivered)) {

    bbr->next_rtt_delivered = tp->delivered;

    bbr->rtt_cnt++;

    bbr->round_start = 1;

    ...

}

rs->prior_delivered就為每個ack(sack)確認的包發送時記錄的tp->delivered值,當其大於等於某一輪起始的delivered值,就為新一輪開始。

        這三種不同的方法,bic演算法中這樣處理是由於比如窗口每輪增加5個包,並不是一輪結束後窗口加5,而是每經過1/5的窗口值就進行擁塞窗口加1的操作。vegas演算法中,需要統計一輪內最小rtt_us,需要知道某一輪的起始和結束點,定期的重置當前輪內追蹤到的最小rtt_us以及調整窗口值。然而,BBR演算法不僅負責擁塞避免階段的發包,而且還接管了擁塞丟包狀態下發包行為,而vegas演算法中的輪數計算只能用於不丟包的open/disorder狀態,假設某個時刻發生大面積丟包,擁塞窗口驟降,需要經過兩三輪的重傳才能重傳完畢,才能推進snd_una,進而更新輪數。這對BBR來說是非常不合適了,因為已經擁塞丟包了,網路狀況很有可能已經變差了,而這時卻因為計算出來的輪數偏小,不能及時的更新最大帶寬值,進而延遲了網路處於擁塞的狀態時間。

Ⅲ TCP擁塞控制及BBR原理分析

導語:TCP擁塞控制不僅僅是網路層的概念,可以將其歸屬於控制論的范疇。在TCP的演進過程中,出現了很多優秀的思想和演算法,以實現網路傳輸過程中,在公平競爭性的前提下,盡可能地利用帶寬資源。本文介紹TCP發展過程中出現的幾種擁塞控制演算法,並著重介紹BBR的原理。

TCP擁塞控制不僅僅是網路層的概念,可以將其歸屬於控制論的范疇。在TCP的演進過程中,出現了很多優秀的思想和演算法,以實現網路傳輸過程中,在公平競爭性的前提下,盡可能地利用帶寬資源。

公平性是在發生擁塞時各源端(或同一源端建立的不同TCP連接或UDP數據報)能公平地共享同一網路資源(如帶寬、緩存等)。處於相同級別的源端應該得到相同數量的網路資源。產生公平性的根本原因在於擁塞發生必然導致數據包丟失,而數據包丟失會導致各數據流之間為爭搶有限的網路資源發生競爭,爭搶能力弱的數據流將受到更多損害。因此,沒有擁塞,也就沒有公平性問題。

TCP層上的公平性問題表現在兩方面:

(1)面向連接的TCP和無連接的UDP在擁塞發生時對擁塞指示的不同反應和處理,導致對網路資源的不公平使用問題。在擁塞發生時,有擁塞控制機制的TCP會按擁塞控制步驟進入擁塞避免階段,從而主動減小發送到網路的數據量。但對無連接的數據報UDP,由於沒有端到端的擁塞控制機制,即使網路出現了擁塞,也不會減少向網路發送的數據量。結果遵守擁塞控制的TCP數據流得到的網路資源越來越少,沒有擁塞控制的UDP則會得到越來越多的網路資源。

(2)TCP連接之間也存在公平性問題。產生問題的原因在於使用了不同的擁塞控制演算法,一些TCP在擁塞前使用了大窗口尺寸,或者它們的RTT較小,或者數據包比其他TCP大,這樣它們也會多佔帶寬。

擁塞控制主要包括四個過程:1)慢啟動;2)擁塞避免;3)擁塞發生;4)快速恢復。

RTT :數據包從發出去到收到對它的ack的來回時間,採用平滑方式計算RTT

RTO :重傳超時。簡單的如RTO=n*RTT, n=3(或其他RTO計算方法)

SACK :TCP Option攜帶多組ACK信息

FR :Fast Retransmission,收到3個p ack後,即可認為發生了丟包。不需要等待RTO超時即可重傳丟失的包。

ER :Early Retransmission,無法產生足夠的pack和沒有新的數據包可以發送進入網路的情況下,減少觸發FR的p ack數量,以達到觸發FR的目的。

TLP :如果發生了尾丟包,由於尾包後面沒有更多的數據包,也就沒有辦法觸發任何的pack。實際上,Google統計超過70%的RTO是尾丟包導致沒有任何p

ack 。TLP演算法是通過發送一個loss probe包,來產生足夠的SACK/FACK的信息以觸發RF。

Pacing :控制發送速率,防止bursting

流控 :Flow control站在單條TCP連接的維度,目的是讓發送方發包的速度,不超過接收方收包的能力。所以流控解決的問題是,如何在接收方可承受的范圍內,讓單條 TCP 連接的速度最大化。通過滑動窗口機制實現。

擁塞控制 :Congestion control站在整個互聯網的維度,讓網路里所有TCP連接最大化共享網路通道的同時,盡可能的少出現網路擁塞現象,讓網路世界裡的每一個參與者既公平又高效。

cwnd :發送窗口,擁塞窗口;在擁塞控制過程中窗口大小值變化。

rwnd :接收窗口,通知發送者能夠發送的數據大小。

sliding window :滑動窗口,只是一種抽象機制概念;在發送請求及收到ack的過程中滑動。

歷史上出現的各種TCP擁塞控制演算法,其本質是針對擁塞控制的四個過程做策略調整。按照演算法依據的因素,可以簡單的分為以下類型:

因為Reno等演算法是後續演算法的基礎,這里詳細的描述下Reno演算法的過程。

(1)慢熱啟動演算法 – Slow Start

(2)擁塞避免演算法 – Congestion Avoidance
當cwnd >= ssthresh時,就會進入「擁塞避免演算法」。演算法如下:

(3)擁塞狀態演算法 – Fast Retransmit
Tahoe是等RTO超時,FR是在收到3個plicate ACK時就開啟重傳,而不用等到RTO超時。擁塞發生時:

(4)快速恢復 – Fast Recovery

Reno演算法以其簡單、有效和魯棒性,應用最廣泛。該演算法所包含的慢啟動、擁塞避免和快速重傳、快速恢復機制,是現有的眾多演算法的基礎。從Reno運行機制中很容易看出,為了維持一個動態平衡,必須周期性地產生一定量的丟失,再加上AIMD機制--減少快,增長慢,尤其是在大窗口環境下,由於一個數據報的丟失所帶來的窗口縮小要花費很長的時間來恢復,這樣,帶寬利用率不可能很高且隨著網路的鏈路帶寬不斷提升,這種弊端將越來越明顯。另外,丟包並不一定是網路擁塞,可能是網路常態,但是基於丟包的擁塞控制並不能區分。

vegas通過對RTT的非常重的監控來計算一個基準RTT。然後通過這個基準RTT來估計當前的網路實際帶寬,如果實際帶寬比我們的期望的帶寬要小或是要多的活,那麼就開始線性地減少或增加cwnd的大小。

中間路由器緩存數據導致RTT變大,認為發生擁塞;RTT不公平性,當不同的數據流對網路瓶頸帶寬進行競爭時,具有較小RTT的TCP數據流的擁塞窗口增加速率將會快於具有大RTT的TCP數據流,從而將會佔有更多的網路帶寬資源。

在發送端做帶寬估計,當探測到丟包時,根據帶寬值來設置擁塞窗口、慢啟動閾值。 那麼,這個演算法是怎麼測量帶寬的?每個RTT時間,會測量一次帶寬,測量帶寬的公式很簡單,就是這段RTT內成功被ACK了多少位元組。Westwood會根據RTT變化來判斷丟包是否是網路擁塞造成的,還是網路常態的丟包。如果時延變化不明顯,就認為是非網路擁塞,此時cwnd減少的比較小。

BIC-TCP是Linux 2.6.18默認擁塞控制演算法,依賴丟包條件觸發。BIC-TCP認為TCP擁塞窗口調整的本質就是找到最適合當前網路的一個發送窗口,為了找到這個窗口值,TCP採取的方式是(擁塞避免階段)每RTT加1,緩慢上升,丟包時下降一半,接著再來慢慢上升。BIC-TCP的提出者們看穿了事情的本質,其實這就是一個搜索的過程,而TCP的搜索方式類似於逐個遍歷搜索方法,可以認為這個值是在1和一個比較大的數(large_window)之間,既然在這個區間內需要搜索一個最佳值,那麼顯然最好的方式就是二分搜索思想。

BIC-TCP就是基於這樣一個二分思想的:當出現丟包的時候,說明最佳窗口值應該比這個值小,那麼BIC就把此時的cwnd設置為max_win,把乘法減小後的值設置為min_win,然後BIC就開始在這兩者之間執行二分思想--每次跳到max_win和min_win的中點。

BIC也具備RTT的不公平性。RTT小的連接,窗口調整發生的速度越快,因此可能更快的搶占帶寬。

CUBIC在設計上簡化了BIC-TCP的窗口調整演算法,在BIC-TCP的窗口調整中會出現一個凹和凸(這里的凹和凸指的是數學意義上的凹和凸,凹函數/凸函數)的增長曲線,CUBIC使用了一個三次函數(即一個立方函數),在三次函數曲線中同樣存在一個凹和凸的部分,該曲線形狀和BIC-TCP的曲線圖十分相似,於是該部分取代BIC-TCP的增長曲線。另外,CUBIC中最關鍵的點在於它的窗口增長函數僅僅取決於連續的兩次擁塞事件的時間間隔值,從而窗口增長完全獨立於網路的時延RTT,使得連接之間保持良好的RRTT公平性。

來看下具體細節:當某次擁塞事件發生時,Wmax設置為此時發生擁塞時的窗口值,然後把窗口進行乘法減小,乘法減小因子設為β,當從快速恢復階段退出然後進入到擁塞避免階段,此時CUBIC的窗口增長開始按照「凹」式增長曲線進行增長,該過程一直持續直到窗口再次增長到Wmax,緊接著,該函數轉入「凸」式增長階段。該方式的增長可以使得窗口一直維持在Wmax附近,從而可以達到網路帶寬的高利用率和協議本身的穩定性。

CUBIC窗口的增長函數:W(t) = C * (t-K)3 + Wmax, 其中C和β為常量。

t為當前時間距上一次窗口減小的時間差,而K就代表該函數從W增長到Wmax的時間周期。

通俗一點講,假如我們知道了Wmax,那麼CUBIC的核心思想就是需要在連續兩次擁塞期間執行完上面的三次函數增長曲線

BBR通過實時計算帶寬和最小RTT來決定發送速率pacing rate和窗口大小cwnd。完全摒棄丟包作為擁塞控制的直接反饋因素。

傳統的擁塞控制演算法是計算cwnd值來規定當前可以發送多少數據,但是並不關注以什麼樣的速度發送數據。如果簡單而粗暴地將窗口大小(send.cwnd、recv.cwnd的最小值)數據全部突發出去,這往往會造成路由器的排隊,在深隊列的情況下,會測量出rtt劇烈地抖動。bbr在計算cwnd的同時,還計算了一個與之適配的pacing rate,該pacing rate規定cwnd指示的一窗數據的數據包之間,以多大的時間間隔發送出去。

我們知道,網路工作的最優點是在物理鏈路延遲狀態下,以最大速率傳輸數據。傳統的擁塞控制演算法思想是根據數據傳輸及ACK來確定RTT,但是這個RTT並不是物理鏈路延時,可能包含了路由器緩存耗時,也可能是擁塞狀態下的耗時。傳統的帶寬計算也是在不斷的試探逼近最優發送窗口,並在RTT或者統計周期內計算帶寬。這種情況下,RTT並不是真正的物理鏈路延遲,帶寬也有可能是在有路由緩存或丟包狀況下計算得到,那麼必然得到的不是精準的值。

BBR摒棄了丟包和實時RTT作為擁塞控制因素。引入BDP管道容量來衡量鏈路傳輸水平。BBR追求的是在鏈路最小RTT(物理鏈路延遲)的狀態下,找到最大帶寬。

首先我們認為網路最優點是可以達到的。下面描述RTT及收包速率與數據包投遞速率的關系。

圖中上半部分的過程可以描述為:隨著數據包投遞速率增加,如果沒有超過最優帶寬,則RTT不會變化,此時的RTT是物理鏈路延遲。隨著投遞速率繼續增加,這時中間路由節點可能出現需要緩存數據包的情況,這會導致RTT變大。如果投遞速率繼續增加,超過路由緩存能力,則可能出現丟包。

圖中下半部分的過程可以描述為:隨著數據包投遞速率增加,如果沒有超過最優帶寬,則發送方確認接收端收到的數據速率增加。隨著投遞速率繼續增加,因為數據包緩存在中間路由,這些包並不能及時得到ACK,因此發送方得到的ACK速率,即發送發確認接收方收到數據的速率會維持不變。如果投遞速率繼續增加,超過路由緩存能力,則可能出現丟包。

1)應答了多少數據,記為delivered;
2)應答1)中的delivered這么多數據所用的時間,記為interval_us。
將上述二者相除,就能得到帶寬:bw = delivered/interval_us;該計算方法不關注數據包ack及順序,是純粹的標量。

我們可以根據圖示很容易算出從Delivered為7時的數據包被確認到X被確認為止,一共有12-7=5個數據包被確認,即這段時間網路上清空了5個數據包。我們便很容易算出帶寬值了。

當10s內沒有發現最小RTTProp時,就要進入ProbeRTT狀態。在ProbeRTT狀態,僅發4MSS/RTT(接近停止發送),從而排空鏈路上的數據包,測量真實的RTTProp。這里帶來的一個問題是,在一個RTT時間內以4MSS速率發送可能會造成抖動,特別是長RTT場景。具體的參考willko文章《GBN手札-BBR實時大數據傳輸之痛》。

Ⅳ Linear least squares,Lasso,ridge regression有何本質區別

Linearleastsquares,Lasso,ridgeregression三者是有本質區別的。一、最小二乘法(Linearleastsquares)。最小二乘法(又稱最小平方法)是一種數學優化技術。它通過最小化誤差的平方和尋找數據的最佳函數匹配。利用最小二乘法可以簡便地求得未知的數據,並使得這些求得的數據與實際數據之間誤差的平方和為最小。最小二乘法還可用於曲線擬合。其他一些優化問題也可通過最小化能量或最大化熵用最小二乘法來表達。二、套索工具(Lasso)演算法。套索工具源於Photoshop,在PhotoshopCS6中,需要自由繪制出形狀不規則的選區時,可以使用套索工具。選擇使用套索工具後,在圖像上拖拽滑鼠指針繪制選區邊界,松開滑鼠左鍵時,選區將會進行自動閉合。套索工具演算法,通過構造一個懲罰函數獲得一個精煉的模型;通過最終確定一些指標的系數為零,套索工具演算法實現了指標集合精簡的目的。這是一種處理具有復共線性數據的有偏估計。套索工具的基本思想是在回歸系數的絕對值之和小於一個常數的約束條件下,使殘差平方和最小化,從而能夠產生某些嚴格等於0的回歸系數,得到解釋力較強的模型。R統計軟體的Lars演算法的軟體包提供了套索工具演算法。根據模型改進的需要,數據挖掘工作者可以藉助於套索工具演算法,利用AIC准則和BIC准則精煉簡化統計模型的變數集合,達到降維的目的。因此,套索工具演算法是可以應用到數據挖掘中的實用演算法。三、嶺回歸演算法(ridgeregression)。在回歸分析中,用一種方法改進回歸系數的最小二乘估計後所得的回歸稱為嶺回歸演算法。在多元回歸方程中,用最小二乘估計求得的回歸系數值盡管是其真值β=(β0,β1,···βp)1的無偏估計,但若將與β分別看成p+1維空間中兩個點的話,它們之間的平均距離E(—β)1(-β)(稱為均方差)仍可能很大,為減小此均方差,用(k)=(X′X+KI)-1X′Y去代替2,稱(K)為β的嶺回歸估計。其中X為各變數的觀測值所構成的一個n×(p+1)階矩陣,Y是隨機變數的觀測值組成的n維向量,I為p+1階單位陣,K是與未知參數有關的參數,選擇它使E{[(K)-β]1[(K)-β]}達到最小。

Ⅳ 生物信息學

一, 生物信息學發展簡介

生物信息學是建立在分子生物學的基礎上的,因此,要了解生物信息學,就

必須先對分子生物學的發展有一個簡單的了解.研究生物細胞的生物大分子的結

構與功能很早就已經開始,1866年孟德爾從實驗上提出了假設:基因是以生物

成分存在[1],1871年Miescher從死的白細胞核中分離出脫氧核糖核酸(DNA),

在Avery和McCarty於1944年證明了DNA是生命器官的遺傳物質以前,人們

仍然認為染色體蛋白質攜帶基因,而DNA是一個次要的角色.

1944年Chargaff發現了著名的Chargaff規律,即DNA中鳥嘌呤的量與胞嘧

定的量總是相等,腺嘌呤與胸腺嘧啶的量相等.與此同時,Wilkins與Franklin

用X射線衍射技術測定了DNA纖維的結構.1953年James Watson 和Francis

Crick在Nature雜志上推測出DNA的三維結構(雙螺旋).DNA以磷酸糖鏈形

成發雙股螺旋,脫氧核糖上的鹼基按Chargaff規律構成雙股磷酸糖鏈之間的鹼基

對.這個模型表明DNA具有自身互補的結構,根據鹼基對原則,DNA中貯存的

遺傳信息可以精確地進行復制.他們的理論奠定了分子生物學的基礎.

DNA雙螺旋模型已經預示出了DNA復制的規則,Kornberg於1956年從大

腸桿菌(E.coli)中分離出DNA聚合酶I(DNA polymerase I),能使4種dNTP連接

成DNA.DNA的復制需要一個DNA作為模板.Meselson與Stahl(1958)用實驗

方法證明了DNA復制是一種半保留復制.Crick於1954年提出了遺傳信息傳遞

的規律,DNA是合成RNA的模板,RNA又是合成蛋白質的模板,稱之為中心

法則(Central dogma),這一中心法則對以後分子生物學和生物信息學的發展都起

到了極其重要的指導作用.

經過Nirenberg和Matthai(1963)的努力研究,編碼20氨基酸的遺傳密碼

得到了破譯.限制性內切酶的發現和重組DNA的克隆(clone)奠定了基因工程

的技術基礎.

正是由於分子生物學的研究對生命科學的發展有巨大的推動作用,生物信息

學的出現也就成了一種必然.

2001年2月,人類基因組工程測序的完成,使生物信息學走向了一個高潮.

由於DNA自動測序技術的快速發展,DNA資料庫中的核酸序列公共數據量以每

天106bp速度增長,生物信息迅速地膨脹成數據的海洋.毫無疑問,我們正從一

個積累數據向解釋數據的時代轉變,數據量的巨大積累往往蘊含著潛在突破性發

現的可能,"生物信息學"正是從這一前提產生的交叉學科.粗略地說,該領域

的核心內容是研究如何通過對DNA序列的統計計算分析,更加深入地理解DNA

序列,結構,演化及其與生物功能之間的關系,其研究課題涉及到分子生物學,

分子演化及結構生物學,統計學及計算機科學等許多領域.

生物信息學是內涵非常豐富的學科,其核心是基因組信息學,包括基因組信

息的獲取,處理,存儲,分配和解釋.基因組信息學的關鍵是"讀懂"基因組的核

苷酸順序,即全部基因在染色體上的確切位置以及各DNA片段的功能;同時在

發現了新基因信息之後進行蛋白質空間結構模擬和預測,然後依據特定蛋白質的

功能進行葯物設計[2].了解基因表達的調控機理也是生物信息學的重要內容,根

據生物分子在基因調控中的作用,描述人類疾病的診斷,治療內在規律.它的研

究目標是揭示"基因組信息結構的復雜性及遺傳語言的根本規律",解釋生命的遺

傳語言.生物信息學已成為整個生命科學發展的重要組成部分,成為生命科學研

究的前沿.

二, 生物信息學的主要研究方向

生物信息學在短短十幾年間,已經形成了多個研究方向,以下簡要介紹一些

主要的研究重點.

1,序列比對(Sequence Alignment)

序列比對的基本問題是比較兩個或兩個以上符號序列的相似性或不相似

性.從生物學的初衷來看,這一問題包含了以下幾個意義[3]:

從相互重疊的序列片斷中重構DNA的完整序列.

在各種試驗條件下從探測數據(probe data)中決定物理和基因圖

存貯,遍歷和比較資料庫中的DNA序列

比較兩個或多個序列的相似性

在資料庫中搜索相關序列和子序列

尋找核苷酸(nucleotides)的連續產生模式

找出蛋白質和DNA序列中的信息成分

序列比對考慮了DNA序列的生物學特性,如序列局部發生的插入,刪除(前

兩種簡稱為indel)和替代,序列的目標函數獲得序列之間突變集最小距離加權

和或最大相似性和,對齊的方法包括全局對齊,局部對齊,代溝懲罰等.兩個

序列比對常採用動態規劃演算法,這種演算法在序列長度較小時適用,然而對於海

量基因序列(如人的DNA序列高達109bp),這一方法就不太適用,甚至採用算

法復雜性為線性的也難以奏效.因此,啟發式方法的引入勢在必然,著名的

BALST和FASTA演算法及相應的改進方法均是從此前提出發的.

2, 蛋白質結構比對和預測

基本問題是比較兩個或兩個以上蛋白質分子空間結構的相似性或不相似性.

蛋白質的結構與功能是密切相關的,一般認為,具有相似功能的蛋白質結構一般

相似.蛋白質是由氨基酸組成的長鏈,長度從50到1000~3000AA(Amino Acids),

蛋白質具有多種功能,如酶,物質的存貯和運輸,信號傳遞,抗體等等.氨基酸

的序列內在的決定了蛋白質的3維結構.一般認為,蛋白質有四級不同的結構.

研究蛋白質結構和預測的理由是:醫葯上可以理解生物的功能,尋找docking

drugs的目標,農業上獲得更好的農作物的基因工程,工業上有利用酶的合成.

直接對蛋白質結構進行比對的原因是由於蛋白質的3維結構比其一級結構

在進化中更穩定的保留,同時也包含了較AA序列更多的信息.

蛋白質3維結構研究的前提假設是內在的氨基酸序列與3維結構一一對應

(不一定全真),物理上可用最小能量來解釋.

從觀察和總結已知結構的蛋白質結構規律出發來預測未知蛋白質的結構.同

源建模(homology modeling)和指認(Threading)方法屬於這一范疇.同源建模用

於尋找具有高度相似性的蛋白質結構(超過30%氨基酸相同),後者則用於比較

進化族中不同的蛋白質結構.

然而,蛋白結構預測研究現狀還遠遠不能滿足實際需要.

3, 基因識別,非編碼區分析研究.

基因識別的基本問題是給定基因組序列後,正確識別基因的范圍和在基因組

序列中的精確位置.非編碼區由內含子組成(introns),一般在形成蛋白質後被丟

棄,但從實驗中,如果去除非編碼區,又不能完成基因的復制.顯然,DNA序

列作為一種遺傳語言,既包含在編碼區,又隱含在非編碼序列中.分析非編碼

區DNA序列目前沒有一般性的指導方法.

在人類基因組中,並非所有的序列均被編碼,即是某種蛋白質的模板,已

完成編碼部分僅占人類基因總序列的3~5%,顯然,手工的搜索如此大的基因序

列是難以想像的.

偵測密碼區的方法包括測量密碼區密碼子(codon)的頻率,一階和二階馬爾

可夫鏈,ORF(Open Reading Frames),啟動子(promoter)識別,HMM(Hidden

Markov Model)和GENSCAN,Splice Alignment等等.

4, 分子進化和比較基因組學

分子進化是利用不同物種中同一基因序列的異同來研究生物的進化,構建進

化樹.既可以用DNA序列也可以用其編碼的氨基酸序列來做,甚至於可通過相

關蛋白質的結構比對來研究分子進化,其前提假定是相似種族在基因上具有相似

性.通過比較可以在基因組層面上發現哪些是不同種族中共同的,哪些是不同的.

早期研究方法常採用外在的因素,如大小,膚色,肢體的數量等等作為進化

的依據.近年來較多模式生物基因組測序任務的完成,人們可從整個基因組的角

度來研究分子進化.在匹配不同種族的基因時,一般須處理三種情況:

Orthologous: 不同種族,相同功能的基因

Paralogous: 相同種族,不同功能的基因

Xenologs: 有機體間採用其他方式傳遞的基因,如被病毒注入的基因.

這一領域常採用的方法是構造進化樹,通過基於特徵(即DNA序列或蛋白

質中的氨基酸的鹼基的特定位置)和基於距離(對齊的分數)的方法和一些傳統

的聚類方法(如UPGMA)來實現.

5, 序列重疊群(Contigs)裝配

根據現行的測序技術,每次反應只能測出500 或更多一些鹼基對的序列,

如人類基因的測量就採用了短槍(shortgun)方法,這就要求把大量的較短的序列

全體構成了重疊群(Contigs).逐步把它們拼接起來形成序列更長的重疊群,直

至得到完整序列的過程稱為重疊群裝配.從演算法層次來看,序列的重疊群是一個

NP-完全問題.

6, 遺傳密碼的起源

通常對遺傳密碼的研究認為,密碼子與氨基酸之間的關系是生物進化歷史上

一次偶然的事件而造成的,並被固定在現代生物的共同祖先里,一直延續至今.

不同於這種"凍結"理論,有人曾分別提出過選擇優化,化學和歷史等三種學說

來解釋遺傳密碼.隨著各種生物基因組測序任務的完成,為研究遺傳密碼的起源

和檢驗上述理論的真偽提供了新的素材.

7, 基於結構的葯物設計

人類基因工程的目的之一是要了解人體內約10萬種蛋白質的結構,功能,

相互作用以及與各種人類疾病之間的關系,尋求各種治療和預防方法,包括葯物

治療.基於生物大分子結構及小分子結構的葯物設計是生物信息學中的極為重要

的研究領域.為了抑制某些酶或蛋白質的活性,在已知其蛋白質3級結構的基礎

上,可以利用分子對齊演算法,在計算機上設計抑制劑分子,作為候選葯物.這一

領域目的是發現新的基因葯物,有著巨大的經濟效益.

8, 其他

如基因表達譜分析,代謝網路分析;基因晶元設計和蛋白質組學數據分析等,

逐漸成為生物信息學中新興的重要研究領域;在學科方面,由生物信息學衍生的

學科包括結構基因組學,功能基因組學,比較基因組學,蛋白質學,葯物基因組

學,中葯基因組學,腫瘤基因組學,分子流行病學和環境基因組學.

從現在的發展不難看出,基因工程已經進入了後基因組時代.我們也有應對

與生物信息學密切相關的如機器學習,和數學中可能存在的誤導有一個清楚的認

識.

三, 生物信息學與機器學習

生物信息的大規模給數據挖掘提出了新課題和挑戰,需要新的思想的加入.

常規的計算機演算法仍可以應用於生物數據分析中,但越來越不適用於序列分析問

題.究竟原因,是由於生物系統本質上的模型復雜性及缺乏在分子層上建立的完

備的生命組織理論.

西蒙曾給出學習的定義:學習是系統的變化,這種變化可使系統做相同工作

時更有效[4].機器學習的目的是期望能從數據中自動地獲得相應的理論,通過采

用如推理,模型擬合及從樣本中學習,尤其適用於缺乏一般性的理論,"雜訊"

模式,及大規模數據集.因此,機器學習形成了與常規方法互補的可行的方法.

機器學習使得利用計算機從海量的生物信息中提取有用知識,發現知識成為可能

[5].

機器學習方法在大樣本,多向量的數據分析工作中發揮著日益重要的作用,

而目前大量的基因資料庫處理需要計算機能自動識別,標注,以避免即耗時又花

費巨大的人工處理方法.早期的科學方法—觀測和假設----面對高數據的體積,

快速的數據獲取率和客觀分析的要求---已經不能僅依賴於人的感知來處理了.因

而,生物信息學與機器學習相結合也就成了必然.

機器學習中最基本的理論框架是建立在概率基礎上的,從某種意義來說,是

統計模型擬合的延續,其目的均為提取有用信息.機器學習與模式識別和統計推

理密切相關.學習方法包括數據聚類,神經網路分類器和非線性回歸等等.隱馬

爾可夫模型也廣泛用於預測DNA的基因結構.目前研究重心包括:1)觀測和

探索有趣的現象.目前ML研究的焦點是如何可視化和探索高維向量數據.一般

的方法是將其約簡至低維空間,如常規的主成分分析(PCA),核主成分分析

(KPCA),獨立成分分析(Independent component analysis),局部線性嵌套(Locally

Linear embedding).2)生成假設和形式化模型來解釋現象[6].大多數聚類方法可

看成是擬合向量數據至某種簡單分布的混合.在生物信息學中聚類方法已經用於

microarray數據分析中,癌症類型分類及其他方向中.機器學習也用於從基因數

據庫中獲得相應的現象解釋.

機器學習加速了生物信息學的進展,也帶了相應的問題.機器學習方法大多

假定數據符合某種相對固定的模型,而一般數據結構通常是可變的,在生物信息

學中尤其如此,因此,有必要建立一套不依賴於假定數據結構的一般性方法來尋

找數據集的內在結構.其次,機器學習方法中常採用"黑箱"操作,如神經網路

和隱馬爾可夫模型,對於獲得特定解的內在機理仍不清楚.

四, 生物信息學的數學問題

生物信息學中數學佔了很大的比重.統計學,包括多元統計學,是生物信息

學的數學基礎之一;概率論與隨機過程理論,如近年來興起的隱馬爾科夫鏈模型

(HMM),在生物信息學中有重要應用;其他如用於序列比對的運籌學;蛋白質

空間結構預測和分子對接研究中採用的最優化理論;研究DNA超螺旋結構的拓

撲學;研究遺傳密碼和DNA序列的對稱性方面的群論等等.總之,各種數學理

論或多或少在生物學研究中起到了相應的作用.

但並非所有的數學方法在引入生物信息學中都能普遍成立的,以下以統計學

和度量空間為例來說明.

1, 統計學的悖論

數學的發展是伴隨悖論而發展的.對於進化樹研究和聚類研究中最顯著的悖

論莫過於均值了,如圖1:

圖1 兩組同心圓的數據集

圖1是兩組同心圓構成的數據集,顯然,兩組數據集的均值均在圓點,這也

就說明了要採用常規的均值方法不能將這兩類分開,也表明均值並不能帶來更多

的數據的幾何性質.那麼,如果數據呈現類似的特有分布時,常有的進化樹演算法

和聚類演算法(如K-均值)往往會得錯誤的結論.統計上存在的陷阱往往是由於

對數據的結構缺乏一般性認識而產生的.

2, 度量空間的假設

在生物信息學中,進化樹的確立,基因的聚類等都需要引入度量的概念.舉

例來說,距離上相近或具有相似性的基因等具有相同的功能,在進化樹中滿足分

值最小的具有相同的父系,這一度量空間的前提假設是度量在全局意義下成立.

那麼,是否這種前提假設具有普適性呢

我們不妨給出一般的描述:假定兩個向量為A,B,其中,

,則在假定且滿足維數間線性無關的前提下,兩個

向量的度量可定義為:

(1)

依據上式可以得到滿足正交不變運動群的歐氏度量空間,這也是大多數生物信息

學中常採用的一般性描述,即假定了變數間線性無關.

然而,這種假設一般不能正確描述度量的性質,尤其在高維數據集時,不考

慮數據變數間的非線性相關性顯然存在問題,由此,我們可以認為,一個正確的

度量公式可由下式給出:

(2)

上式中採用了愛因斯坦和式約定,描述了變數間的度量關系.後者在滿足

(3)

時等價於(1),因而是更一般的描述,然而問題在於如何准確描述變數間的非線

性相關性,我們正在研究這個問題.

五, 幾種統計學習理論在生物信息學中應用的困難

生物信息學中面對的數據量和資料庫都是規模很大的,而相對的目標函數卻

一般難以給出明確的定義.生物信息學面臨的這種困難,可以描述成問題規模的

巨大以及問題定義的病態性之間的矛盾,一般從數學上來看,引入某個正則項來

改善性能是必然的[7].以下對基於這一思想產生的統計學習理論[8],Kolmogorov

復雜性[98]和BIC(Bayesian Information Criterion)[109]及其存在的問題給出簡要介

紹.

支持向量機(SVM)是近來較熱門的一種方法,其研究背景是Vapnik的統計

學習理論,是通過最大化兩個數據集的最大間隔來實現分類,對於非線性問題則

採用核函數將數據集映射至高維空間而又無需顯式描述數據集在高維空間的性

質,這一方法較之神經方法的好處在於將神經網路隱層的參數選擇簡化為對核函

數的選擇,因此,受到廣泛的注意.在生物信息學中也開始受到重視,然而,核

函數的選擇問題本身是一個相當困難的問題,從這個層次來看,最優核函數的選

擇可能只是一種理想,SVM也有可能象神經網路一樣只是機器學習研究進程中

又一個大氣泡.

Kolmogorov復雜性思想與統計學習理論思想分別從不同的角度描述了學習

的性質,前者從編碼的角度,後者基於有限樣本來獲得一致收斂性.Kolmogorov

復雜性是不可計算的,因此由此衍生了MDL原則(最小描述長度),其最初只

適用於離散數據,最近已經推廣至連續數據集中,試圖從編碼角度獲得對模型參

數的最小描述.其缺陷在於建模的復雜性過高,導致在大數據集中難以運用.

BIC准則從模型復雜性角度來考慮,BIC准則對模型復雜度較高的給予大的

懲罰,反之,懲罰則小,隱式地體現了奧卡姆剃刀("Occam Razor")原理,近

年也廣泛應用於生物信息學中.BIC准則的主要局限是對參數模型的假定和先驗

的選擇的敏感性,在數據量較大時處理較慢.因此,在這一方面仍然有許多探索

的空間.

六, 討論與總結

人類對基因的認識,從以往的對單個基因的了解,上升到在整個基因組水平

上考察基因的組織結構和信息結構,考察基因之間在位置,結構和功能上的相互

關系.這就要求生物信息學在一些基本的思路上要做本質的觀念轉變,本節就這

些問題做出探討和思索.

啟發式方法:

Simond在人類的認知一書中指出,人在解決問題時,一般並不去尋找最優

的方法,而只要求找到一個滿意的方法.因為即使是解決最簡單的問題,要想得

到次數最少,效能最高的解決方法也是非常困難的.最優方法和滿意方法之間的

困難程度相差很大,後者不依賴於問題的空間,不需要進行全部搜索,而只要能

達到解決的程度就可以了.正如前所述,面對大規模的序列和蛋白質結構數據集,

要獲得全局結果,往往是即使演算法復雜度為線性時也不能夠得到好的結果,因此,

要通過變換解空間或不依賴於問題的解空間獲得滿意解,生物信息學仍需要人工

智能和認知科學對人腦的進一步認識,並從中得到更好的啟發式方法.

問題規模不同的處理:

Marvin Minsky在人工智慧研究中曾指出:小規模數據量的處理向大規模數

據量推廣時,往往並非演算法上的改進能做到的,更多的是要做本質性的變化.這

好比一個人爬樹,每天都可以爬高一些,但要想爬到月球,就必須採用其他方法

一樣.在分子生物學中,傳統的實驗方法已不適應處理飛速增長的海量數據.同

樣,在採用計算機處理上,也並非依靠原有的計算機演算法就能夠解決現有的數據

挖掘問題.如在序列對齊(sequence Alignment)問題上,在小規模數據中可以採用

動態規劃,而在大規模序列對齊時不得不引入啟發式方法,如BALST,FASTA.

樂觀中的隱擾

生物信息學是一門新興學科,起步於20世紀90年代,至今已進入"後基因

組時代",目前在這一領域的研究人員均呈普遍樂觀態度,那麼,是否存在潛在

的隱擾呢

不妨回顧一下早期人工智慧的發展史[11],在1960年左右,西蒙曾相信不出

十年,人類即可象完成登月一樣完成對人的模擬,造出一個與人智能行為完全相

同的機器人.而至今為止,這一諾言仍然遙遙無期.盡管人工智慧研究得到的成

果已經滲入到各個領域,但對人的思維行為的了解遠未完全明了.從本質來看,

這是由於最初人工智慧研究上定位錯誤以及沒有從認識論角度看清人工智慧的

本質造成的;從研究角度來看,將智能行為還原成一般的形式化語言和規則並不

能完整描述人的行為,期望物理科學的成功同樣在人工智慧研究中適用並不現

實.

反觀生物信息學,其目的是期望從基因序列上解開一切生物的基本奧秘,從

結構上獲得生命的生理機制,這從哲學上來看是期望從分子層次上解釋人類的所

有行為和功能和致病原因.這類似於人工智慧早期發展中表現的樂觀行為,也來

自於早期分子生物學,生物物理和生物化學的成就.然而,從本質上來講,與人

工智能研究相似,都是希望將生命的奧秘還原成孤立的基因序列或單個蛋白質的

功能,而很少強調基因序列或蛋白質組作為一個整體在生命體中的調控作用.我

們因此也不得不思考,這種研究的最終結果是否能夠支撐我們對生物信息學的樂

觀呢 現在說肯定的話也許為時尚早.

綜上所述,不難看出,生物信息學並不是一個足以樂觀的領域,究竟原因,

是由於其是基於分子生物學與多種學科交叉而成的新學科,現有的形勢仍表現為

各種學科的簡單堆砌,相互之間的聯系並不是特別的緊密.在處理大規模數據方

面,沒有行之有效的一般性方法;而對於大規模數據內在的生成機制也沒有完全

明了,這使得生物信息學的研究短期內很難有突破性的結果.那麼,要得到真正

的解決,最終不能從計算機科學得到,真正地解決可能還是得從生物學自身,從

數學上的新思路來獲得本質性的動力.

毫無疑問,正如Dulbecco1986年所說:"人類的DNA序列是人類的真諦,

這個世界上發生的一切事情,都與這一序列息息相關".但要完全破譯這一序列

以及相關的內容,我們還有相當長的路要走.

(來源 ------[InfoBio.org | 生物信息學研討組])http://www.infobio.org
生物信息學(Bioinformatics)是在生命科學的研究中,以計算機為工具對生物信息進行儲存、檢索和分析的科學。它是當今生命科學和自然科學的重大前沿領域之一,同時也將是21世紀自然科學的核心領域之一。其研究重點主要體現在基因組學(Genomics)和蛋白學(Proteomics)兩方面,具體說就是從核酸和蛋白質序列出發,分析序列中表達的結構功能的生物信息。

生物信息學是一門利用計算機技術研究生物系統之規律的學科。

目前的生物信息學基本上只是分子生物學與信息技術(尤其是網際網路技術)的結合體。生物信息學的研究材料和結果就是各種各樣的生物學數據,其研究工具是計算機,研究方法包括對生物學數據的搜索(收集和篩選)、處理(編輯、整理、管理和顯示)及利用(計算、模擬)。

1990年代以來,伴隨著各種基因組測序計劃的展開和分子結構測定技術的突破和Internet的普及,數以百計的生物學資料庫如雨後春筍般迅速出現和成長。對生物信息學工作者提出了嚴峻的挑戰:數以億計的ACGT序列中包涵著什麼信息?基因組中的這些信息怎樣控制有機體的發育?基因組本身又是怎樣進化的?

生物信息學的另一個挑戰是從蛋白質的氨基酸序列預測蛋白質結構。這個難題已困擾理論生物學家達半個多世紀,如今找到問題答案要求正變得日益迫切。諾貝爾獎獲得者W. Gilbert在1991年曾經指出:「傳統生物學解決問題的方式是實驗的。現在,基於全部基因都將知曉,並以電子可操作的方式駐留在資料庫中,新的生物學研究模式的出發點應是理論的。一個科學家將從理論推測出發,然後再回到實驗中去,追蹤或驗證這些理論假設」。

生物信息學的主要研究方向: 基因組學 - 蛋白質組學 - 系統生物學 - 比較基因組學

姑且不去引用生物信息學冗長的定義,以通俗的語言闡述其核心應用即是:隨著包括人類基因組計劃在內的生物基因組測序工程的里程碑式的進展,由此產生的包括生物體生老病死的生物數據以前所未有的速度遞增,目前已達到每14個月翻一番的速度。同時隨著互聯網的普及,數以百計的生物學資料庫如雨後春筍般迅速出現和成長。然而這些僅僅是原始生物信息的獲取,是生物信息學產業發展的初組階段,這一階段的生物信息學企業大都以出售生物資料庫為生。以人類基因組測序而聞名的塞萊拉公司即是這一階段的成功代表。
原始的生物信息資源挖掘出來後,生命科學工作者面臨著嚴峻的挑戰:數以億計的ACGT序列中包涵著什麼信息?基因組中的這些信息怎樣控制有機體的發育?基因組本身又是怎樣進化的?生物信息學產業的高級階段體現於此,人類從此進入了以生物信息學為中心的後基因組時代。結合生物信息學的新葯創新工程即是這一階段的典型應用。

Ⅵ 擁塞演算法

基於包丟失檢測的 Reno、NewReno 或者 cubic 為代表,其主要問題有 Buffer bloat 和長肥管道兩種。和這些演算法不同,bbr 演算法會以時間窗口內的最大帶寬 max_bw 和最小 RTT min_rtt,並以此計算發送速率和擁塞窗口

RTProp : round-trip propagation time BtlBW : bottleneck bandwidth,bbr 演算法關於擁塞窗口的核心就是計算 BtlBW 和 RTprop,根據這兩者值計算 BDP

bbr 演算法輸出 pacing_rate 和 cwnd 兩個數據。pacing_rate 決定發包速率,cwnd 為窗口大小

TCP Tahoe 和 Reno

這兩個演算法是根據其第一次加入到4.3BSD的時間回溯命名的,兩個名字對應自其第一次出現時BSD的代號,而代號分別取自太浩湖(Lake Tahoe)和其附近的城市裡諾市

• Tahoe:如果收到三次重復確認——即第四次收到相同確認號的分段確認,並且分段對應包無負載分段和無改變接收窗口——的話,Tahoe演算法則進入快速重傳,將慢啟動閾值改為當前擁塞窗口的一半,將擁塞窗口降為1個MSS,並重新進入慢啟動階段

• Reno:如果收到三次重復確認,Reno演算法則進入快速重傳,只將擁塞窗口減半來跳過慢啟動階段,將慢啟動閾值設為當前新的擁塞窗口值,進入一個稱為「快速恢復」的新設計階段

Fast recovery

是Reno演算法新引入的一個階段,在將丟失的分段重傳後,啟動一個超時定時器,並等待該丟失分段包的分段確認後,再進入擁塞控制階段。如果仍然超時,則回到慢啟動階段

TCP Vegas

至1990年代中期,TCP量度延遲和RTT都是以傳輸緩存中最後一個被傳送的分段包為准。vegas通過度量傳輸緩存中每個傳送分段包來代替只量度一個分段包,通過每次度量的平均值來增加擁塞窗口。該演算法取名自內華達州最大的城市拉斯維加斯。不過由於一些資源公平性原因,該演算法並沒有在彼得森的實驗室之外廣泛部署。一些研究認為該演算法和其他擁塞演算法混合使用,可能會導致性能競爭不及其他演算法。在各種TCP擁塞演算法的比較研究中,Vegas被認為是最平滑的控制演算法,其次為CUBIC

TCP New Reno

TCP New Reno是對TCP Reno中快速恢復階段的重傳進行改善的一種改進演算法,其定義於RFC 6582,覆蓋了原有在RFC 3782和RFC 2582的舊定義。

在Reno的快速恢復中,一旦出現3次重復確認,TCP發送方會重發重復確認對應序列號的分段並設置定時器等待該重發分段包的分段確認包,當該分段確認包收到後,就立即退出快速恢復階段,進入擁塞控制階段,但如果某個導致重復確認的分段包到遇到重復確認期間所發送的分段包存在多個丟失的話,則這些丟失只能等待超時重發,並且導致擁塞窗口多次進入擁塞控制階段而多次下降。而New Reno的快速恢復中,一旦出現3次重復確認,TCP發送方先記下3次重復確認時已發送但未確認的分段的最大序列號,然後重發重復確認對應序列號的分段包。如果只有該重復確認的分段丟失,則接收方接收該重發分段包後,會立即返回最大序列號的分段確認包,從而完成重發;但如果重復確認期間的發送包有多個丟失,接收方在接收該重發分段後,會返回非最大序列號的分段確認包,從而發送方繼續保持重發這些丟失的分段,直到最大序列號的分段確認包的返回,才退出快速恢復階段。

New Reno在低錯誤率時運行效率和「選擇確認」(Selective ACKnowledgement,SACK)相當,在高錯誤率仍優於Reno

TCP Hybla

TCP Hybla旨在消除由於高延遲地面線路或者衛星無線鏈路下導致的RTT過長而對TCP鏈接的影響。它通過對擁塞窗口動態分析來修改,來減少對RTT的性能依賴

TCP BIC 和 CUBIC

TCP BIC(Binary Increase Congestion control)旨在優化高速高延遲網路(即根據RFC 1072所定義的「長肥網路」(long fat network,LFN))的擁塞控制,其擁塞窗口演算法使用二分搜索演算法嘗試找到能長時間保持擁塞窗口最大值的值。Linux內核在2.6.8至2.6.18使用該演算法作為默認TCP擁塞演算法。

CUBIC則是比BIC更溫和和系統化的分支版本,其使用三次函數代替二分演算法作為其擁塞窗口演算法,並且使用函數拐點作為擁塞窗口的設置值。Linux內核在2.6.19後使用該演算法作為默認TCP擁塞演算法

TCP Westwood和Westwood+

TCP Westwood改良自New Reno,不同於以往其他擁塞控制演算法使用丟失來測量,其通過對確認包測量來確定一個「合適的發送速度」,並以此調整擁塞窗口和慢啟動閾值。其改良了慢啟動階段演算法為「敏捷探測(Agile Probing)」,和設計了一種持續探測擁塞窗口的方法來控制進入「敏捷探測」,使鏈接盡可能地使用更多的帶寬。Westwood+使用更長的帶寬估計間隔和優化的濾波器來修正Westwood對ACK壓縮場景對帶寬估計過高的問題。通過以上改良,TCP Westwood系列演算法在有線網路和無線網路的擁塞控制上獲取平衡,尤其研究中針對於無線通信網路上

Compound TCP

復合TCP(Compound TCP)是微軟自己實現的TCP擁塞控制演算法,通過同時維護兩個擁塞窗口,來實現在長肥網路有較好的性能而又不損失公平性。該演算法在Windows Vista和Windows Server 2008開始廣泛部署,並通過補丁的方式回溯支持到Windows XP和Windows Server 2003。在Linux上也有一個舊版本的移植實現

TCP PRR

TCP PRR(TCP Proportional Rate Rection )是旨在恢復期間提高發送數據的准確性。該演算法確保恢復後的擁塞窗口大小盡可能接近慢啟動閾值。在Google進行的測試中,能將平均延遲降低3~10%,恢復的超時減少5%。PRR演算法之後作為Linux內核3.2版本的默認擁塞演算法

TCP BBR

TCP BBR(Bottleneck Bandwidth and Round-trip propagation time)是由Google設計,於2016年發布的擁塞演算法。以往大部分擁塞演算法是基於丟包來作為降低傳輸速率的信號,而BBR則基於模型主動探測。該演算法使用網路最近出站數據分組當時的最大帶寬和往返時間來創建網路的顯式模型。數據包傳輸的每個累積或選擇性確認用於生成記錄在數據包傳輸過程和確認返回期間的時間內所傳送數據量的采樣率。該演算法認為隨著網路介面控制器逐漸進入千兆速度時,與緩沖膨脹相關的延遲相比丟包更應該被認為是識別擁塞的主要決定因素,所以基於延遲模型的擁塞控制演算法(如BBR)會有更高的吞吐量和更低的延遲,可以用BBR來替代其他流行的擁塞演算法,例如CUBIC

QUIC Quick UDP Internet Connections

QUIC旨在提供幾乎等同於TCP連接的可靠性,但延遲大大減少。它主要通過兩個理解HTTP流量的行為來實現這一點:

第一個變化是在連接創建期間大大減少開銷。由於大多數HTTP連接都需要TLS,因此QUIC使協商密鑰和支持的協議成為初始握手過程的一部分。 當客戶端打開連接時,伺服器響應的數據包包括將來的數據包加密所需的數據。

QUIC使用UDP協議作為其基礎,不包括丟失恢復。相反,每個QUIC流是單獨控制的,並且在QUIC級別而不是UDP級別重傳丟失的數據。這意味著如果在一個流中發生錯誤,協議棧仍然可以獨立地繼續為其他流提供服務

QUIC包括許多其他更普通的更改,這些更改也可以優化整體延遲和吞吐量

每個數據包是單獨加密的,因此加密數據時不需要等待部分數據包。 在TCP下通常不可能這樣做,其中加密記錄在位元組流中,並且協議棧不知道該流中的更高層邊界。這些可以由運行在更上層的協議進行協商,但QUIC旨在通過單個握手過程完成這些

QUIC的另一個目標是提高網路切換期間的性能,例如當移動設備的用戶從WiFi熱點切換到移動網路時發生的情況。 當這發生在TCP上時,一個冗長的過程開始了:每個現有連接一個接一個地超時,然後根據需要重新創建。期間存在較高延遲,因為新連接需要等待舊連接超時後才會創建。 為解決此問題,QUIC包含一個連接標識符,該標識符唯一地標識客戶端與伺服器之間的連接,而無論源IP地址是什麼。這樣只需發送一個包含此ID的數據包即可重新創建連接,因為即使用戶的IP地址發生變化,原始連接ID仍然有效

QUIC在應用程序空間中實現,而不是在操作系統內核中實現。當數據在應用程序之間移動時,這通常會由於上下文切換而調用額外的開銷。 但是在QUIC下協議棧旨在由單個應用程序使用,每個應用程序使用QUIC在UDP上託管自己的連接

Chromium的網路堆棧同時打開QUIC和傳統TCP連接,並在QUIC連接失敗時以零延遲回退到TCP連接

Ⅶ Kmeans聚類演算法簡介(有點枯燥)

1. Kmeans聚類演算法簡介

由於具有出色的速度和良好的可擴展性,Kmeans聚類演算法算得上是最著名的聚類方法。Kmeans演算法是一個重復移動類中心點的過程,把類的中心點,也稱重心(centroids),移動到其包含成員的平均位置,然後重新劃分其內部成員。k是演算法計算出的超參數,表示類的數量;Kmeans可以自動分配樣本到不同的類,但是不能決定究竟要分幾個類。k必須是一個比訓練集樣本數小的正整數。有時,類的數量是由問題內容指定的。例如,一個鞋廠有三種新款式,它想知道每種新款式都有哪些潛在客戶,於是它調研客戶,然後從數據里找出三類。也有一些問題沒有指定聚類的數量,最優的聚類數量是不確定的。後面我將會詳細介紹一些方法來估計最優聚類數量。

Kmeans的參數是類的重心位置和其內部觀測值的位置。與廣義線性模型和決策樹類似,Kmeans參數的最優解也是以成本函數最小化為目標。Kmeans成本函數公式如下:

μiμi是第kk個類的重心位置。成本函數是各個類畸變程度(distortions)之和。每個類的畸變程度等於該類重心與其內部成員位置距離的平方和。若類內部的成員彼此間越緊湊則類的畸變程度越小,反之,若類內部的成員彼此間越分散則類的畸變程度越大。求解成本函數最小化的參數就是一個重復配置每個類包含的觀測值,並不斷移動類重心的過程。首先,類的重心是隨機確定的位置。實際上,重心位置等於隨機選擇的觀測值的位置。每次迭代的時候,Kmeans會把觀測值分配到離它們最近的類,然後把重心移動到該類全部成員位置的平均值那裡。

2. K值的確定

2.1 根據問題內容確定

這種方法就不多講了,文章開篇就舉了一個例子。

2.2 肘部法則

如果問題中沒有指定kk的值,可以通過肘部法則這一技術來估計聚類數量。肘部法則會把不同kk值的成本函數值畫出來。隨著kk值的增大,平均畸變程度會減小;每個類包含的樣本數會減少,於是樣本離其重心會更近。但是,隨著kk值繼續增大,平均畸變程度的改善效果會不斷減低。kk值增大過程中,畸變程度的改善效果下降幅度最大的位置對應的kk值就是肘部。為了讓讀者看的更加明白,下面讓我們通過一張圖用肘部法則來確定最佳的kk值。下圖數據明顯可分成兩類:

從圖中可以看出,k值從1到2時,平均畸變程度變化最大。超過2以後,平均畸變程度變化顯著降低。因此最佳的k是2。

2.3 與層次聚類結合

經常會產生較好的聚類結果的一個有趣策略是,首先採用層次凝聚演算法決定結果粗的數目,並找到一個初始聚類,然後用迭代重定位來改進該聚類。

2.4 穩定性方法

穩定性方法對一個數據集進行2次重采樣產生2個數據子集,再用相同的聚類演算法對2個數據子集進行聚類,產生2個具有kk個聚類的聚類結果,計算2個聚類結果的相似度的分布情況。2個聚類結果具有高的相似度說明kk個聚類反映了穩定的聚類結構,其相似度可以用來估計聚類個數。採用次方法試探多個kk,找到合適的k值。

2.5 系統演化方法

系統演化方法將一個數據集視為偽熱力學系統,當數據集被劃分為kk個聚類時稱系統處於狀態kk。系統由初始狀態k=1k=1出發,經過分裂過程和合並過程,系統將演化到它的穩定平衡狀態 kiki ,其所對應的聚類結構決定了最優類數 kiki 。系統演化方法能提供關於所有聚類之間的相對邊界距離或可分程度,它適用於明顯分離的聚類結構和輕微重疊的聚類結構。

2.6 使用canopy演算法進行初始劃分

基於Canopy Method的聚類演算法將聚類過程分為兩個階段

(1) 聚類最耗費計算的地方是計算對象相似性的時候,Canopy Method在第一階段選擇簡單、計算代價較低的方法計算對象相似性,將相似的對象放在一個子集中,這個子集被叫做Canopy,通過一系列計算得到若干Canopy,Canopy之間可以是重疊的,但不會存在某個對象不屬於任何Canopy的情況,可以把這一階段看做數據預處理;

(2) 在各個Canopy內使用傳統的聚類方法(如Kmeans),不屬於同一Canopy的對象之間不進行相似性計算。

從這個方法起碼可以看出兩點好處:首先,Canopy不要太大且Canopy之間重疊的不要太多的話會大大減少後續需要計算相似性的對象的個數;其次,類似於Kmeans這樣的聚類方法是需要人為指出K的值的,通過(1)得到的Canopy個數完全可以作為這個k值,一定程度上減少了選擇k的盲目性。

其他方法如貝葉斯信息准則方法(BIC)可參看文獻[4]。

3. 初始質心的選取

選擇適當的初始質心是基本kmeans演算法的關鍵步驟。常見的方法是隨機的選取初始中心,但是這樣簇的質量常常很差。處理選取初始質心問題的一種常用技術是:多次運行,每次使用一組不同的隨機初始質心,然後選取具有最小SSE(誤差的平方和)的簇集。這種策略簡單,但是效果可能不好,這取決於數據集和尋找的簇的個數。

第二種有效的方法是,取一個樣本,並使用層次聚類技術對它聚類。從層次聚類中提取kk個簇,並用這些簇的質心作為初始質心。該方法通常很有效,但僅對下列情況有效:(1)樣本相對較小,例如數百到數千(層次聚類開銷較大);(2) kk相對於樣本大小較小。

第三種選擇初始質心的方法,隨機地選擇第一個點,或取所有點的質心作為第一個點。然後,對於每個後繼初始質心,選擇離已經選取過的初始質心最遠的點。使用這種方法,確保了選擇的初始質心不僅是隨機的,而且是散開的。但是,這種方法可能選中離群點。此外,求離當前初始質心集最遠的點開銷也非常大。為了克服這個問題,通常該方法用於點樣本。由於離群點很少(多了就不是離群點了),它們多半不會在隨機樣本中出現。計算量也大幅減少。

第四種方法就是上面提到的canopy演算法。

4. 距離的度量

常用的距離度量方法包括:歐幾里得距離和餘弦相似度。兩者都是評定個體間差異的大小的。

歐氏距離是最常見的距離度量,而餘弦相似度則是最常見的相似度度量,很多的距離度量和相似度度量都是基於這兩者的變形和衍生,所以下面重點比較下兩者在衡量個體差異時實現方式和應用環境上的區別。

藉助三維坐標系來看下歐氏距離和餘弦相似度的區別:

從圖上可以看出距離度量衡量的是空間各點間的絕對距離,跟各個點所在的位置坐標(即個體特徵維度的數值)直接相關;而餘弦相似度衡量的是空間向量的夾角,更加的是體現在方向上的差異,而不是位置。如果保持A點的位置不變,B點朝原方向遠離坐標軸原點,那麼這個時候餘弦相似cosθ是保持不變的,因為夾角不變,而A、B兩點的距離顯然在發生改變,這就是歐氏距離和餘弦相似度的不同之處。

根據歐氏距離和餘弦相似度各自的計算方式和衡量特徵,分別適用於不同的數據分析模型:歐氏距離能夠體現個體數值特徵的絕對差異,所以更多的用於需要從維度的數值大小中體現差異的分析,如使用用戶行為指標分析用戶價值的相似度或差異;而餘弦相似度更多的是從方向上區分差異,而對絕對的數值不敏感,更多的用於使用用戶對內容評分來區分用戶興趣的相似度和差異,同時修正了用戶間可能存在的度量標准不統一的問題(因為餘弦相似度對絕對數值不敏感)。

因為歐幾里得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標准化,同時距離越大,個體間差異越大;空間向量餘弦夾角的相似度度量不會受指標刻度的影響,餘弦值落於區間[-1,1],值越大,差異越小。但是針對具體應用,什麼情況下使用歐氏距離,什麼情況下使用餘弦相似度?

從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角餘弦值也可以隨意變化。感性的認識,當兩用戶評分趨勢一致時,但是評分值差距很大,餘弦相似度傾向給出更優解。舉個極端的例子,兩用戶只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位用戶的認知其實是一樣的,但是歐式距離給出的解顯然沒有餘弦值合理。

5. 聚類效果評估

我們把機器學習定義為對系統的設計和學習,通過對經驗數據的學習,將任務效果的不斷改善作為一個度量標准。Kmeans是一種非監督學習,沒有標簽和其他信息來比較聚類結果。但是,我們還是有一些指標可以評估演算法的性能。我們已經介紹過類的畸變程度的度量方法。本節為將介紹另一種聚類演算法效果評估方法稱為輪廓系數(Silhouette Coefficient)。輪廓系數是類的密集與分散程度的評價指標。它會隨著類的規模增大而增大。彼此相距很遠,本身很密集的類,其輪廓系數較大,彼此集中,本身很大的類,其輪廓系數較小。輪廓系數是通過所有樣本計算出來的,計算每個樣本分數的均值,計算公式如下:

aa是每一個類中樣本彼此距離的均值,bb是一個類中樣本與其最近的那個類的所有樣本的距離的均值。

6. Kmeans演算法流程

輸入:聚類個數k,數據集XmxnXmxn。 

輸出:滿足方差最小標準的k個聚類。

(1) 選擇k個初始中心點,例如c[0]=X[0] , … , c[k-1]=X[k-1];

(2) 對於X[0]….X[n],分別與c[0]…c[k-1]比較,假定與c[i]差值最少,就標記為i;

(3) 對於所有標記為i點,重新計算c[i]={ 所有標記為i的樣本的每個特徵的均值};

(4) 重復(2)(3),直到所有c[i]值的變化小於給定閾值或者達到最大迭代次數。

Kmeans的時間復雜度:O(tkmn),空間復雜度:O((m+k)n)。其中,t為迭代次數,k為簇的數目,m為樣本數,n為特徵數。

7. Kmeans演算法優缺點

7.1 優點

(1). 演算法原理簡單。需要調節的超參數就是一個k。

(2). 由具有出色的速度和良好的可擴展性。

7.2 缺點

(1). 在 Kmeans 演算法中 kk 需要事先確定,這個 kk 值的選定有時候是比較難確定。

(2). 在 Kmeans 演算法中,首先需要初始k個聚類中心,然後以此來確定一個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果。多設置一些不同的初值,對比最後的運算結果,一直到結果趨於穩定結束。

(3). 該演算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當數據量非常大時,演算法的時間開銷是非常大的。

(4). 對離群點很敏感。

(5). 從數據表示角度來說,在 Kmeans 中,我們用單個點來對 cluster 進行建模,這實際上是一種最簡化的數據建模形式。這種用點來對 cluster 進行建模實際上就已經假設了各 cluster的數據是呈圓形(或者高維球形)或者方形等分布的。不能發現非凸形狀的簇。但在實際生活中,很少能有這種情況。所以在 GMM 中,使用了一種更加一般的數據表示,也就是高斯分布。

(6). 從數據先驗的角度來說,在 Kmeans 中,我們假設各個 cluster 的先驗概率是一樣的,但是各個 cluster 的數據量可能是不均勻的。舉個例子,cluster A 中包含了10000個樣本,cluster B 中只包含了100個。那麼對於一個新的樣本,在不考慮其與A cluster、 B cluster 相似度的情況,其屬於 cluster A 的概率肯定是要大於 cluster B的。

(7). 在 Kmeans 中,通常採用歐氏距離來衡量樣本與各個 cluster 的相似度。這種距離實際上假設了數據的各個維度對於相似度的衡量作用是一樣的。但在 GMM 中,相似度的衡量使用的是後驗概率 αcG(x|μc,∑c)αcG(x|μc,∑c) ,通過引入協方差矩陣,我們就可以對各維度數據的不同重要性進行建模。

(8). 在 Kmeans 中,各個樣本點只屬於與其相似度最高的那個 cluster ,這實際上是一種 hard clustering 。

針對Kmeans演算法的缺點,很多前輩提出了一些改進的演算法。例如 K-modes 演算法,實現對離散數據的快速聚類,保留了Kmeans演算法的效率同時將Kmeans的應用范圍擴大到離散數據。還有K-Prototype演算法,可以對離散與數值屬性兩種混合的數據進行聚類,在K-prototype中定義了一個對數值與離散屬性都計算的相異性度量標准。當然還有其它的一些演算法,這里我 就不一一列舉了。

Kmeans 與 GMM 更像是一種 top-down 的思想,它們首先要解決的問題是,確定 cluster 數量,也就是 k 的取值。在確定了 k 後,再來進行數據的聚類。而 hierarchical clustering 則是一種 bottom-up 的形式,先有數據,然後通過不斷選取最相似的數據進行聚類。

Ⅷ x-means演算法原理是什麼

你好!
原理是對給定范圍內的K值,反復調用K-means,從最低K值開始,每次聚類完成後計算其BIC得分,再把得到的每個類調用K-means劃分為兩個孩子類,並計算孩子類BIC得分,如果父類和孩子類的BIC得分差別很大則劃分開,或者選擇差別最大的劃分開,於是K=K+1,再調用K-means,新的類心為上一次得到的(K-1)個類心,和劃分開的兩個子類類心,重復此過程。當K=Kmax後,返回最佳的聚類就行了
僅代表個人觀點,不喜勿噴,謝謝。

熱點內容
ftp默認使用埠是8080 發布:2025-05-10 17:04:28 瀏覽:273
安卓美團我的評價在哪裡 發布:2025-05-10 17:03:55 瀏覽:215
銀行推薦演算法 發布:2025-05-10 16:57:21 瀏覽:643
2014年二級c語言真題 發布:2025-05-10 16:56:25 瀏覽:181
絕地求生進不去顯示伺服器已滿怎麼辦 發布:2025-05-10 16:56:21 瀏覽:91
存儲系統安裝工程師 發布:2025-05-10 16:53:38 瀏覽:710
php搜索分詞 發布:2025-05-10 16:53:29 瀏覽:546
8位加密 發布:2025-05-10 16:51:01 瀏覽:651
免費nvr伺服器搭建 發布:2025-05-10 16:45:20 瀏覽:847
宏傑文件夾加密怎麼樣 發布:2025-05-10 16:40:16 瀏覽:507