當前位置:首頁 » 電腦故障 » 神經網路異常檢測演算法
擴展閱讀
為加入網路列印機共享 2025-06-23 01:58:09
機房無線網路拓撲圖 2025-06-23 01:58:08
計算機網路個人規劃 2025-06-23 01:44:25

神經網路異常檢測演算法

發布時間: 2022-07-28 02:43:30

㈠ 異常聚集檢測報警系統最大的作用是什麼

1.告警精確度高
智能視頻分析系統內置智能演算法,能排除氣候與環境因素的干擾,有效彌補人工監控的不足,減少視頻監控系統整體的誤報率和漏報率。
2.實時識別報警
基於智能視頻分析和深度學習神經網路技術,對監控區域內的人員異常聚集行為進行識別,報警信息可顯示在監控客戶端界面,也可將報警信息推送到移動端。
3.全天候運行 穩定可靠
智能視頻監控系統可對監控畫面進行7×24不間斷的分析,大大提高了視頻資源的利用率,減少人工監控的工作強度。
4.告警存儲功能
對監控區域內的人員異常聚集行為實時識別預警,並將報警信息存儲到伺服器資料庫中,包括時間、地點、快照、視頻等。

㈡ 入侵檢測技術基礎的異常檢測技術

●概率統計異常檢測
原理:每一個輪廓保存記錄主體當前行為,並定時將當前輪廓與歷史輪廓合並形成統計輪廓(更新),通過比較當前輪廓與統計輪廓來判定異常行為。
優點:可應用成熟的概率統計理論
缺點:①由於用戶行為的復雜性,要想准確地匹配一個用戶的歷史行為非常困難,容易造成系統誤報和漏報;
②定義入侵閾值比較困難,閾值高則誤報率提高,閾值低則漏報率增高。
●神經網路異常檢測
原理:對下一事件的預測錯誤率在一定程度上反映了用戶行為的異常程度。
優點:①更好地表達了變數間的非線性關系,能更好地處理原始數據的隨機特徵,即不需要對這些數據做任何統計假設,並且能自動學習和更新;②有較好的抗干擾能力
缺點:網路拓撲結構以及各元素的權重很難確定

㈢ 用機器學習檢測異常點擊流

用機器學習檢測異常點擊流
本文內容是我學習ML時做的一個練手項目,描述應用機器學習的一般步驟。該項目的目標是從點擊流數據中找出惡意用戶的請求。點擊流數據長下圖這樣子,包括請求時間、IP、平台等特徵:

該項目從開始做到階段性完成,大致可分為兩個階段:演算法選擇和工程優化。演算法選擇階段挑選合適的ML模型,嘗試了神經網路、高斯分布、Isolation Forest等三個模型。由於點擊流數據本身的特性,導致神經網路和高斯分布並不適用於該場景,最終選擇了Isolation Forest。工程優化階段,最初使用單機訓練模型和預測結果,但隨著數據量的增加,最初的單機系統出現了性能瓶頸;然後開始優化性能,嘗試了分布化訓練,最終通過單機非同步化達到了性能要求。
1 演算法選擇
1.1 神經網路
剛開始沒經驗,受TensorFlow熱潮影響,先嘗試了神經網路。選用的神經網路是MLP(Multilayer Perceptron,多層感知器),一種全連接的多層網路。MLP是有監督學習,需要帶標簽的樣本,這里「帶標簽」的意思是樣本數據標注了哪些用戶請求是惡意的、哪些是正常的。但後台並沒有現成帶標簽的惡意用戶樣本數據。後來通過安全側的一些數據「間接」給用戶請求打上了標簽,然後選擇IP、平台、版本號、操作碼等數據作為MLP的輸入數據。結果當然是失敗,想了下原因有兩個:
1, 樣本的標簽質量非常差,用這些樣本訓練出來的模型性能當然也很差;
2, 輸入的特徵不足以刻畫惡意用戶。
數據的質量問題目前很難解決,所以只能棄用MLP。
1.2 高斯分布
然後嘗試其他模型。通過搜索發現,有一類ML模型專門用於異常檢測,找到了Andrew Ng介紹的基於高斯分布的異常檢測演算法:高斯分布如下圖所示:

這個演算法的思想比較簡單:與大部分樣本不一致的樣本就是異常;通過概率密度量化「不一致」。具體做法是:選擇符合高斯分布或能轉換為高斯分布的特徵,利用收集到的數據對高斯分布做參數估計,把概率密度函數值小於某個閾值的點判定為異常。
所謂的參數估計是指,給定分布數據,求分布的參數。對高斯分布來說,就是求μ和σ。用極大似然估計可以得到高斯分布參數的解析解:

得到高斯分布參數後,用下式計算概率密度:

