網(wǎng)絡安全導論 實驗13A 基于機器學習的人臉識別和入侵檢測_第1頁
網(wǎng)絡安全導論 實驗13A 基于機器學習的人臉識別和入侵檢測_第2頁
網(wǎng)絡安全導論 實驗13A 基于機器學習的人臉識別和入侵檢測_第3頁
網(wǎng)絡安全導論 實驗13A 基于機器學習的人臉識別和入侵檢測_第4頁
網(wǎng)絡安全導論 實驗13A 基于機器學習的人臉識別和入侵檢測_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

實驗13A基于機器學習的人臉識別和入侵檢測一、實驗目的了解基于深度學習的人臉識別的基本概念和方法。掌握如何使用opencv庫檢測圖像中人臉的位置。了解如何把機器學習理論用于入侵檢測。二、實驗準備本實驗為基于深度學習的人臉識別。要求用戶上傳一張包含單個人臉的圖片,系統(tǒng)檢測出人臉的位置,并且對人臉的特征來進行分析,識別出對應人物的年齡范圍、性別。性別識別是一個二元分類問題,識別所用的算法可以是決策樹、SVM、BP神經(jīng)網(wǎng)絡等。OpenCV官網(wǎng)給出的文檔是基于Fisherfaces檢測器(即LinearDiscriminantAnalysis,線性判別分析)方法實現(xiàn)的,其主要思路為,在低維表示下,相同的類應該緊密聚集在一起,不同的類應該盡可能的分開且距離應盡可能遠。圖13-?左右兩圖分別有兩條不同投影線L1和L2。如果將圖中的樣本投影到這兩條線上,可以看出,在L2的投影效果要好于在L1上的投影效果。圖13-?找到這樣一條直線后,如果要判斷某個待測樣本的分組,可以將該樣本點向投影線投影,然后根據(jù)投影點的位置來判斷其所屬類別。三、實驗內(nèi)容1、安裝anaconda和所需庫首先安裝annaconda,然后安裝opencv、opencv-contrib、os、PIL和numpy。opencv的下載地址:/project/opencv-contrib-python/,其他的庫anaconda會自帶安裝。打開anacondanavigator,在home中打開cmd。然后輸入pipinstall下載后庫文件。2、安裝完成后打開jupeter,輸入importcv2并運行,如果不出現(xiàn)錯誤,就說明安裝成功。在jupeter輸入cv2并運行,找到cv2所在的位置,然后在資源管理器中找到對應的文件夾,把其中的data文件夾中的opencv_contrib_python-2-cp36-abi3-win_amd64.whl文件拷貝到項目所在的目錄。3、準備一張照片,實現(xiàn)人臉定位importcv2ascvface_cascade=cv.CascadeClassifier("haarcascade_frontalface_default.xml")path=r'C:\Users\HP\PycharmProjects\pythonProject\haha.png'img=cv.imread(path)gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)faces=face_cascade.detectMultiScale(gray,1.3,5)print(img.shape)for(x,y,w,h)infaces:cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)cv.imshow("image",img)cv.waitKey(0)cv.destroyAllWindows()性別檢測設有人的性別實驗檢測數(shù)據(jù)如表9-1所示,分析并運行下述性別檢測程序。性別男女男女男女身高178155177165169160胡子100010importsklearnfromsklearnimporttreefeature=[[178,1],[155,0],[177,0],[165,0],[169,1],[160,0]]#訓練數(shù)據(jù)label=['man','woman','man','woman','man','woman']#性別分類clf=tree.DecisionTreeClassifier()#分類決策樹的分類決策方法clf=clf.fit(feature,label)#擬合訓練數(shù)據(jù),得到訓練模型參數(shù)s1=clf.predict([[158,0]])#對測試點[158,0]進行預測s2=clf.predict([[176,1]])#對測試點[176,1]進行預測print("s1=",s1)#輸出預測結(jié)果值print("s2=",s2)#輸出預測結(jié)果值四、實驗報告1、通過實驗回答下列問題說明本實驗用到的分類器有哪些? 用到了人臉分類器haarcascade_frontalface_default.xml 針對所給圖片,給出識別相應人物性別的代碼。對下列五張圖,用前四張作為訓練集(1、4為一組,標簽為0;2、3為一組,標簽為1),另外一張為測試圖片,編程輸出其標簽。代碼結(jié)果2、簡答題(1)簡述kDDCup99數(shù)據(jù)集。 KDD是數(shù)據(jù)挖掘與知識發(fā)現(xiàn)(DataMiningandKnowledgeDiscovery)的簡稱,KDDCUP是由ACM(AssociationforComputingMachiner)的SIGKDD(SpecialInterestGrouponKnowledgeDiscoveryandDataMining)組織的年度競賽。??”KDDCUP99dataset”就是KDD競賽在1999年舉行時采用的數(shù)據(jù)集。從這里下載KDD99數(shù)據(jù)集。??1998年美國國防部高級規(guī)劃署(DARPA)在MIT林肯實驗室進行了一項入侵檢測評估項目。林肯實驗室建立了模擬美國空軍局域網(wǎng)的一個網(wǎng)絡環(huán)境,收集了9周時間的TCPdump(*)網(wǎng)絡連接和系統(tǒng)審計數(shù)據(jù),仿真各種用戶類型、各種不同的網(wǎng)絡流量和攻擊手段,使它就像一個真實的網(wǎng)絡環(huán)境。這些TCPdump采集的原始數(shù)據(jù)被分為兩個部分:7周時間的訓練數(shù)據(jù)(**)大概包含5,000,000多個網(wǎng)絡連接記錄,剩下的2周時間的測試數(shù)據(jù)大概包含2,000,000個網(wǎng)絡連接記錄。??一個網(wǎng)絡連接定義為在某個時間內(nèi)從開始到結(jié)束的TCP數(shù)據(jù)包序列,并且在這段時間內(nèi),數(shù)據(jù)在預定義的協(xié)議下(如TCP、UDP)從源IP地址到目的IP地址的傳遞。每個網(wǎng)絡連接被標記為正常(normal)或異常(attack),異常類型被細分為4大類共39種攻擊類型,其中22種攻擊類型出現(xiàn)在訓練集中,另有17種未知攻擊類型出現(xiàn)在測試集中。??4種異常類型分別是:??1、DOS,denial-of-service.拒絕服務攻擊,例如ping-of-death,synflood,smurf等;??2、R2L,unauthorizedaccessfromaremotemachinetoalocalmachine.來自遠程主機的未授權(quán)訪問,例如guessingpassword;??3、U2R,unauthorizedaccesstolocalsuperuserprivilegesbyalocalunpivilegeduser.未授權(quán)的本地超級用戶特權(quán)訪問,例如bufferoverflowattacks;??4、PROBING,surveillanceandprobing,端口監(jiān)視或掃描,例如port-scan,ping-sweep等。??隨后來自哥倫比亞大學的SalStolfo教授和來自北卡羅萊納州立大學的WenkeLee教授采用數(shù)據(jù)挖掘等技術對以上的數(shù)據(jù)集進行特征分析和數(shù)據(jù)預處理,形成了一個新的數(shù)據(jù)集。該數(shù)據(jù)集用于1999年舉行的KDDCUP競賽中,成為著名的KDD99數(shù)據(jù)集。雖然年代有些久遠,但KDD99數(shù)據(jù)集仍然是網(wǎng)絡入侵檢測領域的事實Benckmark,為基于計算智能的網(wǎng)絡入侵檢測研究奠定基礎。 該數(shù)據(jù)集是從一個模擬的美國空軍局域網(wǎng)上采集來的9個星期的網(wǎng)絡連接數(shù)據(jù),分成具有標識的訓練數(shù)據(jù)和未加標識的測試數(shù)據(jù)。測試數(shù)據(jù)和訓練數(shù)據(jù)有著不同的概率分布,測試數(shù)據(jù)包含了一些未出現(xiàn)在訓練數(shù)據(jù)中的攻擊類型,這使得入侵檢測更具有現(xiàn)實性。

