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

l1演算法

發布時間: 2022-08-05 04:13:07

A. 有兩個帶頭結點的單循環鏈表L1和L2,編寫演算法將鏈表L2鏈接到鏈表L1之後成為一個單循環鏈表

list * connect(list* L1,list* L2)
{
list * p=L1
while(p->next)
p=p->next; //找到L1最後一個節點
p->next=L2->next; //把L2的節點連到L1的末端
while(p->next)
p=p->next; //找到L2最後一個節點
p->next=L1; //將next指向L1頭節點,形成循環鏈表
return L1;
}

B. L1范數的最優化過程是怎麼樣的梯度下降遇到不可導點怎麼辦

度下降法是一個最優化演算法,通常也稱為最速下降法。最速下降法是求解無約束優化問題最簡單和最古老的方法之一,雖然現在已經不具有實用性,但是許多有效演算法都是以它為基礎進行改進和修正而得到的。最速下降法是用負梯度方向為搜索方向的.

C. 為什麼l1等於二分之一

應該是具有防止過擬合作用吧。參考下文:二、L2范數除了L1范數,還有一種更受寵幸的規則化范數是L2范數:||W||2。它也不遜於L1范數,它有兩個美稱,在回歸裡面,有人把有它的回歸叫「嶺回歸」(RidgeRegression),有人也叫它「權值衰減weightdecay」。這用的很多吧,因為它的強大功效是改善機器學習裡面一個非常重要的問題:過擬合。至於過擬合是什麼,上面也解釋了,就是模型訓練時候的誤差很小,但在測試的時候誤差很大,也就是我們的模型復雜到可以擬合到我們的所有訓練樣本了,但在實際預測新的樣本的時候,糟糕的一塌糊塗。通俗的講就是應試能力很強,實際應用能力很差。擅長背誦知識,卻不懂得靈活利用知識。例如下圖所示(來自Ng的course):上面的圖是線性回歸,下面的圖是Logistic回歸,也可以說是分類的情況。從左到右分別是欠擬合(underfitting,也稱High-bias)、合適的擬合和過擬合(overfitting,也稱Highvariance)三種情況。可以看到,如果模型復雜(可以擬合任意的復雜函數),它可以讓我們的模型擬合所有的數據點,也就是基本上沒有誤差。對於回歸來說,就是我們的函數曲線通過了所有的數據點,如上圖右。對分類來說,就是我們的函數曲線要把所有的數據點都分類正確,如下圖右。這兩種情況很明顯過擬合了。OK,那現在到我們非常關鍵的問題了,為什麼L2范數可以防止過擬合?回答這個問題之前,我們得先看看L2范數是個什麼東西。L2范數是指向量各元素的平方和然後求平方根。我們讓L2范數的規則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1范數不同,它不會讓它等於0,而是接近於0,這里是有很大的區別的哦。而越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。為什麼越小的參數說明模型越簡單?我也不懂,我的理解是:限制了參數很小,實際上就限制了多項式某些分量的影響很小(看上面線性回歸的模型的那個擬合的圖),這樣就相當於減少參數個數。其實我也不太懂,希望大家可以指點下。這里也一句話總結下:通過L2范數,我們可以實現了對模型空間的限制,從而在一定程度上避免了過擬合。L2范數的好處是什麼呢?這里也扯上兩點:1)學習理論的角度:從學習理論的角度來說,L2范數可以防止過擬合,提升模型的泛化能力。2)優化計算的角度:從優化或者數值計算的角度來說,L2范數有助於處理conditionnumber不好的情況下矩陣求逆很困難的問題。哎,等等,這conditionnumber是啥?我先google一下哈。這里我們也故作高雅的來聊聊優化問題。優化有兩大難題,一是:局部最小值,二是:ill-condition病態問題。前者俺就不說了,大家都懂吧,我們要找的是全局最小值,如果局部最小值太多,那我們的優化演算法就很容易陷入局部最小而不能自拔,這很明顯不是觀眾願意看到的劇情。那下面我們來聊聊ill-condition。ill-condition對應的是well-condition。那他們分別代表什麼?假設我們有個方程組AX=b,我們需要求解X。如果A或者b稍微的改變,會使得X的解發生很大的改變,那麼這個方程組系統就是ill-condition的,反之就是well-condition的。我們具體舉個例子吧:咱們先看左邊的那個。第一行假設是我們的AX=b,第二行我們稍微改變下b,得到的x和沒改變前的差別很大,看到吧。第三行我們稍微改變下系數矩陣A,可以看到結果的變化也很大。換句話來說,這個系統的解對系數矩陣A或者b太敏感了。又因為一般我們的系數矩陣A和b是從實驗數據裡面估計得到的,所以它是存在誤差的,如果我們的系統對這個誤差是可以容忍的就還好,但系統對這個誤差太敏感了,以至於我們的解的誤差更大,那這個解就太不靠譜了。所以這個方程組系統就是ill-conditioned病態的,不正常的,不穩定的,有問題的,哈哈。這清楚了吧。右邊那個就叫well-condition的系統了。還是再啰嗦一下吧,對於一個ill-condition的系統,我的輸入稍微改變下,輸出就發生很大的改變,這不好啊,這表明我們的系統不能實用啊。你想想看,例如對於一個回歸問題y=f(x),我們是用訓練樣本x去訓練模型f,使得y盡量輸出我們期待的值,例如0。那假如我們遇到一個樣本x』,這個樣本和訓練樣本x差別很小,面對他,系統本應該輸出和上面的y差不多的值的,例如0.00001,最後卻給我輸出了一個0.9999,這很明顯不對呀。就好像,你很熟悉的一個人臉上長了個青春痘,你就不認識他了,那你大腦就太差勁了,哈哈。所以如果一個系統是ill-conditioned病態的,我們就會對它的結果產生懷疑。那到底要相信它多少呢?我們得找個標准來衡量吧,因為有些系統的病沒那麼重,它的結果還是可以相信的,不能一刀切吧。終於回來了,上面的conditionnumber就是拿來衡量ill-condition系統的可信度的。conditionnumber衡量的是輸入發生微小變化的時候,輸出會發生多大的變化。也就是系統對微小變化的敏感度。conditionnumber值小的就是well-conditioned的,大的就是ill-conditioned的。如果方陣A是非奇異的,那麼A的conditionnumber定義為:也就是矩陣A的norm乘以它的逆的norm。所以具體的值是多少,就要看你選擇的norm是什麼了。如果方陣A是奇異的,那麼A的conditionnumber就是正無窮大了。實際上,每一個可逆方陣都存在一個conditionnumber。但如果要計算它,我們需要先知道這個方陣的norm(范數)和MachineEpsilon(機器的精度)。為什麼要范數?范數就相當於衡量一個矩陣的大小,我們知道矩陣是沒有大小的,當上面不是要衡量一個矩陣A或者向量b變化的時候,我們的解x變化的大小嗎?所以肯定得要有一個東西來度量矩陣和向量的大小吧?對了,他就是范數,表示矩陣大小或者向量長度。OK,經過比較簡單的證明,對於AX=b,我們可以得到以下的結論:也就是我們的解x的相對變化和A或者b的相對變化是有像上面那樣的關系的,其中k(A)的值就相當於倍率,看到了嗎?相當於x變化的界。對conditionnumber來個一句話總結:conditionnumber是一個矩陣(或者它所描述的線性系統)的穩定性或者敏感度的度量,如果一個矩陣的conditionnumber在1附近,那麼它就是well-conditioned的,如果遠大於1,那麼它就是ill-conditioned的,如果一個系統是ill-conditioned的,它的輸出結果就不要太相信了。好了,對這么一個東西,已經說了好多了。對了,我們為什麼聊到這個的了?回到第一句話:從優化或者數值計算的角度來說,L2范數有助於處理conditionnumber不好的情況下矩陣求逆很困難的問題。因為目標函數如果是二次的,對於線性回歸來說,那實際上是有解析解的,求導並令導數等於零即可得到最優解為:然而,如果當我們的樣本X的數目比每個樣本的維度還要小的時候,矩陣XTX將會不是滿秩的,也就是XTX會變得不可逆,所以w*就沒法直接計算出來了。或者更確切地說,將會有無窮多個解(因為我們方程組的個數小於未知數的個數)。也就是說,我們的數據不足以確定一個解,如果我們從所有可行解里隨機選一個的話,很可能並不是真正好的解,總而言之,我們過擬合了。但如果加上L2規則項,就變成了下面這種情況,就可以直接求逆了:這裡面,專業點的描述是:要得到這個解,我們通常並不直接求矩陣的逆,而是通過解線性方程組的方式(例如高斯消元法)來計算。考慮沒有規則項的時候,也就是λ=0的情況,如果矩陣XTX的conditionnumber很大的話,解線性方程組就會在數值上相當不穩定,而這個規則項的引入則可以改善conditionnumber。另外,如果使用迭代優化的演算法,conditionnumber太大仍然會導致問題:它會拖慢迭代的收斂速度,而規則項從優化的角度來看,實際上是將目標函數變成λ-stronglyconvex(λ強凸)的了。哎喲喲,這里又出現個λ強凸,啥叫λ強凸呢?當f滿足:時,我們稱f為λ-stronglyconvex函數,其中參數λ>0。當λ=0時退回到普通convex函數的定義。在直觀的說明強凸之前,我們先看看普通的凸是怎樣的。假設我們讓f在x的地方做一階泰勒近似(一階泰勒忘了嗎?f(x)=f(a)+f『(a)(x-a)+o(||x-a||).):直觀來講,convex性質是指函數曲線位於該點處的切線,也就是線性近似之上,而stronglyconvex則進一步要求位於該處的一個二次函數上方,也就是說要求函數不要太「平坦」而是可以保證有一定的「向上彎曲」的趨勢。專業點說,就是convex可以保證函數在任意一點都處於它的一階泰勒函數之上,而stronglyconvex可以保證函數在任意一點都存在一個非常漂亮的二次下界quadraticlowerbound。當然這是一個很強的假設,但是同時也是非常重要的假設。可能還不好理解,那我們畫個圖來形象的理解下。大家一看到上面這個圖就全明白了吧。不用我啰嗦了吧。還是啰嗦一下吧。我們取我們的最優解w*的地方。如果我們的函數f(w),見左圖,也就是紅色那個函數,都會位於藍色虛線的那根二次函數之上,這樣就算wt和w*離的比較近的時候,f(wt)和f(w*)的值差別還是挺大的,也就是會保證在我們的最優解w*附近的時候,還存在較大的梯度值,這樣我們才可以在比較少的迭代次數內達到w*。但對於右圖,紅色的函數f(w)只約束在一個線性的藍色虛線之上,假設是如右圖的很不幸的情況(非常平坦),那在wt還離我們的最優點w*很遠的時候,我們的近似梯度(f(wt)-f(w*))/(wt-w*)就已經非常小了,在wt處的近似梯度?f/?w就更小了,這樣通過梯度下降wt+1=wt-α*(?f/?w),我們得到的結果就是w的變化非常緩慢,像蝸牛一樣,非常緩慢的向我們的最優點w*爬動,那在有限的迭代時間內,它離我們的最優點還是很遠。所以僅僅靠convex性質並不能保證在梯度下降和有限的迭代次數的情況下得到的點w會是一個比較好的全局最小點w*的近似點(插個話,有地方說,實際上讓迭代在接近最優的地方停止,也是一種規則化或者提高泛化性能的方法)。正如上面分析的那樣,如果f(w)在全局最小點w*周圍是非常平坦的情況的話,我們有可能會找到一個很遠的點。但如果我們有「強凸」的話,就能對情況做一些控制,我們就可以得到一個更好的近似解。至於有多好嘛,這裡面有一個bound,這個bound的好壞也要取決於stronglyconvex性質中的常數α的大小。看到這里,不知道大家學聰明了沒有。如果要獲得stronglyconvex怎麼做?最簡單的就是往裡面加入一項(α/2)*||w||2。呃,講個stronglyconvex花了那麼多的篇幅。實際上,在梯度下降中,目標函數收斂速率的上界實際上是和矩陣XTX的conditionnumber有關,XTX的conditionnumber越小,上界就越小,也就是收斂速度會越快。這一個優化說了那麼多的東西。還是來個一句話總結吧:L2范數不但可以防止過擬合,還可以讓我們的優化求解變得穩定和快速。好了,這里兌現上面的承諾,來直觀的聊聊L1和L2的差別,為什麼一個讓絕對值最小,一個讓平方最小,會有那麼大的差別呢?我看到的有兩種幾何上直觀的解析:

