nn演算法
Ⅰ 神經網路演算法是什麼
Introction
--------------------------------------------------------------------------------
神經網路是新技術領域中的一個時尚詞彙。很多人聽過這個詞,但很少人真正明白它是什麼。本文的目的是介紹所有關於神經網路的基本包括它的功能、一般結構、相關術語、類型及其應用。
「神經網路」這個詞實際是來自於生物學,而我們所指的神經網路正確的名稱應該是「人工神經網路(ANNs)」。在本文,我會同時使用這兩個互換的術語。
一個真正的神經網路是由數個至數十億個被稱為神經元的細胞(組成我們大腦的微小細胞)所組成,它們以不同方式連接而型成網路。人工神經網路就是嘗試模擬這種生物學上的體系結構及其操作。在這里有一個難題:我們對生物學上的神經網路知道的不多!因此,不同類型之間的神經網路體系結構有很大的不同,我們所知道的只是神經元基本的結構。
The neuron
--------------------------------------------------------------------------------
雖然已經確認在我們的大腦中有大約50至500種不同的神經元,但它們大部份都是基於基本神經元的特別細胞。基本神經元包含有synapses、soma、axon及dendrites。Synapses負責神經元之間的連接,它們不是直接物理上連接的,而是它們之間有一個很小的空隙允許電子訊號從一個神經元跳到另一個神經元。然後這些電子訊號會交給soma處理及以其內部電子訊號將處理結果傳遞給axon。而axon會將這些訊號分發給dendrites。最後,dendrites帶著這些訊號再交給其它的synapses,再繼續下一個循環。
如同生物學上的基本神經元,人工的神經網路也有基本的神經元。每個神經元有特定數量的輸入,也會為每個神經元設定權重(weight)。權重是對所輸入的資料的重要性的一個指標。然後,神經元會計算出權重合計值(net value),而權重合計值就是將所有輸入乘以它們的權重的合計。每個神經元都有它們各自的臨界值(threshold),而當權重合計值大於臨界值時,神經元會輸出1。相反,則輸出0。最後,輸出會被傳送給與該神經元連接的其它神經元繼續剩餘的計算。
Learning
--------------------------------------------------------------------------------
正如上述所寫,問題的核心是權重及臨界值是該如何設定的呢?世界上有很多不同的訓練方式,就如網路類型一樣多。但有些比較出名的包括back-propagation, delta rule及Kohonen訓練模式。
由於結構體系的不同,訓練的規則也不相同,但大部份的規則可以被分為二大類別 - 監管的及非監管的。監管方式的訓練規則需要「教師」告訴他們特定的輸入應該作出怎樣的輸出。然後訓練規則會調整所有需要的權重值(這是網路中是非常復雜的),而整個過程會重頭開始直至數據可以被網路正確的分析出來。監管方式的訓練模式包括有back-propagation及delta rule。非監管方式的規則無需教師,因為他們所產生的輸出會被進一步評估。
Architecture
--------------------------------------------------------------------------------
在神經網路中,遵守明確的規則一詞是最「模糊不清」的。因為有太多不同種類的網路,由簡單的布爾網路(Perceptrons),至復雜的自我調整網路(Kohonen),至熱動態性網路模型(Boltzmann machines)!而這些,都遵守一個網路體系結構的標准。
一個網路包括有多個神經元「層」,輸入層、隱蔽層及輸出層。輸入層負責接收輸入及分發到隱蔽層(因為用戶看不見這些層,所以見做隱蔽層)。這些隱蔽層負責所需的計算及輸出結果給輸出層,而用戶則可以看到最終結果。現在,為免混淆,不會在這里更深入的探討體系結構這一話題。對於不同神經網路的更多詳細資料可以看Generation5 essays
盡管我們討論過神經元、訓練及體系結構,但我們還不清楚神經網路實際做些什麼。
The Function of ANNs
--------------------------------------------------------------------------------
神經網路被設計為與圖案一起工作 - 它們可以被分為分類式或聯想式。分類式網路可以接受一組數,然後將其分類。例如ONR程序接受一個數字的影象而輸出這個數字。或者PPDA32程序接受一個坐標而將它分類成A類或B類(類別是由所提供的訓練決定的)。更多實際用途可以看Applications in the Military中的軍事雷達,該雷達可以分別出車輛或樹。
聯想模式接受一組數而輸出另一組。例如HIR程序接受一個『臟』圖像而輸出一個它所學過而最接近的一個圖像。聯想模式更可應用於復雜的應用程序,如簽名、面部、指紋識別等。
The Ups and Downs of Neural Networks
--------------------------------------------------------------------------------
神經網路在這個領域中有很多優點,使得它越來越流行。它在類型分類/識別方面非常出色。神經網路可以處理例外及不正常的輸入數據,這對於很多系統都很重要(例如雷達及聲波定位系統)。很多神經網路都是模仿生物神經網路的,即是他們仿照大腦的運作方式工作。神經網路也得助於神經系統科學的發展,使它可以像人類一樣准確地辨別物件而有電腦的速度!前途是光明的,但現在...
是的,神經網路也有些不好的地方。這通常都是因為缺乏足夠強大的硬體。神經網路的力量源自於以並行方式處理資訊,即是同時處理多項數據。因此,要一個串列的機器模擬並行處理是非常耗時的。
神經網路的另一個問題是對某一個問題構建網路所定義的條件不足 - 有太多因素需要考慮:訓練的演算法、體系結構、每層的神經元個數、有多少層、數據的表現等,還有其它更多因素。因此,隨著時間越來越重要,大部份公司不可能負擔重復的開發神經網路去有效地解決問題。
NN 神經網路,Neural Network
ANNs 人工神經網路,Artificial Neural Networks
neurons 神經元
synapses 神經鍵
self-organizing networks 自我調整網路
networks modelling thermodynamic properties 熱動態性網路模型
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
網格演算法我沒聽說過
好像只有網格計算這個詞
網格計算是伴隨著互聯網技術而迅速發展起來的,專門針對復雜科學計算的新型計算模式。這種計算模式是利用互聯網把分散在不同地理位置的電腦組織成一個「虛擬的超級計算機」,其中每一台參與計算的計算機就是一個「節點」,而整個計算是由成千上萬個「節點」組成的「一張網格」, 所以這種計算方式叫網格計算。這樣組織起來的「虛擬的超級計算機」有兩個優勢,一個是數據處理能力超強;另一個是能充分利用網上的閑置處理能力。簡單地講,網格是把整個網路整合成一台巨大的超級計算機,實現計算資源、存儲資源、數據資源、信息資源、知識資源、專家資源的全面共享。
Ⅱ 粒子群演算法是怎麼用於字元識別的
字元識別可看做屬於模式識別范疇,模式識別即對已有的模式進行識別,即分類。
粒子群本身是一個搜索演算法或者優化演算法,本質說,它不能用於分類。但是,結合其他的一些分類演算法,把分類的問題看成一個問題的優化問題的時候,粒子群就可以用於分類了。
舉個粒子,最近鄰分類NN,指的是測試集中的樣本與訓練集中距離最近樣本的模式(類別)相同。
現在假定給了訓練集A,測試集B。假設類別已知為C類。如果訓練集A特徵大的時候,勢必會影響分類時候的速度,那麼我們就可以把訓練集簡化到每類一個樣本(共C個樣本),那樣分類的時候只需要計算B中每個樣本到C個中心點中哪個的距離最小就可以了。
如何利用粒子群演算法得到這C個中心點呢??
一般採用聚類的思想,假設我們想找到C個中心點的每個中心點 是 到A中對應自己類別的樣本的距離和最小的C個點,那麼適應度函數就出來了。即訓練樣本到中心點樣本的距離和。
Ⅲ 用戶畫像機器學慣用到了哪些演算法
很多,主要說下監督學習這塊的演算法哈。歡迎討論。svm,支撐向量機,通過找到樣本空間中的一個超平面,實現樣本的分類,也可以作回歸,主要用在文本分類,圖像識別等領域,詳見:;
lr,邏輯回歸,本質也是線性回歸,通過擬合擬合樣本的某個曲線,然後使用邏輯函數進行區間縮放,但是一般用來分類,主要用在ctr預估、等;
nn,神經網路,通過找到某種非線性模型擬合數據,主要用在圖像等;
nb,樸素貝葉斯,通過找到樣本所屬於的聯合分步,然後通過貝葉斯公式,計算樣本的後驗概率,從而進行分類,主要用來文本分類;
dt,決策樹,構建一棵樹,在節點按照某種規則(一般使用信息熵)來進行樣本劃分,實質是在樣本空間進行塊狀的劃分,主要用來分類,也有做回歸,但更多的是作為弱分類器,用在model embedding中;
rf,隨進森林,是由許多決策樹構成的森林,每個森林中訓練的樣本是從整體樣本中抽樣得到,每個節點需要進行劃分的特徵也是抽樣得到,這樣子就使得每棵樹都具有獨特領域的知識,從而有更好的泛化能力;
gbdt,梯度提升決策樹,實際上也是由多棵樹構成,和rf不同的是,每棵樹訓練樣本是上一棵樹的殘差,這體現了梯度的思想,同時最後的結構是用這所有的樹進行組合或者投票得出,主要用在、相關性等;
knn,k最近鄰,應該是最簡單的ml方法了,對於未知標簽的樣本,看與它最近的k個樣本(使用某種距離公式,馬氏距離或者歐式距離)中哪種標簽最多,它就屬於這類;
</ol></ol></ol>
Ⅳ 歷史上第一個機器學習演算法是什麼
Adaboost是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其演算法本身是通過改變數據分布來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的准確率,來確定每個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。使用adaboost分類器可以排除一些不必要的訓練數據特徵,並將關鍵放在關鍵的訓練數據上面。
Ⅳ 演算法的時間復雜度是指什麼
演算法的時間復雜度是指:執行程序所需的時間。
一般情況下,演算法中基本操作重復執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近無窮大時。
T(n)/f(n)的極限值為不等於零的常數,則稱為f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n))為演算法的漸進時間復雜度,簡稱時間復雜度。比如:
在 T(n)=4nn-2n+2 中,就有f(n)=nn,使得T(n)/f(n)的極限值為4,那麼O(f(n)),也就是時間復雜度為O(n*n)。
時間復雜度中大O階推導是:
推導大O階就是將演算法的所有步驟轉換為代數項,然後排除不會對問題的整體復雜度產生較大影響的較低階常數和系數。
有條理的說,推導大O階,按照下面的三個規則來推導,得到的結果就是大O表示法:運行時間中所有的加減法常數用常數1代替。只保留最高階項去除最高項常數。
其他常見復雜度是:
f(n)=nlogn時,時間復雜度為O(nlogn),可以稱為nlogn階。
f(n)=n³時,時間復雜度為O(n³),可以稱為立方階。
f(n)=2ⁿ時,時間復雜度為O(2ⁿ),可以稱為指數階。
f(n)=n!時,時間復雜度為O(n!),可以稱為階乘階。
f(n)=(√n時,時間復雜度為O(√n),可以稱為平方根階。
Ⅵ 如何連結神經元
一種用於實時過程的神經網路在線自學習逆控制演算法
發布時間:2004.11.10 閱覽次數:2280 作者:彭一江 單位:長沙天海分析檢測自動化有限公司
摘 要: 本文探討了神經網路控制應用於實時過程的實現問題,提出一種網路訓練與控制分離並行的演算法。該演算法在對過程的逆模型進行實時在線自學習的同時,對過程實施逆控制,實現對復雜對象的自學習、自適應控制功能。文中還給出了一個計算機模擬實例的結果。
關鍵詞:實時過程;神經網路;在線自學習;逆控制。
ONE NEURAL NETWORK INVERSE CONTROL ALGORITHM
WITH ON-LINE SELF-LEARNING FOR REAL-TIME PROCESSES Abstract : In this paper , the study on the realization of application of neural network control to the real-time process is made and the algorithm with separated and parallel method for neural network training and control is advanced . Useing this algorithm,the on-line learning to the inverse model of real-time process can be performed, and concurrently , the inverse control can be performed in the process. It can realize functions of self-learning and adaptive control to complex processes.The result of one example of the computer simulation of the system is presented .
Key words: real-time process ; neural network ; on-line self-learning ; inverse control.
1 引言
近年來,人工神經網路 (簡稱神經網路或NN) 越來越多地應用於工業自動化控制領域。由於神經網路能夠充分逼近任意復雜的非線性關系和能夠學習與適應嚴重不確定性系統的動態特性,因此,採用基於NN人工智慧控制方法,引入自學習、自適應功能而構成的實時系統,在處理那些實時性要求高且難於用模型或規則描述、隨機性事件多、非線性嚴重、存在多個不同類型輸入和輸出的實時過程方面,顯示了極大的優越性。眾所周知,由於神經網路的學習需要耗費較長的時間,其實時應用策略仍是控制領域研究的熱點。
通常,神經網路在過程式控制制中用作控制器模仿器或過程模仿器,構成基於神經網路的控制系統。目前,這種控制系統常採用軟體方法實現。然而,神經網路的學習過程是一個慢過程,而作為一個實時系統,其主要目標是保證系統響應的及時性,必須同時滿足邏輯正確性和時間約束兩個條件。因此,對於快速有時甚至是慢速的實時過程,特別是對於有強實時任務(即要求該任務在時限內完成,否則其結果將失去可用性的任務)的過程,神經網路的學習慢速性是NN實時控制演算法實現的難點。一般採用NN離線學習與在線控制相結合的方法。在線學習與控制的方法大多局限於在一個控制周期內串列完成的演算法。本文在NN軟體實現上結合中斷處理技術,使網路的學習與控制分離和並行嵌套,提出一種用於實時過程的神經網路在線自學習逆控制演算法,用以處理難於建立對象模型 (包括快速和強實時) 的過程。
2 基於NN的實時過程式控制制原理
實時過程式控制制系統是指該系統實時地從外界獲得被控系統的當前狀態,進行預定的處理,並根據處理結果對外界被控系統進行及時控制,使其處於要求的狀態下。實時過程式控制制系統的模型是一個反饋環結構。如圖 1 所示。
2.1 系統NN基本結構
採用具有非線性特性函數的神經元及多層非循環連接模式的神經網路(NN)和反向傳播(B-P)學習演算法。
根據一般實時過程的特點,設神經網路輸入層共取n個神經元,分別代表輸入端x1,x2,···xi···xn。完成將外部各工藝參數輸入神經網路的功能;中間層取1∽2 層共設2n+m個神經元,代表神經網路的感知層;輸出層取m 個神經元,代表過程的輸出參數y1,y2,···yj,···ym。從外部特性看,網路相當於一個n輸入m輸出的多變數傳遞函數。而其內部特性卻充分反應了對象的動力學特性。系統NN基本結構如圖 2 所示。其中:(a)網路連接模型, (b)神經元模型。
在圖2所示的神經網路中,某一個神經元的結構如圖2(b)所示。其中Xi為輸入信息,Wi為權值,θi 為閾值,F是表示神經元活動的特性函數,F刻劃了神經元輸入信號與
輸出信息之間對應的關系 。
2.2 網路權值學習演算法
神經元特性函數取S型函數,即:
F(X)= 1/(1+e-x) (2-1)
網路採用的B-P演算法是前向計算輸出與反向傳播誤差相結合的進行權值調整的過程。
設網路中第i層某個神經元與後一層第j層的連接權值為W[ij],輸入為X[j] ,輸出為X[i]'。由圖3可得:
Xi '=F(Xi )=1/(1+e-Xi+θi) (2-2)
Xi =∑Wij ·Xj (2-3)
誤差反傳採用改進的Delta權值調整公式[4] :
Wij(n+1)=Wij(n)+ΔWij(n+1) (2-4)
ΔWij(n+1)=η·δj·X'i+α(ΔWij(n)) (2-5)
式中:
η為學習率(取η=0.1~0.9);
α為動量系數(取α=0.1~0.8);
δj為神經元輸出誤差。
採用基於系統誤差梯度的方法調整權值 [4] ,即:
當 j 為輸出層時:
δj=-( Xi '-Xj)·X'j·(1-X'j) (2-6)
當j為中間層時:
δj=(∑δk·Wjk)·X'j·(1-X'j) (2-7)
2.3 NN在線學習控制結構
系統以過程輸出量Y為控制對象,以Y=Ysr(給定常數)為控制目標,以 U過程式控制制量,以事先離線進行過權值初始化訓練、並且在生產過程中不斷進行在線學習的神經網路系統辯識模型NN為控制模型,並由此辯識模型計算某一時刻所需控制量U值。構成基於神經網路的實時控制系統,實現對Yr的自動跟蹤。系統控制原理框圖如圖3所示。圖3中,P為實時過程的實際模型;BP為輸出誤差向網路內部連接權值反傳調整權值的演算法。S為網路權值傳送軟體開關。
2.4 過程模型在線自學習
系統首先採用離線訓練的方式形成網路的連接權值矩陣初始值,包括建立各種不同神經網路模型結構參數,以提高在線學習速度。
系統投入實時控制後,程序在一定條件下啟動NN自學習功能,將實時採集的工藝參數通過特定處理後,作為訓練樣本輸入網路,進行連接權值的調整。由於NN模型不需要知道對象的任何先驗知識,在限定NN拓撲下,其連接權值不僅規定了模型的參數,同時也規定了模型的結構性質,因此,用這種方式訓練出來的的神經網路模型,可以充當對象的模仿器[1]。系統不斷地根據生產過程中的各種相關參數,反復調整網路權值,在線建立過程逆模型。
2.5 模型逆控制
過程模型模仿網路NN2投入實時控制前經過離線訓練,使系統在投入控制後的初始階段有較好的穩定性並使NN2能較快地完成以後的在線學習。在NN2不斷學習和NN1調節控制量的過程中,NN2輸入輸出特性能夠越來越准確地模擬實際過程模型的輸入輸出特性。經若干個模型學習周期,NN2 學習誤差達到期望值,NN2 的連接權值暫時固定下來。當過程輸出與系統設定的偏差大於期望值時,NN2的連接權值傳送給調節器模仿器NN1,作為調節器計算新的控制量,同時,啟動在線學習開關 S,NN2開始進行新的學習。當系統產生控制中斷而進入控制周期,系統先對過程狀態參數進行一次實時檢測,根據當前的過程狀態由NN1對控制量進行調節,完成一次在特定工藝狀態參數下的控制量的動態設定。
當NN充分接近實際模型,即:NN2=P-1時,由於NN1=NN2,NN1·P=P-1·P=1,則Y=Ysr,即系統可實現對給定目標值的跟蹤。
3 軟體實現
對實時控制系統而言,軟體設計應著重考慮NN學習演算法、樣本形成、網路推理之間的時序問題。系統採用內部中斷與外部中斷相結合的方式處理時序問題。軟體設計兩個中斷處理子程序,其中一個為定時與采樣中斷處理子程序,
採用修改機器內部定時中斷向量的方法,另一個為實時控制及樣本提取中斷處理子程序。採用外部脈沖信號產生中斷申請的響應方法。網路學習則在主程序的大循環中進行。
系統投運前,NN通過離線訓練獲初始知識。離線訓線的樣本可以利用工藝過程中的歷史數據產生,或由該領域專家的知識形成。
實時控制中NN以在線學習方式運行。學習是一個的大循環,不斷以樣本子集緩沖區的實時樣本對網路進行訓練。而樣本緩沖區的實時樣本的刷新是由外部中斷服務子程序根據樣本提取邏輯進行的,系統實時地將實際過程中產生的新樣本替換樣本緩沖區中最先前的樣本。同時,一旦時間達到某一設定的周期,系統將樣本緩沖區的樣本存入硬碟作為歷史樣本供以後使用。內部中斷服務子程序採集的現場數據供顯示用,並且提供樣本提取邏輯所需的計時信息。採用這種大循環進行NN學習;內部時鍾定時中斷進行數據採集與處理並提供樣本獲取和控制時序邏輯;外部中斷請求進行樣本提取和實時控制的程序結構,充分利用了CPU的大量空閑時間,即照顧了學習的耗時性,又滿足了數據採集的及時性和控制的適時性。實時控制流程及中斷服務子程序見圖4。
其中:(a) 實時控制主模塊; (b) 實時數據採集及定時中斷處理子程序;(c)控制輸出及樣本提取中斷處理子程序。
4 計算機模擬實例結果
計算機模擬實驗程序用C++編制,在486微機上運行。
系統模擬所用數學模型為螺紋鋼筋軋後控冷工藝過程的一個多輸入單輸出 (根據生產實際數據產生的回歸分析模型)[5,6]:
Ts= -4.1·Qy -156.8·t -4.6·Tw +29.3·Φ+0.21·Tf +50·C +850 ( 4-1)
其中過程輸出為Y = Ts ,目標值Yr = 620 。
設NN輸入 X= { t , Tw , Φ , Tf , C , Ts } ;NN輸出U = Qy 。
網路為6×12×12×1結構,運行前離線訓練重復次數為7000次,學習時間為8分鍾,網路輸出總誤差為0.00005。經過訓練的NN用於模擬運行,模擬在線自學習控制,學習 時間小於0.5秒。模擬運行結果見表1。表中數據經歸一化處理,以保證網路輸出值在(0,1) 區間內;其中Qy、Ts為初始值,Qy'、Ts'為執行的結果值。
由表1可知,系統能夠在鋼筋終軋溫度Tf變化時,自動改變水量設定值Qy,使其自回火溫度穩定在目標值Tsr=602℃ (誤差小於1℃)左右。模擬結果表明,這種基於NN模型自學習的逆控制方法,有較強的自學習、自適應能力。在處理一般非線性、隨機性、時變及多變數輸入輸出的實時過程方面,有較好的開發應用前景。
參 考 文 獻
[1] 周節其,徐建閩. 神經網路控制系統的研究與展望. 控制理論與應用,1992,9(6):569∽575
[2]焦李成. 神經網路的應用與實現. 西安:西安電子科技大學大學出版社.1995,261~264
[3] 袁曾任,郭新鋼. 基於B-P演算法的神經網路作為離散時間非線性對象的逆控制, 電氣自動化,1994,(4):39~41
[4]包約翰著. 自適應模式識別與神經網路. 馬頌德等譯. 北京:科學出版社.1992,109~125
[5] 張泰山,彭一江. 基於神經網路的鋼筋軋後冷卻自學習控制系統 .中國有色金屬學報,1995 ,Vol.5, Suppl.4, 380~384
[6] 彭一江. 基於神經網路的鋼筋軋後冷卻智能控制系統 .中南工業大學碩士學位論文. 長沙. 1996
Ⅶ 線性分類器有哪些
線性分類器有三大類(線性分類器三種最優准則):感知器准則函數、SVM、Fisher准則,而貝葉斯分類器不是線性分類器。
感知器准則函數:代價函數J=-(W*X+w0),分類的准則是最小化代價函數。感知器是神經網路(NN)的基礎,網上有很多介紹。
SVM:支持向量機也是很經典的演算法,優化目標是最大化間隔(margin),又稱最大間隔分類器,是一種典型的線性分類器。(使用核函數可解決非線性問題)
Fisher准則:更廣泛的稱呼是線性判別分析(LDA),將所有樣本投影到一條遠點出發的直線,使得同類樣本距離盡可能小,不同類樣本距離盡可能大,具體為最大化「廣義瑞利商」。
Ⅷ 求快速傅里葉演算法的C語言實現代碼
這是源於 Numerical Recipes 的關鍵性的函數,我曾使用過(書本可能有印刷錯誤,這里給的沒有錯誤)。我不可能給你在這里講解語句功能,你可以查原書。
isign 1 或 0 是正變換和反變換。調用前,要自己去掉 mean,尾部要自己 padding ( 最簡單添0),時間域 和 頻率 域 要自己 濾波。 nn 必須是2的整數次方,例如1024,4096。
#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr
void jfour1(float ya[], unsigned long nn, int isign)
{
unsigned long n,mmax,m,j,istep,i;
double wtemp,wr,wpr,wpi,wi,theta;
float tempr,tempi;
n=nn << 1;
j=1;
for (i=1;i<n;i+=2) {
if (j > i) {
SWAP(ya[j],ya[i]);
SWAP(ya[j+1],ya[i+1]);
}
m=n >> 1;
while (m >= 2 && j > m) {
j -= m;
m >>= 1;
};
j += m;
};
mmax=2;
while (n > mmax) {
istep=mmax << 1;
theta=isign*(6.28318530717959/mmax);
wtemp=sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi=sin(theta);
wr=1.0;
wi=0.0;
for (m=1;m<mmax;m+=2) {
for (i=m;i<=n;i+=istep) {
j=i+mmax;
tempr = wr * ya[j]- wi * ya[j+1];
tempi = wr * ya[j+1] + wi * ya[j];
ya[j] = ya[i] - tempr;
ya[j+1] = ya[i+1] - tempi;
ya[i] += tempr;
ya[i+1] += tempi;
};
wr = (wtemp=wr) * wpr - wi * wpi + wr;
wi = wi * wpr + wtemp * wpi + wi;
};
mmax=istep;
};
}
#undef SWAP
void jrealft(float ya[], unsigned long n, int isign)
{
void jfour1(float ya[], unsigned long nn, int isign);
unsigned long i,i1,i2,i3,i4,np3,n05;
float c1=0.5,c2,h1r,h1i,h2r,h2i;
double wr,wi,wpr,wpi,wtemp,theta;
n05 = n >> 1;
theta=3.141592653589793/(double) (n05);
if (isign == 1) {
c2 = -0.5;
jfour1(ya,n05,1);
} else {
c2=0.5;
theta = -theta;
};
wtemp=sin(0.5*theta);
wpr = -2.0*wtemp*wtemp;
wpi=sin(theta);
wr=1.0+wpr;
wi=wpi;
np3=n+3;
for (i=2;i<=(n>>2);i++) {
i4=1+(i3=np3-(i2=1+(i1=i+i-1)));
h1r = c1 * (ya[i1] + ya[i3]);
h1i = c1 * (ya[i2] - ya[i4]);
h2r = -c2* (ya[i2] + ya[i4]);
h2i = c2 * (ya[i1] - ya[i3]);
ya[i1] = h1r + wr * h2r - wi * h2i;
ya[i2] = h1i + wr * h2i + wi * h2r;
ya[i3] = h1r - wr * h2r + wi * h2i;
ya[i4] = -h1i + wr * h2i + wi * h2r;
wr= (wtemp=wr) * wpr - wi * wpi + wr;
wi=wi * wpr + wtemp * wpi + wi;
};
if (isign == 1) {
ya[1] = (h1r=ya[1]) + ya[2];
ya[2] = h1r-ya[2];
} else {
ya[1] = c1 * ((h1r=ya[1]) + ya[2]);
ya[2]=c1 * (h1r - ya[2]);
jfour1(ya,n05,-1);
}
}
Ⅸ 實現冒泡排序演算法(按從小到大)。
#include<stdio.h>
int main()
{
int temp,a[2000],n,i,j;
char c1;
printf("請輸入元素個數n\n");
scanf("%d",&n);
printf("請輸入元素\n");
for(i=0;i<n;i++)
scanf("%d%c",&a[i],&c1);
for(i=0;i<n;i++)
{
for(j=n-1;j>0;j--)
{
if(a[j]<a[j-1])
{
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
for(i=0;i<n-1;i++)
printf("%d,",a[i]);
printf("%d\n",a[n-1]);
return 0;
}
Ⅹ 數據挖掘 K-NN演算法 這個題 過程對嗎!!!幫忙下 謝謝
過程正確。不需要一定要和第一個比。
KNN演算法[5]的基本思路是[6]:在給定新文本後,考慮在訓練文本集中與該新文本距離最近(最相似)的 K 篇文本,根據這 K 篇文本所屬的類別判定新文本所屬的類別,具體的演算法步驟如下:
一、:根據特徵項集合重新描述訓練文本向量
二、:在新文本到達後,根據特徵詞分詞新文本,確定新文本的向量表示
三、:在訓練文本集中選出與新文本最相似的 K 個文本,