在訓練數(shù)據(jù)集中包含了1種正常的標識類型normal和22種訓練攻擊類型,如表1-1所示。另外有14種攻擊僅出現(xiàn)在測試數(shù)據(jù)集中。表1-1KDDCup99入侵檢測實驗數(shù)據(jù)的標識類型標識類型含義具體分類標識Normal正常記錄NormalDOS拒絕服務攻擊back、land、neptune、pod、smurf、teardropProbing監(jiān)視和其他探測活動ipsweep、nmap、portsweep、satanR2L來自遠程機器的非法訪問ftp_write、guess_passwd、imap、multihop、phf、spy、warezclient、warezmasterU2R普通用戶對本地超級用戶特權(quán)的非法訪問buffer_overflow、loadmodule、perl、rootkit數(shù)據(jù)特征:KDDCup99訓練數(shù)據(jù)集中每個連接記錄包含了41個固定的特征屬性和1個類標識,如圖1-1所示,標識用來表示該條連接記錄是正常的,或是某個具體的攻擊類型。在41個固定的特征屬性中,9個特征屬性為離散(symbolic)型,其他均為連續(xù)(continuous)型。(2)簡述利用KDDCup99數(shù)據(jù)集進行入侵檢測的步驟。 數(shù)據(jù)預處理聚類算法中要使用計算距離的方法對數(shù)據(jù)進行聚類,而連接記錄的固定特征屬性中有兩種類型的數(shù)值:離散型和連續(xù)型。對于連續(xù)型特征屬性,各屬性的度量方法不一樣。一般而言,所用的度量單位越小,變量可能的值域就越大,這樣對聚類結(jié)果的影響也越大,即在計算數(shù)據(jù)間距離時對聚類的影響越大,甚至會出現(xiàn)“大數(shù)”吃“小數(shù)”的現(xiàn)象。因此為了避免對度量單位選擇的依賴,消除由于屬性度量的差異對聚類產(chǎn)生的影響,需要對屬性值進行標準化。對于離散型特征屬性本文中并不作標準化處理,而是放在聚類算法中計算距離時處理。所以數(shù)據(jù)標準化是針對連續(xù)型特征屬性的。設訓練數(shù)據(jù)集有n條網(wǎng)絡連接記錄,每個記錄中有22個連續(xù)型屬性向量記作Xij(1≤i≤n,11≤j≤41)。對Xij數(shù)據(jù)預處理分為兩步:數(shù)值標準化和數(shù)值歸一化。表1-4以2秒時間窗口計算的流量特征特征名描述類型count過去的2秒內(nèi)與當前連接有著相同的目的地址的連接連續(xù)serror_rate出現(xiàn)SYN錯誤的連接次數(shù)連續(xù)rerror_rate出現(xiàn)REJ錯誤的連接次數(shù)連續(xù)same_srv_rate建立相同服務的連接次數(shù)連續(xù)diff_srv_rate建立不同服務的連接次數(shù)連續(xù)srv_count過去2秒時間內(nèi)出現(xiàn)和當前連接服務相同的連接次數(shù)連續(xù)srv_serror_rate出現(xiàn)SYN錯誤的連接次數(shù)連續(xù)srv_rerror_rate出現(xiàn)REJ錯誤的連接次數(shù)連續(xù)srv_diff_host_rate連接不相同主機的次數(shù)連續(xù)2.1數(shù)值標準化設$X'_{ij}$為$X_{ij}$數(shù)值標準化后的值。$X'_{ij}=\frac{X_{ij}-AVG_j}{STAD_j}$$AVG_j=\frac{1}{n}(X_{1j}+X_{2j}+...+X_{nj})$$STAD_j=\frac{1}{n}(\lvertX_{1j}-AVG_j\lvert+\lvertX_{2j}-AVG_j\lvert+...+\lvertX_{nj}-AVG_j\lvert)$2.2數(shù)值歸一化設$X''\_{ij}$為$X_{ij}$歸一化后的值。$X''_{ij}=\frac{X'_{ij}-X\_{min}}{X_{max}-X_{min}}$$X_{min}=min{X'_{ij}}$$X_{max}=max{X'_{ij}}$其中下標變量1<=i<=n,11<=j<=41數(shù)值歸一化處理過程及歸一化后數(shù)據(jù)實例如圖2-10.02.6104176374e-070.001057130021950.00.00.00.00.00.00.00.00.00.01565557729940.00.00.00.01.00.00.03529411764710.03529411764711.00.00.110.00.00.00.013.樣本分析KDD99數(shù)據(jù)集總共由500萬條記錄構(gòu)成,它還提供一個10%的訓練子集和測試子集。樣本類別分布表如下:標簽類別訓練集(10%)測試集(Corrected)1NORMAL97278605932PROBE410741663ipsweep12473064mscan/10535nmap231846portsweep10403547saint/7368satan158916339DOS39145822985310apache2/79411back2203109812land21913mailbomb/500014neptune1072015800115pod2648716processtable/75917smurf28079016409118teardrop9791219udpstorm/220U2R5222821buffer_overflow302222httptunnel/15823loadmodule9224perl3225ps/1626rootkit101327sqlattack/228xterm/1329R2L11261618930ftp_write8331guess_passwd53436732imap12133multihop71834named/1735phf4236sendmail/1737snmpgetattack/774138snmpguess/240639spy2/40warezclient1020/41warezmaster20160242worm/243xlock/944xsnoop/4訓練集和測試集分別為KDD99數(shù)據(jù)集中的10%訓練樣本和corrected的測試樣本;“/”表示該種攻擊類型只在測試集(或訓練集)中出現(xiàn),而未在訓練集(或測試集)中出現(xiàn);如上表,同DARPA98一樣,KDD99將攻擊類型分為4類,然后又細分為39小類,每一類代表一種攻擊類型,類型名被標記在訓練數(shù)據(jù)集每一行記錄的最后一項。

從表中可以看出,訓練集中共出現(xiàn)了22個攻擊類型,而剩下的17種只在測試集中出現(xiàn),這樣設計的目的是檢驗分類器模型的泛化能力,對未知攻擊類型的檢測能力是評價入侵檢測。4KNN算法4.1算法介紹kNN算法的指導思想是“近朱者赤,近墨者黑”,由你的鄰居來推斷出你的類別。計算步驟如下:算距離:給定測試對象,計算它與訓練集中的每個對象的距離找鄰居:圈定距離最近的k個訓練對象,作為測試對象的近鄰做分類:根據(jù)這k個近鄰歸屬的主要類別,來對測試對象分類4.2距離或相似度的衡量什么是合適的距離衡量?距離越近應該意味著這兩個點屬于一個分類的可能性越大。距離衡量包括歐式距離、夾角余弦等。本實驗使用歐式(Euclidean)距離。4.3類別的判定投票決定:少數(shù)服從多數(shù),近鄰中哪個類別的點最多就分為該類。

加權(quán)投票法:根據(jù)距離的遠近,對近鄰的投票進行加權(quán),距離越近則權(quán)重越大(權(quán)重為距離平方的倒數(shù))4.4K值的設定k太小,分類結(jié)果易受噪聲點影響;k太大,近鄰中又可能包含太多的其它類別的點。(對距離加權(quán),可以降低k值設定的影響)

k值通常是采用交叉檢驗來確定(以k=1為基準)

經(jīng)驗規(guī)則:k一般低于訓練樣本數(shù)的平方根4.5判定方式的選擇投票法沒有考慮近鄰的距離的遠近,距離更近的近鄰也許更應該決定最終的分類,所以加權(quán)投票法更恰當一些。4.6衡量距離的選擇高維度對距離衡量的影響:眾所周知當變量數(shù)越多,歐式距離的區(qū)分能力就越差。

變量值域?qū)嚯x的影響:值域越大的變量常常會在距離計算中占據(jù)主導作用,因此應先對變進行標準化。五、實驗結(jié)果人臉檢測性別檢測入侵檢測六、代碼人臉檢測代碼性別檢測代碼入侵檢測代碼importnumpyasnp#numpy庫fromsklearnimportmodel_selectionfromsklearn.model_selectionimportcross_val_score#交叉檢驗importpandasaspd#導入pandasfromsklearn.ensembleimportRandomForestClassifier#獲取數(shù)據(jù)data=pd.read_csv('corrected.csv',header=None,delimiter=",")data[1]=data[1].map({'tcp':0,'udp':1,'icmp':2})#將源文件中70種網(wǎng)絡服務類型轉(zhuǎn)換成數(shù)字標識data[2]=data[2].map({'aol':0,'auth':1,'bgp':2,'courier':3,'csnet_ns':4,'ctf':5,'daytime':6,'discard':7,'domain':8,'domain_u':9,'echo':10,'eco_i':11,'ecr_i':12,'efs':13,'exec':14,'finger':15,'ftp':16,'ftp_data':17,'gopher':18,'harvest':19,'hostnames':20,'http':21,'http_2784':22,'http_443':23,'http_8001':24,'imap4':25,'IRC':26,'iso_tsap':27,'klogin':28,'kshell':29,'ldap':30,'link':31,'login':32,'mtp':33,'name':34,'netbios_dgm':35,'netbios_ns':36,'netbios_ssn':37,'netstat':38,'nnsp':39,'nntp':40,'ntp_u':41,'other':42,'pm_dump':43,'pop_2':44,'pop_3':45,'printer':46,'private':47,'red_i':48,'remote_job':49,'rje':50,'shell':51,'smtp':52,'sql_net':53,'ssh':54,'sunrpc':55,'supdup':56,'systat':57,'telnet':58,'tftp_u':59,'tim_i':60,'time':61,'urh_i':62,'urp_i':63,'uucp':64,'uucp_path':65,'vmnet':66,'whois':67,'X11':68,'Z39_50':69})#將源文件中11種網(wǎng)絡連接狀態(tài)轉(zhuǎn)換成數(shù)字標識data[3]=data[3].map({'OTH':0,'REJ':0,'RSTO':0,'RSTOS0':0,'RSTR':0,'S0':0,'S1':0,'S2':0,'S3':0,'SF':1,'SH':0})#將源文件中攻擊類型轉(zhuǎn)換成數(shù)字標識(訓練集中共出現(xiàn)了22個攻擊類型,而剩下的17種只在測試集中出現(xiàn))'''data[35]=data[35].map({'normal.':0,'ipsweep.':1,'mscan.':2,'nmap.':3,'portsweep.':4,'saint.':5,'satan.':6,'apache2.':7,'back.':8,'land.':9,'mailbomb.':10,'neptune.':11,'pod.':12,'processtable.':13,'smurf.':14,'teardrop.':15,'udpstorm.':16,'buffer_overflow.':17,'httptunnel.':18,'loadmodule.':19,'perl.':20,'ps.':21,'rootkit.':22,'sqlattack.':23,'xterm.':24,'ftp_write.':25,'guess_passwd.':26,'imap.':27,'multihop.':28,'named.':29,'phf.':30,'sendmail.':31,'snmpgetattack.':32,'snmpguess.':33,'spy.':34,'warezclient.':35,'warezmaster.':36,'worm.':37,'xlock.':38,'xsnoop.':39})'''data[35]=data[35].map({'normal.':0,'ipsweep.':2,'mscan.':5,'nmap.':2,'portsweep.':2,'saint.':5,'satan.':2,'apache2.':5,'back.':1,'land.':1,'mailbomb.':5,'neptune.':1,'pod.':1,'processtable.':5,'smurf.':1,'teardrop.':1,'udpstorm.':5,'buffer_overflow.':4,'httptunnel.':5,'loadmodule.':4,'perl.':4,'ps.':5,'rootkit.':4,'sqlattack.':5,'xterm.':5,'ftp_write.':3,'guess_passwd.':3,'imap.':3,'multihop.':3,'named.':5,'phf.':3,'sendmail.':5,'snmpgetattack.':5,'snmpguess.':5,'spy.':3,'warezclient.':3,'warezmaster.':3,'worm.':5,'xlock.':5,'xsnoop.':5})np.isnan(data).any()#data里是否存在nandata.dropna(inplace=True)dataset=np.array(data)print("數(shù)據(jù)集shape:",dataset.shape)print(70*'-')#打印分隔線X=dataset[:,0:35]Y=dataset[:,35]Label=np.array(['0','1','2','3','4'])print("輸出類別:",Label)print(70*'-')#打印分隔線#劃分訓練集和測試集X_train,X_test,Y_train,Y_test=model_selection.train_test_split(X,Y,test_size=0.1)print("訓練集個數(shù):",X_train.shape[0])print(Y_train.shape[0])print("測試集個數(shù):",X_test.shape[0])print(70*'-')#打印分隔線#用隨機森林rf=RandomForestClassifier(bootstrap=True,class_weight=None,criterion='gini',max_depth=None,max_features='auto',max_leaf_nodes=None,min_samples_leaf=1,min_samples_split=2,min_weight_fraction_leaf=0.0,n_estimators=10,n_jobs=1,oob_score=False,random_state=None,verbose=0,warm_start=False)rf.fit(X_train,Y_train)probabil

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論