X表示一個特徵輸入。若有多個特徵x0、x1、…、xn,一種簡單的處理方法是將其結果連乘起來即可:f(x) = f(x0)f(x1)…f(xn)。
然後選定一個閾值ε,把f(x) < ε的樣本判定為異常。ε值需根據實際情況動態調整,默認可設定ε = f(μ- 3σ)。
把這個模型初步應用於點擊流異常檢測時,效果還不錯,但在進一步實施過程中碰到一個棘手問題:樣本中最重要的一個特徵是操作碼,當前操作碼在微信後台的取值范圍是[101,1000],每個操作碼的請求次數是模型的基礎輸入,對900個特徵計算概率密度再相乘,非常容易導致結果下溢出,以致無法計算出精度合適的概率密度值。這個現象被稱為維度災難(Dimension Disaster)。
解決維度災難的一個常見做法是降維,降維的手段有多種,這里不展開討論了。在點擊流分析的實踐中,降維的效果並不好,主要原因有兩個:
1, 正常用戶和惡意用戶的訪問模式並不固定,導致很難分解出有效的特徵矩陣或特徵向量;
2, 降維的本質是有損壓縮,有損壓縮必定導致信息丟失。但在本例中每一維的信息都是關鍵信息,有損壓縮會極大破壞樣本的有效性。
高斯分布模型的維度災難在本例中較難解決,只能再嘗試其他模型了
1.3 Isolation Forest
Isolation Forest,可翻譯為孤異森林,該演算法的基本思想是:隨機選擇樣本的一個特徵,再隨機選擇該特徵取值范圍中的一個值,對樣本集做拆分,迭代該過程,生成一顆Isolation Tree;樹上葉子節點離根節點越近,其異常值越高。迭代生成多顆Isolation Tree,生成Isolation Forest,預測時,融合多顆樹的結果形成最終預測結果。Isolation Forest的基礎結構有點類似經典的隨機森林(Random Forest)。
這個異常檢測模型有效利用了異常樣本「量少」和「與正常樣本表現不一樣」的兩個特點,不依賴概率密度因此不會導致高維輸入的下溢出問題。提取少量點擊流樣本測試,它在900維輸入的情況下也表現良好,最終選擇它作為系統的模型。
2 工程優化
工程實現經歷了單機訓練、分布式訓練、單機非同步化訓練3個方案,下面內容介紹實現過程中碰到的問題和解決方法。
2.1 單機訓練
整個系統主要包括收集數據、訓練模型、預測異常、上報結果四個部分。
2.1.1 收集數據
剛開始嘗試該模型時,是通過手工方式從mmstreamstorage獲取樣本的:
1,通過logid 11357,得到手工登錄成功用戶的uin和登錄時間;
2,利用mmstreamstorage提供的介面,得到用戶登錄後10分鍾的點擊流;
但這樣做有兩個缺點:
1,上述步驟1是離線手工操作的,需要做成自動化;
2,mmstreamstorage的介面性能較差,只能提供2萬/min的查詢性能,上海IDC登錄的峰值有9萬/min。
改進辦法是復用點擊流上報模塊mmstreamstorage,增加一個旁路數據的邏輯:
1,手工登錄時在presence中記錄手工登錄時間,mmstreamstorage基於該時間旁路一份數據給mmguardstore。由於mmstreamstorage每次只能提供單挑點擊流數據,所以需要在mmguardstore中緩存;
2,mmguardstore做完數據清洗和特徵提取,然後把樣本數據落地,最後利用crontab定期將該數據同步到Hadoop集群中。
最終的數據收集模塊結構圖如下所示:

點擊流數據提供了IP、平台、版本號、操作碼等特徵,經過多次試驗,選定用戶手工登錄後一段時間內操作碼的訪問次數作為模型的輸入。
上面我們提到過點擊流的操作碼有900個有效取值,所以一個顯然的處理方法是,在mmguardstore中把用戶的點擊流數據轉化為一個900維的向量,key是cgi id,value是對應cgi的訪問次數。該向量刻畫了用戶的行為,可稱為行為特徵向量。
2.1.2 訓練模型
初起為了控制不確定性,只輸入1萬/分鍾的樣本給模型訓練和預測。系統的工作流程是先從Hadoop載入上一分鍾的樣本數據,然後用數據訓練Isolation Forest模型,最後用訓練好的模型做異常檢測,並將檢測結果同步到tdw。
在1萬/分鍾輸入下取得較好的檢測結果後,開始導入全量數據,全量數據數據的峰值為20萬/分鍾左右。出現的第一個問題是,一分鍾內無法完成載入數據、訓練模型、預測結果,單載入數據就耗時10分鍾左右。這里先解釋下為什麼有「一分鍾」的時間周期限制,主要原因有兩個:
1, 想盡快獲取檢測結果;
2, 由於點擊流異常檢測場景的特殊性,模型性能有時效性,需要經常用最新數據訓練新的模型。
解決性能問題的第一步是要知道性能瓶頸在哪裡,抽樣發現主要是載入數據和訓練模型耗時較多,預測異常和上報結果的耗時並沒有隨數據量的增加而快速上漲。
載入數據的耗時主要消耗在網路通信上:樣本文件太大了,導致系統從Hadoop同步樣本數據時碰到網路帶寬瓶頸。但由於樣本是文本類數據,對數據先壓縮再傳輸可極大減少通信量,這里的耗時比較容易優化。
訓練模型的耗時增加源於輸入數據量的增加。下圖是1萬樣本/min的輸入下,系統個階段的耗時:

其中:
載入程序: 2s
載入數據: 6s
訓練模型:11s
分類異常: 2s
保存結果: 4s
單輪總耗時:25s
需處理全量數據時,按線性關系換算,「訓練模型」耗時為:11s * 24 = 264s,約為4.4分鍾,單機下無法在1分鍾內完成計算。
最先想到的優化訓練模型耗時的辦法是分布式訓練。
2.2 分布式訓練
由於scikit-learn只提供單機版的Isolation Forest實現,所以只能自己實現它的分布式版本。了解了下目前最常用的分布式訓練方法是參數伺服器(Parameter Server,PS)模式,其想法比較簡單:訓練模型並行跑在多機上,訓練結果在PS合並。示意圖如下所示:

分布式訓練對演算法有一定要求,而Isolation Forest正好適用於分布式訓練。
然後嘗試在TensorFlow上實現Isolation Forest的分布式訓練版本。選擇TensorFlow的原因有主要兩個:
1, TensorFlow已經實現了一個分布式訓練框架;
2, TensorFlow的tf.contrib.learn包已經實現的Random Forest可作參考(Isolation Forest在結構上與Random Forest類似),只需對Isolation Forest定製一個Operation即可。
寫完代碼測試時,發現了個巨坑的問題:TenforFlow內部的序列化操作非常頻繁、性能十分差。構造了110個測試樣本,scikit-learn耗時只有0.340秒,29萬次函數調用;而TensorFlow耗時達207.831秒,有2.48億次函數調用。
TensorFlow性能抽樣:

Scikit-learn性能抽樣:

從TensorFlow的性能抽樣數據可以看到,耗時排前排的函數都不是實現Isolation Forest演算法的函數,其原因應該與TensorFlow基於Graph、Session的實現方式有關。感覺這里坑比較深,遂放棄填坑。
也了解了下基於Spark的spark-sklearn,該項目暫時還未支持Isolation Forest,也因為坑太深,一時半會搞不定而放棄了。
2.3 單機非同步化訓練
沒搞定分布式訓練,只能回到單機場景再想辦法。單機優化有兩個著力點:優化演算法實現和優化系統結構。
首先看了下scikit-learn中Isoaltion Forest的實現,底層專門用Cython優化了,再加上Joblib庫的多CPU並行,演算法實現上的優化空間已經很小了,只能從系統結構上想辦法。
系統結構上的優化有兩個利器:並行化和非同步化。之前的單機模型,載入數據、訓練模型、預測異常、上報結果在單進程中串列執行,由此想到的辦法是啟動4個工作進程分別處理相應的四個任務:非同步訓練模型、預測異常和上報結果,並行載入數據。工作進程之間用隊列通信,隊列的一個優勢是容易實現流量控制。
寫完代碼測試,卻發現YARD環境中的Python HDFS庫在多進程並發下直接拋異常。嘗試多個方法發現這個問題較難解決,暫時只能想辦法規避。經測試發現,直接從Hadoop同步所有壓縮過的樣本數據只需2秒左右,由此想到規避方法是:先單進程同步所有樣本數據,再多進程並發解壓、載入和預測。
按上述想法修改代碼測試,效果較好,處理所有樣本只需20秒左右,達到了1分鍾處理完所有樣本的要求。然後提交YARD作業線上跑,處理所有樣本耗時卻達到200~400秒:

咨詢YARD側同學,得知YARD對提交的離線作業有CPU配額的硬限制,分時段配額如下表:
00:00~09:00 80%
09:00~19:00 50%
19:00~23:00 15%
23:00~24:00 50%
晚高峰時段的配額只有15%。
與YARD側同學溝通,他們答應後續會支持scikit-learn庫的在線服務。目前通過手工方式在一台有scikit-learn的mmguardstore機器上運行在線服務,晚高峰時段處理全量數據耗時為20秒左右。
最終的系統結構圖如下圖所示:

模型訓練進程定期訓練最新的模型,並把模型通過隊列傳給預測進程。預測進程每分鍾運行一次,檢查模型隊列上是否有新模型可使用,然後載入數據、檢測異常,將檢測結果通過上報隊列傳給上報進程。上報進程block在上報隊列上,一旦發現有新數據,就根據數據類型執行上報監控、上報tdw等操作。
2.4 評估性能
安全側將異常用戶分為以下幾類:盜號、LBS/加好友、養號、欺詐、外掛/多開等。由於這些分類的異常打擊是由不同同學負責,不便於對Isolation Forest的分類結果做評估,因此需要在Isolation Forest的基礎上,再加一個分類器,標記「異常樣本」的小類。利用操作碼實現了該分類器。
接入全量數據後,每天准實時分析1億量級的樣本,檢測出500萬左右的異常,精確分類出15萬左右的惡意請求。惡意請求的uin、類型、發生時間通過tdw中轉給安全側。安全側通過線下人工分析和線上打擊,從結果看檢測效果較好。
2.5 持續優化
再回過頭觀察點擊流數據,我們使用的Isolation Forest模型只利用了操作碼的統計數據。可以明顯看到,點擊流是一個具備時間序列信息的時序數據。而自然語言處理(Natural LanguageProcessing,NLP)領域已經積累了非常多的處理時序數據的理論和實戰經驗,如LSTM、word2vec等模型。後續期望能引入NLP的相關工具挖掘出更多惡意用戶。