D. L1正則如何處理多重共線性問題

多重共線性是使用線性回歸演算法時經常要面對的一個問題。在其他演算法中,例如決策樹和貝葉斯,前者的建模過程是逐步遞進,每次拆分只有一個變數參與,這種建模機制含有抗多重共線性干擾的功能;後者乾脆假定變數之間是相互獨立的,因此從表面上看,也沒有多重共線性的問題。但是對於回歸演算法,不論是一般回歸,邏輯回歸,或存活分析,都要同時考慮多個預測因子,因此多重共線性是不可避免需要面對的,在很多時候,多重共線性是一個普遍的現象。在構造預測模型時如何處理多重共線性是一個比較微妙的議題。既不能不加控制,又不能一刀切,認為凡是多重共線性就應該消除。

E. 如何理解近端梯度演算法

L1正則化是一種常用的獲取稀疏解的手段,同時L1范數也是L0范數的鬆弛范數。求解L1正則化問題最常用的手段就是通過加速近端梯度演算法來實現的。

考慮一個這樣的問題:

minx f(x)+λg(x)

x∈Rn,f(x)∈R,這里f(x)是一個二階可微的凸函數,g(x)是一個凸函數(或許不可導),如上面L1的正則化||x||。

此時,只需要f(x)滿足利普希茨(Lipschitz)連續條件,即對於定義域內所有向量x,y,存在常數M使得||f'(y)-f'(x)||<=M·||y-x||,那麼這個模型就可以通過近端梯度演算法來進行求解了。

