選擇演算法
A. 機器學習中,怎樣分析數據結構來選擇演算法
在模型選擇方面,本身來說,個人覺得並沒有一種很確定的指導方式,更多的是從你數據的應用角度去考慮問題,然後才是你對數據的理解。
應用角度的問題就是你對模型的要求,如果你的要求是模型盡量是可解釋的,那麼選擇估計就只有決策樹,邏輯回歸等等這種簡單的模型。
數據的角度:這個角度其實更多的是從獲取某種先驗知識或者基於某種假設等等,然後你去選擇模型;
比如我有一個數據,我知道y-x>0則為1類,y-x<0則為0類別,這個是假設我知道的情況下,你會怎麼取選擇分類器呢,很明顯,直接用線性回歸就應該做的不錯,或許和你之後的會有點小偏差,但是就是應該不錯,那麼此時你會發現SVM的線性核應該可以是可以的,你的思路就會發現,其實基本上所有的線性分類器在這樣的數據集合上都應該不錯的;
然而你考慮一下Decision Tree,你會發現他做的不是很好,但是最差最差也能夠得到75%(假設我就分一次,x>0和x<0),這個時候你怎麼評估這個問題的好與壞呢,如果是賭場,這個效果是很好了,但是如果是指紋的識別,這個就不好了;再深入的考慮下去,你可能會否定Decision Tree,但是,其實這個問題,如果是用 Random Forest去做,他又會做的很好,因為在不斷的選取數據中,他會不斷的得到新的劃分點。
你也可以從wikipedia(Random forest)的介紹中感覺到,RF是可以做好的,因為他相當於是帶權的KNN;
所以我覺得在實際應用中,從簡單模型開始嘗試,或許會有新的對數據的認識,從而使你得到一些沒有的信息,如上述的問題中,你從linear regression就很容易發現這個效果,但是你如果一來就是NN或者SVM,或許你就發現不了這種關系了;
當然,如果你是為了快速的做出一個好的結果,那一來就嘗試復雜模型總會是稍微好點的,理由也是很簡單的,因為復雜模型的VC維比較高,當然就能解決更多的問題。
B. 初學者如何選擇合適的機器學習演算法(附演算法
如何為分類問題選擇合適的機器學習演算法 若要達到一定的准確率,需要嘗試各種各樣的分類器,並通過交叉驗證選擇最好的一個。但是,如果你只是為你的問題尋找一個「足夠好」的演算法或者一個起點,以下准則有利於選擇合適的分類器:你的訓練集有多大?如果訓練集很小,那麼高偏差/低方差分類器(如樸素貝葉斯分類器)要優於低偏差/高方差分類器(如k近鄰分類器),因為後者容易過擬合。然而,隨著訓練集的增大,低偏差/高方差分類器將開始勝出(它們具有較低的漸近誤差),因為高偏差分類器不足以提供准確的模型。這可以認為這是生成模型與判別模型的區別。一些特定演算法比較樸素貝葉斯優點:簡單;如果樸素貝葉斯(NB)條件獨立性假設成立,相比於邏輯回歸這類的判別模型,樸素貝葉斯分類器將收斂得更快,所以你只需要較小的訓練集。而且,即使NB假設不成立,樸素貝葉斯分類器在實踐方面仍然表現很好。如果想得到簡單快捷的執行效果,這將是個好的選擇。缺點:不能學習特徵之間的相互作用(比如,它不能學習出:雖然你喜歡布拉德·皮特和湯姆·克魯斯的電影,但卻不喜歡他們一起合作的電影)。邏輯回歸優點:有許多正則化模型的方法,不需要像在樸素貝葉斯分類器中那樣擔心特徵間的相互關聯性。與決策樹和支持向量機 不同,有一個很好的概率解釋,並能容易地更新模型來吸收新數據(使用一個在線梯度下降方法)。如果你想要一個概率框架(比如,簡單地調整分類閾值,說出什麼時候是不太確定的,或者獲得置信區間),或你期望未來接收更多想要快速並入模型中的訓練數據,就選擇邏輯回歸。決策樹優點:易於說明和解釋,很容易地處理特徵間的相互作用,並且是非參數化的,不用擔心異常值或者數據是否線性可分(比如,決策樹可以很容易地某特徵x的低端是類A,中間是類B,然後高端又是類A的情況)。缺點:1)不支持在線學習,當有新樣本時需要重建決策樹。2)容易過擬合,但這也正是諸如隨機森林(或提高樹)之類的集成方法的切入點。另外,隨機森林適用於很多分類問題(通常略優於支持向量機)---快速並且可擴展,不像支持向量機那樣調一堆參數。隨機森林正漸漸開始偷走它的「王冠」。 SVMs 優點:高准確率,為過擬合提供了好的理論保證;即使數據在基礎特徵空間線性不可分,只要選定一個恰當的核函數,仍然能夠取得很好的分類效果。它們在超高維空間是常態的文本分類問題中尤其受歡迎。然而,它們內存消耗大,難於解釋,運行和調參 復雜,盡管如此,更好的數據往往勝過更好的演算法,設計好的特徵非常重要。如果有一個龐大數據集,這時使用哪種分類演算法在分類性能方面可能並不要緊;因此,要基於速度和易用性選擇演算法。
C. 選擇排序演算法
#include<stdio.h>
int main(){
int n,k,i,j,m;
int a[100];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
k=a[j];
a[j]=a[i];
a[i]=k;
}
}
}
for(i=0;i<n;i++){
printf("%d ",a[i]);
}
return 1;
}
D. 2、路由選擇演算法主要分哪幾類分布式自適應演算法的基本思想是什麼
路由選擇演算法主要分兩類:靜態路由選擇演算法和動態路由選擇演算法
分布自適應路由選擇演算法的網路,所有節點定其地與其每個相鄰節點交換路由選擇信息。每個節點均存儲一張以網路中其它每個節點為索引的路由選擇表,網路中每個節點佔用表中一項,每一項又分為兩個部分,即所希望使用的到目的節點的輸出線路和估計到目的節點所需要的延遲或距離。度量標准可以是毫秒或鏈路段數、等待的分組數、剩餘的線路和容量等。對於延遲,節點可以直接發送一個特殊的稱作「回聲」(echo)的分組,接收該分組的節點將其加上時間標記後盡快送回,這樣便可測出延遲。有了以上信息,節點可由此確定路由選擇。
E. 學習演算法 特徵的選擇演算法有哪些
一個演算法應該具有以下五個重要的特徵:
1、有窮性: 一個演算法必須保證執行有限步之後結束;
2、確切性: 演算法的每一步驟必須有確切的定義;
3、輸入:一個演算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指演算法本身定除了初始條件;
4、輸出:一個演算法有一個或多個輸出,以反映對輸入數據加工後的結果。沒有輸出的演算法是毫無意義的;
5、可行性: 演算法原則上能夠精確地運行,而且人們用筆和紙做有限次運算後即可完成
F. 簡述路由選擇演算法的要求
路由選擇演算法」是否等於「路由演算法」?
肯定不等
路由選擇演算法是選擇路徑
路由演算法要考慮響應,帶寬,跳數等等
不能把書讀死了.
4.2 路由選擇及其演算法
4.2.2 動態路由選擇策略
節點路由選擇要依靠網路當前的狀態信息來決定的策略稱動態路由選擇策略,這種策略能較好地適應網路流量、拓撲結構的變化,有利於改善網路的性能。但由於演算法復雜,會增加網路的負擔,有時會因反應太快引起振盪或反應太慢不起作用。獨立路由選擇、集中路由選擇和分布路由選擇是三種動態路由選擇策略的具體演算法。
(1)獨立路由選擇
在這類路由演算法中,節點僅根據自己搜到的有關信息作出路由選擇的決定,與其它節點不交換路由選擇信息,雖然不能正確確定距離本節點較遠的路由選擇,但還是能較好地適應網路流量和拓撲結構的變化。
一種簡單的獨立路由選擇演算法是 Baran 在1964年提出的熱土豆(Hot Potato)演算法。當一個分組到來時,節點必須盡快脫手,將其放入輸出列最短的方向上排隊,而不管該方向通向何方。
(2)集中路由選擇
集中路由選擇也象固定路由選擇一樣,在每個節點上存儲一張路由表。不同的是,固定路由選擇演算法中的節點路由表由手工製作,而在集中路由選擇演算法中的節點路由表由路由控制中心RCC(Routing Control Center)定時根據網路狀態計算、生成並分送各相應節點。由於RCC利用了整個網路的信息,所以得到的路由選擇是完美的,同時也減輕了各節點計算路由選擇的負擔。
(3)分布路由選擇
採用分布路由選擇演算法的網路,所有節點定其地與其每個相鄰節點交換路由選擇信息。每個節點均存儲一張以網路中其它每個節點為索引的路由選擇表,網路中每個節點佔用表中一項,每一項又分為兩個部分,即所希望使用的到目的節點的輸出線路和估計到目的節點所需要的延遲或距離。度量標准可以是毫秒或鏈路段數、等待的分組數、剩餘的線路和容量等。對於延遲,節點可以直接發送一個特殊的稱作「回聲」(echo)的分組,接收該分組的節點將其加上時間標記後盡快送回,這樣便可測出延遲。有了以上信息,節點可由此確定路由選擇。
--------------------------------------------
——路由演算法在路由協議中起著至關重要的作用,採用何種演算法往往決定了最終的尋徑結果,因此選擇路由演算法一定要仔細。通常需要綜合考慮以下幾個設計目標:
——(1)最優化:指路由演算法選擇最佳路徑的能力。
——(2)簡潔性:演算法設計簡潔,利用最少的軟體和開銷,提供最有效的功能。
——(3)堅固性:路由演算法處於非正常或不可預料的環境時,如硬體故障、負載過高或操作失誤時,都能正確運行。由於路由器分布在網路聯接點上,所以在它們出故障時會產生嚴重後果。最好的路由器演算法通常能經受時間的考驗,並在各種網路環境下被證實是可靠的。
——(4)快速收斂:收斂是在最佳路徑的判斷上所有路由器達到一致的過程。當某個網路事件引起路由可用或不可用時,路由器就發出更新信息。路由更新信息遍及整個網路,引發重新計算最佳路徑,最終達到所有路由器一致公認的最佳路徑。收斂慢的路由演算法會造成路徑循環或網路中斷。 ——(5)靈活性:路由演算法可以快速、准確地適應各種網路環境。例如,某個網段發生故障,路由演算法要能很快發現故障,並為使用該網段的所有路由選擇另一條最佳路徑。
——路由演算法按照種類可分為以下幾種:靜態和動態、單路和多路、平等和分級、源路由和透明路由、域內和域間、鏈路狀態和距離向量。前面幾種的特點與字面意思基本一致,下面著重介紹鏈路狀態和距離向量演算法。
——鏈路狀態演算法(也稱最短路徑演算法)發送路由信息到互聯網上所有的結點,然而對於每個路由器,僅發送它的路由表中描述了其自身鏈路狀態的那一部分。距離向量演算法(也稱為Bellman-Ford演算法)則要求每個路由器發送其路由表全部或部分信息,但僅發送到鄰近結點上。從本質上來說,鏈路狀態演算法將少量更新信息發送至網路各處,而距離向量演算法發送大量更新信息至鄰接路由器。 ——由於鏈路狀態演算法收斂更快,因此它在一定程度上比距離向量演算法更不易產生路由循環。但另一方面,鏈路狀態演算法要求比距離向量演算法有更強的CPU能力和更多的內存空間,因此鏈路狀態演算法將會在實現時顯得更昂貴一些。除了這些區別,兩種演算法在大多數環境下都能很好地運行。
——最後需要指出的是,路由演算法使用了許多種不同的度量標准去決定最佳路徑。復雜的路由演算法可能採用多種度量來選擇路由,通過一定的加權運算,將它們合並為單個的復合度量、再填入路由表中,作為尋徑的標准。通常所使用的度量有:路徑長度、可靠性、時延、帶寬、負載、通信成本等。
G. 找一種可以幫人從幾種方案裡面選擇最優的演算法
如果找一種可以幫人充幾種方案,裡面選擇最悠閑的演算法是我覺得是很困難的
H. 在實際編程中,如何選擇一種合適的演算法
這個要具體情況具體分析, 現實開發中, 尤其是在高級語言里, 通常不會遇到這種選擇困難, 因為有介面這種東西, 使得很多不同的結構可以使用同一種演算法
而具體的演算法, 因為數據本身的形態不同, 同一個演算法也會產生不同的性能, 關於這點一是靠對演算法本身的認識, 二就是靠經驗了
I. 兩種路由選擇演算法是什麼
鏈路狀態演算法(也稱最短路徑演算法)發送路由信息到互聯網上所有的結點,然而對於每個路由器,僅發送它的路由表中描述了其自身鏈路狀態的那一部分。距離向量演算法(也稱為Bellman-Ford演算法)則要求每個路由器發送其路由表全部或部分信息,但僅發送到鄰近結點上。從本質上來說,鏈路狀態演算法將少量更新信息發送至網路各處,而距離向量演算法發送大量更新信息至鄰接路由器。 ——由於鏈路狀態演算法收斂更快,因此它在一定程度上比距離向量演算法更不易產生路由循環。但另一方面,鏈路狀態演算法要求比距離向量演算法有更強的CPU能力和更多的內存空間,因此鏈路狀態演算法將會在實現時顯得更昂貴一些。除了這些區別,兩種演算法在大多數環境下都能很好地運行。
J. 的節點路由選擇演算法,有哪些
路由選擇演算法」是否等於「路由演算法」?肯定不等路由選擇演算法是選擇路徑路由演算法要考慮響應,帶寬,跳數等等不能把書讀死了. 4.2 路由選擇及其演算法 4.2.2 動態路由選擇策略節點路由選擇要依靠網路當前的狀態信息來決定的策略稱動態路由選擇策略,這種策略能較好地適應網路流量、拓撲結構的變化,有利於改善網路的性能。但由於演算法復雜,會增加網路的負擔,有時會因反應太快引起振盪或反應太慢不起作用。獨立路由選擇、集中路由選擇和分布路由選擇是三種動態路由選擇策略的具體演算法。(1)獨立路由選擇在這類路由演算法中,節點僅根據自己搜到的有關信息作出路由選擇的決定,與其它節點不交換路由選擇信息,雖然不能正確確定距離本節點較遠的路由選擇,但還是能較好地適應網路流量和拓撲結構的變化。一種簡單的獨立路由選擇演算法是 Baran 在1964年提出的熱土豆(Hot Potato)演算法。當一個分組到來時,節點必須盡快脫手,將其放入輸出列最短的方向上排隊,而不管該方向通向何方。(2)集中路由選擇集中路由選擇也象固定路由選擇一樣,在每個節點上存儲一張路由表。不同的是,固定路由選擇演算法中的節點路由表由手工製作,而在集中路由選擇演算法中的節點路由表由路由控制中心RCC(Routing Control Center)定時根據網路狀態計算、生成並分送各相應節點。由於RCC利用了整個網路的信息,所以得到的路由選擇是完美的,同時也減輕了各節點計算路由選擇的負擔。(3)分布路由選擇採用分布路由選擇演算法的網路,所有節點定其地與其每個相鄰節點交換路由選擇信息。每個節點均存儲一張以網路中其它每個節點為索引的路由選擇表,網路中每個節點佔用表中一項,每一項又分為兩個部分,即所希望使用的到目的節點的輸出線路和估計到目的節點所需要的延遲或距離。度量標准可以是毫秒或鏈路段數、等待的分組數、剩餘的線路和容量等。對於延遲,節點可以直接發送一個特殊的稱作「回聲」(echo)的分組,接收該分組的節點將其加上時間標記後盡快送回,這樣便可測出延遲。有了以上信息,節點可由此確定路由選擇。 -------------------------------------------- ——路由演算法在路由協議中起著至關重要的作用,採用何種演算法往往決定了最終的尋徑結果,因此選擇路由演算法一定要仔細。通常需要綜合考慮以下幾個設計目標: ——(1)最優化:指路由演算法選擇最佳路徑的能力。 ——(2)簡潔性:演算法設計簡潔,利用最少的軟體和開銷,提供最有效的功能。 ——(3)堅固性:路由演算法處於非正常或不可預料的環境時,如硬體故障、負載過高或操作失誤時,都能正確運行。由於路由器分布在網路聯接點上,所以在它們出故障時會產生嚴重後果。最好的路由器演算法通常能經受時間的考驗,並在各種網路環境下被證實是可靠的。 ——(4)快速收斂:收斂是在最佳路徑的判斷上所有路由器達到一致的過程。當某個網路事件引起路由可用或不可用時,路由器就發出更新信息。路由更新信息遍及整個網路,引發重新計算最佳路徑,最終達到所有路由器一致公認的最佳路徑。收斂慢的路由演算法會造成路徑循環或網路中斷。 ——(5)靈活性:路由演算法可以快速、准確地適應各種網路環境。例如,某個網段發生故障,路由演算法要能很快發現故障,並為使用該網段的所有路由選擇另一條最佳路徑。 ——路由演算法按照種類可分為以下幾種:靜態和動態、單路和多路、平等和分級、源路由和透明路由、域內和域間、鏈路狀態和距離向量。前面幾種的特點與字面意思基本一致,下面著重介紹鏈路狀態和距離向量演算法。 ——鏈路狀態演算法(也稱最短路徑演算法)發送路由信息到互聯網上所有的結點,然而對於每個路由器,僅發送它的路由表中描述了其自身鏈路狀態的那一部分。距離向量演算法(也稱為Bellman-Ford演算法)則要求每個路由器發送其路由表全部或部分信息,但僅發送到鄰近結點上。從本質上來說,鏈路狀態演算法將少量更新信息發送至網路各處,而距離向量演算法發送大量更新信息至鄰接路由器。 ——由於鏈路狀態演算法收斂更快,因此它在一定程度上比距離向量演算法更不易產生路由循環。但另一方面,鏈路狀態演算法要求比距離向量演算法有更強的CPU能力和更多的內存空間,因此鏈路狀態演算法將會在實現時顯得更昂貴一些。除了這些區別,兩種演算法在大多數環境下都能很好地運行。 ——最後需要指出的是,路由演算法使用了許多種不同的度量標准去決定最佳路徑。復雜的路由演算法可能採用多種度量來選擇路由,通過一定的加權運算,將它們合並為單個的復合度量、再填入路由表中,作為尋徑的標准。通常所使用的度量有:路徑長度、可靠性、時延、帶寬、負載、通信成本等。