㈣ 什麼是BP神經網路

BP演算法的基本思想是:學習過程由信號正向傳播與誤差的反向回傳兩個部分組成;正向傳播時,輸入樣本從輸入層傳入,經各隱層依次逐層處理,傳向輸出層,若輸出層輸出與期望不符,則將誤差作為調整信號逐層反向回傳,對神經元之間的連接權矩陣做出處理,使誤差減小。經反復學習,最終使誤差減小到可接受的范圍。具體步驟如下:
1、從訓練集中取出某一樣本,把信息輸入網路中。
2、通過各節點間的連接情況正向逐層處理後,得到神經網路的實際輸出。
3、計算網路實際輸出與期望輸出的誤差。
4、將誤差逐層反向回傳至之前各層,並按一定原則將誤差信號載入到連接權值上,使整個神經網路的連接權值向誤差減小的方向轉化。
5、対訓練集中每一個輸入—輸出樣本對重復以上步驟,直到整個訓練樣本集的誤差減小到符合要求為止。

㈤ 異常檢測有哪些主要的分析方法

1. 概率統計方法
在基於異常檢測技術的IDS中應用最早也是最多的一種方法。
首先要對系統或用戶的行為按照一定的時間間隔進行采樣,樣本的內容包括每個會話的登錄、退出情況,CPU和內存的佔用情況,硬碟等存儲介質的使用情況等。
將每次採集到的樣本進行計算,得出一系列的參數變數對這些行為進行描述,從而產生行為輪廓,將每次采樣後得到的行為輪廓與已有輪廓進行合並,最終得到系統和用戶的正常行為輪廓。IDS通過將當前採集到的行為輪廓與正常行為輪廓相比較,來檢測是否存在網路入侵行為。
2. 預測模式生成法
假設條件是事件序列不是隨機的而是遵循可辨別的模式。這種檢測方法的特點是考慮了事件的序列及其相互聯系,利用時間規則識別用戶行為正常模式的特徵。通過歸納學習產生這些規則集,並能動態地修改系統中的這些規則,使之具有較高的預測性、准確性。如果規則在大部分時間是正確的,並能夠成功地運用預測所觀察到的數據,那麼規則就具有高可信度。
3. 神經網路方法
基本思想是用一系列信息單元(命令)訓練神經單元,這樣在給定一組輸入後、就可能預測出輸出。與統計理論相比,神經網路更好地表達了變數間的非線性關系,並且能自動學習並更新。實驗表明UNIX系統管理員的行為幾乎全是可以預測的,對於一般用戶,不可預測的行為也只佔了很少的一部分。

㈥ 神經網路異常檢測方法和機器學習異常檢測方法對於入侵檢測的應用

神經網路異常檢測方法

神經網路入侵檢測方法是通過訓練神經網路連續的信息單元來進行異常檢測,信息單元指的是命令。網路的輸入為用戶當前輸入的命令和已執行過的W個命令;用戶執行過的命令被神經網路用來預測用戶輸入的下一個命令,如下圖。若神經網路被訓練成預測用戶輸入命令的序列集合,則神經網路就構成用戶的輪郭框架。當用這個神經網路預測不出某用戶正確的後繼命令,即在某種程度上表明了用戶行為與其輪廓框架的偏離,這時表明有異常事件發生,以此就能作異常入侵檢測。


上面式子用來分類識別,檢測異常序列。實驗結果表明這種方法檢測迅速,而且誤警率底。然而,此方法對於用戶動態行為變化以及單獨異常檢測還有待改善。復雜的相似度量和先驗知識加入到檢測中可能會提高系統的准確性,但需要做進一步工作。

㈦ 演算法太多挑花眼