ps:下面涉及很多數學知識,不想了解數學的朋友請跳到結論處,個人理解,所以也不能保證推理很嚴謹,如有問題,請一定幫忙我告訴我。

利普希茨連續條件的幾何意義可以認為是函數在定義域內任何點的梯度都不超過M(梯度有上限),也就是說不會存在梯度為正負無窮大的情況。

因而,我們有下圖所示的推算:

我們可以用f(y) = f(x)+f'(x)(y-x)+M/2*||y-x||2來近似的表示f(y),也可以認為是高維下的泰勒分解,取到二次項。

我們換一種寫法,f(xk+1) = f(xk)+f'(xk)(xk+1-xk)+M/2*||xk+1-xk||2,也就是說可以直接迭代求minx f(x),就是牛頓法辣。

再換一種寫法,f(xk+1)=(M/2)(xk+1-(xk+(1/M)f'(xk)))2+CONST,其中CONST是一個與xk+1無關的常數,也就是說,此時我們可以直接寫出這個條件下xk+1的最優取值就是xk+1=xk+(1/M)f'(xk)。令z=xk+(1/M)f'(xk)。

回到原問題,minx f(x)+λg(x),此時問題變為了求解minx (M/2)||x-z||2+λg(x)。

實際上在求解這個問題的過程中,x的每一個維度上的值是互不影響的,可以看成n個獨立的一維優化問題進行求解,最後組合成一個向量就行。

如果g(x)=||x||1,就是L1正則化,那麼最後的結論可以通過收縮運算元來表示。

即xk+1=shrink(z,λ/M)。具體來說,就是Z向量的每一個維度向原點方向移動λ/M的距離(收縮,很形象),對於xk+1的第i個維度xi=sgn(zi)*max(|zi|-λ/M,0),其中sgn()為符號函數,正數為1,負數為-1。

一直迭代直到xk收斂吧。

F. l1正則邏輯回歸有可能有多個局部最有參數估計

多變數線性回歸
n 代表特徵的數量
xi 代表第 i 個訓練實例,是特徵矩陣中的第 i 行,是一個向量。
xij 代表特徵矩陣中第 i 行的第 j 個特徵,也就是第 i 個訓練實例的第 j 個特徵
假設函數

hΘ(x)=Θ0x0+Θ1x1+⋯+Θnxn

定義Θ={Θ0,Θ1,⋯,Θn}
簡化為:

hΘ(x)=ΘTX

代價函數

J(Θ0,Θ1,⋯,Θn)=12m∑i=1m(hΘ(xi)−yi)2

多變數梯度下降

Θj:=Θj−α1m∑i=1m((hθ(xi)−yi)⋅xij)

特徵縮放
加快梯度下降法的收斂速度。
xn=xn−unSn
其中un是平均值,Sn是標准差。
學習效率
梯度下降演算法的每次迭代受到學習率的影響,如果學習率α過小,則達到收斂所需的迭代次數會非常高;如果學習率α過大,每次迭代可能不會減小代價函數,可能會越過局部最小值導致無法收斂。
α 參考取值:0.01, 0.03, 0.1, 0.03, 1, 3…

G. 什麼是L1緩存啊什麼是L2緩存啊

二級緩存是CPU性能的體現,像以前的P4的CPU,二級緩存都為1M,現在雙核心的為2M,之所有INTEL的CPU比AMD的CPU在制圖,處理數據方面快得多的原因也正在此,AMD的二級緩存基本上只有INTEL的一半。二級緩存是在和內存之間讀取數據的時候體現的,如果二級緩存不夠,那大量的數據就會堆積在內存里進行運算,所以速度就會大大降低,相反,如果二級緩存夠大,進入內存運算的數據就會相對的減少,所以二級緩存很重要,也是CPU的性能優越的指標。

H. KNN演算法中距離度量方式L1,L2,

L1是一階范數,L2是二階范數,COS是餘弦距離

I. 有人在學壓縮感知嗎誰知道怎麼用0范數或者L1范數最小化重構原始信號或者給我文獻也行

用0范數或1范數解決cs重構歸屬一個數學問題,猶如給定你一個公式,利用這個公式或者說原理去做出很多的演算法,cs重構本歸屬與對0范數的求解問題上的。
但0范數屬於數學上一個NP_hard問題,是無法解決的,所以不能直接用求0范數的理論去做演算法,從而提出一系列基於求0范數最小的貪婪類演算法。如MP,OMP等演算法。,這類演算法中,最為基礎的算是MP演算法了。貪婪演算法的速度較快,但是重構效果相對較差,需要的測量數也較多,不能高效地壓縮信號,並且對測量矩陣的要求更高。但總的來說,應用范圍廣。
數學家同時發現,求解L1范數也可以逼近與0范數的效果,即把NP_hard問題轉化為線性規劃問題。所以現在有很多用求L1范數原理而創造了各類演算法,最典型的是BP(基追蹤)演算法和梯度投影稀疏重構演算法。這種演算法重構效果很好,但是運算量大,復雜,應用於實際上可能不大。至少得改進其演算法。
還有一大類演算法,我不關注,不說了。
具體那些演算法怎麼實現,自己去網上下程序模擬一下吧。。。。

熱點內容
幼兒園源碼php 發布:2025-01-17 02:41:45 瀏覽:401
win引導Linux 發布:2025-01-17 02:36:49 瀏覽:263
ftp是傳輸類協議嗎 發布:2025-01-17 02:36:47 瀏覽:311
查看電視配置下載什麼軟體 發布:2025-01-17 02:36:41 瀏覽:159
寶馬x330i比28i多哪些配置 發布:2025-01-17 02:35:59 瀏覽:573
伺服器運維安全雲幫手 發布:2025-01-17 02:35:48 瀏覽:72
c應用編程 發布:2025-01-17 02:35:16 瀏覽:941
ios清除app緩存數據免費 發布:2025-01-17 02:34:33 瀏覽:375
微信企業號上傳文件 發布:2025-01-17 02:10:28 瀏覽:64
孩子幾歲可以學習編程 發布:2025-01-17 02:09:55 瀏覽:602