演算法太多挑花眼?教你如何選擇正確的機器學習演算法
機器學習演算法雖多,卻沒有什麼普適的解決方案。決策樹、隨機森林、樸素貝葉斯、深度網路等等等等,是不是有時候覺得挑花了眼呢?福利來啦~本文將教你慧眼識精,快速挑選出滿意的演算法!
機器學習既是一門科學,也是一種藝術。縱觀各類機器學習演算法,並沒有一種普適的解決方案或方法。事實上,有幾個因素會影響你對機器學習演算法的選擇。
有些問題是非常特別的,需要用一種特定的解決方法。例如,如果你對推薦系統有所了解,你會發現它是一類很常用的機器學習演算法,用來解決一類非常特殊的問題。而其它的一些問題則非常開放,可能需要一種試錯方法(例如:強化學習)。監督學習、分類、回歸等問題都是非常開放的,可以被用於異常檢測或建立更加廣泛的預測模型。
此外,我們在選擇機器學習演算法時所做出的一些決定與演算法的優化或技術層面關系並不大,而更多地與業務決策相關。下面,讓我們一起來看看有哪些因素能幫你縮小機器學習演算法的選擇范圍。
數據科學過程
在你開始研究不同的機器學習演算法前,你需要對自己擁有的數據、面對的問題及相關約束有清晰的了解。
理解你的數據
當我們決定使用哪種演算法時,我們所擁有的數據的類型和形態起著關鍵性的作用。有些演算法可以利用較小的樣本集合工作,而另一些演算法則需要海量的樣本。特定的演算法對特定類型的數據起作用。例如,樸素貝葉斯演算法對處理待分類的輸入特別有效,但是對於缺失值則一點都不敏感。
因此,你需要做到:
了解你的數據
1. 查看總結統計和數據可視化的結
百分比可以幫助你識別大多數數據的范圍
平均數和中位數可以描述集中趨勢
相關系數可以指出強的關聯性
2. 數據可視化
箱形圖可以識別出異常值
密度圖和直方圖可以顯示出數據的散布情況
散點圖可以描述二元關
數據清洗
1. 處理缺失值。缺失的數據對於某些模型的影響比對其它模型更大。即使是對於那些被用於處理缺失數據的模型來說,它們也可能對缺失數據很敏感(某些變數的缺失數據可能導致預測性能變差)
2. 選擇處理異常值的方法
異常值在多維數據中十分常見。
有些模型對異常值的敏感性比其它模型要低。通常而言,樹模型對於異常值的存在不太敏感。然而回歸模型、或者任何試圖使用方程的模型都會受到異常值的嚴重影響。
異常值可能是糟糕的數據收集造成的,也可能是合理的極值。
3. 數據需要被聚合嗎?
數據增強
1. 特徵工程是從原始數據中產生能夠被用於建模的數據的過程,可以起到以下幾種作用:
使模型更容易被解釋(如數據分箱(binning))
捕獲更復雜的關系(如神經網路)
減少數據冗餘並降低數據維度(如主成分分析(PCA))
重新縮放變數(如標准化或歸一化)
2. 不同的模型可能有不同的特徵工程的要求。有的模型有內置的特徵工程。
對問題進行分類
下一步是對問題進行分類。這是一個需要分兩步實現的過程。
1. 根據輸入分類:
如果你擁有的是帶標簽的數據,那麼這就是一個監督學習問題。
如果你擁有的是未標注過的數據,並且希望從中找到有用的結構,那麼這就是一個無監督學習問題。
如果你想要通過與環境的交互來優化一個目標函數,那麼這就是一個強化學習問題。
2. 根據輸出分類:
如果模型的輸出是一個(連續的)數字,那麼這就是一個回歸問題。
如果模型的輸出是一個類別,那麼這就是一個分類問題。
如果模型的輸出是一組用輸入數據劃分出的簇,那麼這就是一個聚類問題。
你想發現一個異常點嗎?此時你面對的就是一個異常檢測問題。
理解你要滿足的約束條
你需要考慮你能夠存儲數據的容量有多大?這取決於系統的存儲容量,你可能無法存儲若干 GB 大小的分類、回歸模型或者若干 GB 的用於聚類分析的數據。例如,在嵌入式系統中,你就會面臨這種情況。
對預測過程的速度是否有要求?在實時應用中,很顯然,盡快得出預測結果是十分重要的。例如,在自動駕駛問題中,應用必須盡可能快地對道路標志進行分類,以免發生交通事故。
對學習過程的速度是否有要求?在某些情況下,快速訓練模型是十分必要的:有時,你需要使用不同的數據集快速地實時更新你的模型。
尋找可用的演算法
當對自己的任務環境有了一個清晰的認識後,你就可以使用你所掌握的工具確定適用於待解決的問題並切實可行的演算法。一些影響你選擇模型的因素如下:
模型是否滿足業務目標
模型需要多少數據預處理工作
模型有多准確
模型的可解釋性如何
模型運行的速度有多快:構造模型需要多久?模型做出預測需要多長時間?
模型的可伸縮性如何
模型的復雜度是一個影響演算法選擇的重要標准。一般來說,一個更復雜的模型具備下列特徵:
它依賴於更多的特徵進行學習和預測(例如,使用十個而不是兩個特徵來預測目標)
它依賴於更復雜的特徵工程(例如,使用多項式特徵、交互特徵或主成分)
它有更大的計算開銷(例如,需要一個由 100 棵決策樹組成的隨機森林,而不是一棵單獨的決策樹)
除此之外,同樣的機器學習演算法可以基於參數的個數和某些超參數的選擇而變得更加復雜。例如:
回歸模型可以擁有更多的特徵,或者多項式項和交互項。
決策樹可以擁有更大或更小的深度。
將相同的演算法變得更加復雜增加了發生過擬合的幾率。

常用的機器學習演算法
線性回歸
這可能是機器學習中最簡單的演算法。例如,當你想要計算一些連續值,而不是將輸出分類時,可以使用回歸演算法。因此,當你需要預測一個正在運行的過程未來的值時,你可以使用回歸演算法。然而,當特徵冗餘,即如果存在多重共線性(multicollinearity)時,線性回歸就不太穩定。
在下列情況下可以考慮使用線性回歸:
從一個地方移動到另一個地方所需的時間
預測下個月某種產品的銷售情況
血液中的酒精含量對協調能力的影響
預測每個月禮品卡的銷售情況,並改善年收入的估算
Logistic 回歸
Logistic 回歸執行二進制分類,因此輸出二值標簽。它將特徵的線性組合作為輸入,並且對其應用非線性函數(sigmoid),因此它是一個非常小的神經網路的實例。
logistic回歸提供了許多方法對你的模型進行正則化處理,因此正如在樸素貝葉斯演算法中那樣,你不必擔心你的特徵是否相關。該模型還有一個很好的概率化的解釋。不像在決策樹或者支持向量機中那樣,你可以很容易地更新你的模型以獲取新的數據。如果你想要使用一個概率化的框架,或者你希望在未來能夠快速地將更多的訓練數據融合到你的模型中,你可以使用 logistic 回歸演算法。logistic 回歸還可以幫助你理解預測結果背後起作用的因素,它不完全是一個黑盒方法。
在下列情況下可以考慮使用 logistic 回歸演算法:
預測客戶流失
信用評分和欺詐檢測
評價市場營銷活動的效果
決策樹
決策樹很少被單獨使用,但是不同的決策樹可以組合成非常高效的演算法,例如隨機森林或梯度提升樹演算法。
決策樹很容易處理特徵交互,並且決策樹是一種非參數模型,所以你不必擔心異常值或者數據是否是線性可分的。決策樹演算法的一個缺點是,它們不支持在線學習,因此當你要使用新的樣本時,你不得不重新構建決策樹。決策樹的另一個缺點是,它很容易發生過擬合,而這就是像隨機森林(或提升樹)這樣的集成學習方法能夠派上用場的地方。決策樹也需要大量的內存空間(擁有的特徵越多,你的決策樹可能會越深、越大)
決策樹能夠很好地幫助你在諸多行動路徑中做出選擇:
做出投資決策
預測客戶流失
找出可能拖欠銀行貸款的人
在「建造」和「購買」兩種選擇間進行抉擇
銷售主管的資質審核
K-均值
有時,你完全沒有數據的標簽信息,並且你的目的是根據對象的特徵來為其打上標簽。這種問題被稱為聚類任務。聚類演算法可以在這種情況下被使用:例如,當你有一大群用戶,你希望根據他們共有的一些屬性將其劃分到一些特定的組中。
如果在你的問題聲明中有這樣的問題:例如,找出一群個體的組織形式,或將某些東西分組,或找出特定的組。這時,你就應該使用聚類演算法。
該方法最大的缺點是,K-均值演算法需要提前知道你的數據會有多少簇,因此這可能需要進行大量的試驗去「猜測」我們最終定義的簇的最佳個數——K。
主成分分析(PCA)
主成分分析能夠對數據進行降維。有時,你擁有各種各樣的特徵,這些特徵之間的相關性可能很高,而模型如果使用如此大量的數據可能會產生過擬合現象。這時,你可以使用主成分分析(PCA)技術。
主成分分析(PCA)能夠起作用的關鍵因素是:除了低維的樣本表徵,它還提供了各種變數的一種同步的低維表徵。同步的樣本和變數的表徵提供了一種能夠可視化地找到能夠表示一組樣本的特徵的變數的方法。
支持向量機
支持向量機(SVM)是一種在模式識別和分類問題中被廣泛應用的監督機器學習技術——當你的數據恰好有兩類時。
支持向量機准確率高,對於防止過擬合很好的理論保障。當你使用一個合適的核函數時,即使你的數據在基(低維)特徵空間中是線性不可分的,他們也可以很好地工作。支持向量機在文本分類問題中非常流行,在該問題中,輸入是一個維度非常高的空間是很正常的。然而,SVM 是一種內存密集型演算法,它很難被解釋,並且對其進行調優十分困難。
在下列現實世界的應用中,你可以使用支持向量機:
發現患有糖尿病等常見疾病的人
手寫字元識別
文本分類——將文章按照話題分類
股票市場價格預測
樸素貝葉斯
這是一種基於貝葉斯定理的分類技術,它很容易構建,非常適用於大規模數據集。除了結構簡單,據說樸素貝葉斯的表現甚至比一些復雜得多的分類方法更好。當 CPU 和內存資源有限時,樸素貝葉斯演算法也是一個很好的選項。
樸素貝葉斯非常簡單,你僅僅是在做大量的計數工作。如果樸素貝葉斯的條件獨立假設確實成立,樸素貝葉斯分類器的收斂速度會比 logistic 回歸這樣的判別模型更快,因此需要的訓練數據更少。即使樸素貝葉斯的假設不成立,樸素貝葉斯分類器往往也能很好地完成任務。如果你想使用一種快速的、簡單的、性能也不錯的模型,樸素貝葉斯是一個很好的選擇。這種演算法最大的缺點就是它不能學習到特徵之間的相互作用。
在下列真實世界的應用中,你可以使用樸素貝葉斯:
情感分析和文本分類
類似於 Netflix、Amazon 這樣的推薦系統
識別垃圾郵件
人臉識別
隨機森林
隨機森林是一種決策樹的集成方法。它能夠同時解決具有大規模數據集的回歸問題和分類問題,還有助於從數以千計的輸入變數中找出最重要的變數。隨機森林具有很強的可伸縮性,它適用於任何維數的數據,並且通常具有相當不錯的性能。此外,還有一些遺傳演算法,它們可以在具有最少的關於數據本身的知識的情況下,很好地擴展到任何維度和任何數據上,其中最簡單的實現就是微生物遺傳演算法。然而,隨機森林學習的速度可能會很慢(取決於參數設置),並且這種方法不能迭代地改進生成模型。
在下列現實世界的應用中,你可以使用隨機森林:
預測高危患者
預測零件在生產中的故障
預測拖欠貸款的人
神經網路
神經網路中包含著神經元之間連接的權重。這些權重是平衡的,逐次對數據點進行學習。當所有的權重都被訓練好後,如果需要對新給定的數據點進行回歸,神經網路可以被用於預測分類結果或一個具體數值。利用神經網路,可以對特別復雜的模型進行訓練,並且將其作為一種黑盒方法加以利用,而在訓練模型之前,我們無需進行不可預測的復雜特徵工程。通過與「深度方法」相結合,甚至可以採用更加不可預測的模型去實現新任務。例如,最近人們已經通過深度神經網路大大提升了物體識別任務的結果。深度學習還被應用於特徵提取這樣的非監督學習任務,也可以在人為干預更少的情況下,從原始圖像或語音中提取特徵。
另一方面,神經網路很難被解釋清楚,其參數設置也復雜地讓人難以置信。此外,神經網路演算法也都是資源密集型和內存密集型的。
SCIKIT 參考手冊
Scikit learning 為大家提供了一個非常深入的、解釋地很清楚的流程圖,它能夠幫助你選擇正確的演算法。我認為此圖十分方便。

結論
一般來說,你可以根據上面介紹的要點來篩選出一些演算法,但是要想在一開始就知道哪種方法最好是很難的。你最好多迭代幾次選擇演算法的過程。將你的數據輸入給那些你確定的潛在優秀機器學習演算法,通過並行或串列的方式運行這些演算法,最終評估演算法性能,從而選擇出最佳的演算法。
在最後,我想告訴你:為現實生活中的問題找到正確的解決方案,通常不僅僅是一個應用數學方法的問題。這要求我們對業務需求、規則和制度、相關利益者的關注點有所了解,並且具備大量的專業知識。在解決一個機器學習問題的同時,能夠結合並平衡這些問題是至關重要的,那些能做到這一點的人可以創造最大的價值。

㈧ BP神經網路的原理的BP什麼意思

人工神經網路有很多模型,但是日前應用最廣、基本思想最直觀、最容易被理解的是多層前饋神經網路及誤差逆傳播學習演算法(Error Back-Prooaeation),簡稱為BP網路。

在1986年以Rumelhart和McCelland為首的科學家出版的《Parallel Distributed Processing》一書中,完整地提出了誤差逆傳播學習演算法,並被廣泛接受。多層感知網路是一種具有三層或三層以上的階層型神經網路。典型的多層感知網路是三層、前饋的階層網路(圖4.1),即:輸入層、隱含層(也稱中間層)、輸出層,具體如下:

圖4.1 三層BP網路結構

(1)輸入層

輸入層是網路與外部交互的介面。一般輸入層只是輸入矢量的存儲層,它並不對輸入矢量作任何加工和處理。輸入層的神經元數目可以根據需要求解的問題和數據表示的方式來確定。一般而言,如果輸入矢量為圖像,則輸入層的神經元數目可以為圖像的像素數,也可以是經過處理後的圖像特徵數。

(2)隱含層

1989年,Robert Hecht Nielsno證明了對於任何在閉區間內的一個連續函數都可以用一個隱層的BP網路來逼近,因而一個三層的BP網路可以完成任意的n維到m維的映射。增加隱含層數雖然可以更進一步的降低誤差、提高精度,但是也使網路復雜化,從而增加了網路權值的訓練時間。誤差精度的提高也可以通過增加隱含層中的神經元數目來實現,其訓練效果也比增加隱含層數更容易觀察和調整,所以一般情況應優先考慮增加隱含層的神經元個數,再根據具體情況選擇合適的隱含層數。

(3)輸出層

輸出層輸出網路訓練的結果矢量,輸出矢量的維數應根據具體的應用要求來設計,在設計時,應盡可能減少系統的規模,使系統的復雜性減少。如果網路用作識別器,則識別的類別神經元接近1,而其它神經元輸出接近0。

以上三層網路的相鄰層之間的各神經元實現全連接,即下一層的每一個神經元與上一層的每個神經元都實現全連接,而且每層各神經元之間無連接,連接強度構成網路的權值矩陣W。

BP網路是以一種有教師示教的方式進行學習的。首先由教師對每一種輸入模式設定一個期望輸出值。然後對網路輸入實際的學習記憶模式,並由輸入層經中間層向輸出層傳播(稱為「模式順傳播」)。實際輸出與期望輸出的差即是誤差。按照誤差平方最小這一規則,由輸出層往中間層逐層修正連接權值,此過程稱為「誤差逆傳播」(陳正昌,2005)。所以誤差逆傳播神經網路也簡稱BP(Back Propagation)網。隨著「模式順傳播」和「誤差逆傳播」過程的交替反復進行。網路的實際輸出逐漸向各自所對應的期望輸出逼近,網路對輸入模式的響應的正確率也不斷上升。通過此學習過程,確定下各層間的連接權值後。典型三層BP神經網路學習及程序運行過程如下(標志淵,2006):

(1)首先,對各符號的形式及意義進行說明:

網路輸入向量Pk=(a1,a2,...,an);

網路目標向量Tk=(y1,y2,...,yn);

中間層單元輸入向量Sk=(s1,s2,...,sp),輸出向量Bk=(b1,b2,...,bp);

輸出層單元輸入向量Lk=(l1,l2,...,lq),輸出向量Ck=(c1,c2,...,cq);

輸入層至中間層的連接權wij,i=1,2,...,n,j=1,2,...p;

中間層至輸出層的連接權vjt,j=1,2,...,p,t=1,2,...,p;

中間層各單元的輸出閾值θj,j=1,2,...,p;

輸出層各單元的輸出閾值γj,j=1,2,...,p;

參數k=1,2,...,m。

(2)初始化。給每個連接權值wij、vjt、閾值θj與γj賦予區間(-1,1)內的隨機值。

(3)隨機選取一組輸入和目標樣本

提供給網路。

(4)用輸入樣本

、連接權wij和閾值θj計算中間層各單元的輸入sj,然後用sj通過傳遞函數計算中間層各單元的輸出bj

基坑降水工程的環境效應與評價方法

bj=f(sj) j=1,2,...,p (4.5)

(5)利用中間層的輸出bj、連接權vjt和閾值γt計算輸出層各單元的輸出Lt,然後通過傳遞函數計算輸出層各單元的響應Ct

基坑降水工程的環境效應與評價方法

Ct=f(Lt) t=1,2,...,q (4.7)

(6)利用網路目標向量

,網路的實際輸出Ct,計算輸出層的各單元一般化誤差

基坑降水工程的環境效應與評價方法

(7)利用連接權vjt、輸出層的一般化誤差dt和中間層的輸出bj計算中間層各單元的一般化誤差

基坑降水工程的環境效應與評價方法

(8)利用輸出層各單元的一般化誤差

與中間層各單元的輸出bj來修正連接權vjt和閾值γt

基坑降水工程的環境效應與評價方法

(9)利用中間層各單元的一般化誤差

,輸入層各單元的輸入Pk=(a1,a2,...,an)來修正連接權wij和閾值θj

基坑降水工程的環境效應與評價方法

(10)隨機選取下一個學習樣本向量提供給網路,返回到步驟(3),直到m個訓練樣本訓練完畢。

(11)重新從m個學習樣本中隨機選取一組輸入和目標樣本,返回步驟(3),直到網路全局誤差E小於預先設定的一個極小值,即網路收斂。如果學習次數大於預先設定的值,網路就無法收斂。

(12)學習結束。

可以看出,在以上學習步驟中,(8)、(9)步為網路誤差的「逆傳播過程」,(10)、(11)步則用於完成訓練和收斂過程。

通常,經過訓練的網路還應該進行性能測試。測試的方法就是選擇測試樣本向量,將其提供給網路,檢驗網路對其分類的正確性。測試樣本向量中應該包含今後網路應用過程中可能遇到的主要典型模式(宋大奇,2006)。這些樣本可以直接測取得到,也可以通過模擬得到,在樣本數據較少或者較難得到時,也可以通過對學習樣本加上適當的雜訊或按照一定規則插值得到。為了更好地驗證網路的泛化能力,一個良好的測試樣本集中不應該包含和學習樣本完全相同的模式(董軍,2007)。