版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
多層感知機(jī)與DNN算法本文將介紹神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的區(qū)別和聯(lián)系。介紹TensorFlow的基礎(chǔ)知識(shí),包括操作、張量、變量和會(huì)話,以及TensorFlow的運(yùn)行模式,包括單機(jī)模式和集群模式。然后通過(guò)案例介紹如何使用不同神經(jīng)網(wǎng)絡(luò)算法識(shí)別基于MNIST網(wǎng)絡(luò)算法來(lái)識(shí)別垃圾郵件。目錄TOC\o"1-1"\h\u116361神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí) 396132TensorFlow編程模型 7174943TensorFlow的運(yùn)行模式 14323034示例:在TensorFlow下識(shí)別驗(yàn)證碼 16193845示例:在TensorFlow下識(shí)別驗(yàn)證碼 21309276示例:在TensorFlow下識(shí)別驗(yàn)證碼 25234637示例:在TensorFlow下識(shí)別垃圾郵件 28131118示例:在TensorFlow下識(shí)別垃圾郵件 32神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)從文章起,我們就要開始接觸令人興奮的深度學(xué)習(xí)算法了。神經(jīng)網(wǎng)絡(luò)由輸入層、隱藏層和輸出層組成,如果隱藏層只有一層,就是最簡(jiǎn)單的單層神經(jīng)網(wǎng)絡(luò),如圖15-1所示。圖15-1 單層神經(jīng)網(wǎng)絡(luò)如果隱藏層具有多層,就是多層感知機(jī),如圖15-2所示。深度學(xué)習(xí)就是多層感知機(jī)的一種。狹義的多層感知機(jī),要求必須是全連接的,所謂全連接,就是每個(gè)隱藏層的任何一個(gè)節(jié)點(diǎn),都與下一層隱藏層的全部節(jié)點(diǎn)連接,如圖15-3所示。圖15-2 多層感知非全連接神經(jīng)網(wǎng)絡(luò)如圖15-4所示。圖15-3 全連接的神經(jīng)網(wǎng)絡(luò)圖15-4 非全連接的神經(jīng)網(wǎng)絡(luò)深度神經(jīng)網(wǎng)絡(luò)(DeepNeuralNetwork,DNN)就是一種全連接的多層感知機(jī)。常見的深度學(xué)習(xí)包括DNN、卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)。TensorFlow編程模型TensorFlow是谷歌研發(fā)的第二代人工智能學(xué)習(xí)系統(tǒng),其命名來(lái)源于本身的運(yùn)行原理。Tensor也叫張量,即所謂的N維數(shù)組;Flow也叫流,即所謂基于數(shù)據(jù)流圖的計(jì)算;TensorFlow為張量從流圖的一端流動(dòng)到另一端的計(jì)算過(guò)程。TensorFlow將復(fù)雜的數(shù)據(jù)結(jié)構(gòu)傳輸至人工智能神經(jīng)網(wǎng)中進(jìn)行分析和處理,如圖15-5所示。圖15-5 TensorFlow官網(wǎng)的示例圖TensorFlow計(jì)算模型中,最基礎(chǔ)的4個(gè)組件是操作、張量、變量和會(huì)話。操作把算法表示成一個(gè)個(gè)操作的疊加,可以非常清晰地看到數(shù)據(jù)之間的關(guān)系,而且這樣的基本操作也具有普遍性。在TensorFlow中,當(dāng)數(shù)據(jù)流過(guò)操作節(jié)點(diǎn)的時(shí)候就可以對(duì)數(shù)據(jù)進(jìn)行操作。一個(gè)操作可以有零個(gè)或多個(gè)輸入,產(chǎn)生零個(gè)或多個(gè)輸出。一個(gè)操作可能是一次數(shù)學(xué)計(jì)算,一個(gè)變量或常量,一個(gè)數(shù)據(jù)流走向控制,一次文件IO或者是一次網(wǎng)絡(luò)通信。其中,一個(gè)常量可以看成沒有輸入、只有一個(gè)固定輸出的操作。張量在計(jì)算圖中,每個(gè)邊就代表數(shù)據(jù)從一個(gè)操作流到另一個(gè)操作。這些數(shù)據(jù)被表示為張量,一個(gè)張量可以看成多維的數(shù)組或者高維的矩陣。關(guān)于TensorFlow中的張量,需要注意的是張量本身并沒有保存任何值,張量?jī)H僅提供了訪問(wèn)數(shù)值的一個(gè)接口,可以看成數(shù)值的一種引用。在TensorFlow實(shí)際使用中我們也可以發(fā)現(xiàn),在run之前的張量并沒有分配空間,此時(shí)的張量?jī)H僅表示了一種數(shù)值的抽象,用來(lái)連接不同的節(jié)點(diǎn),表示數(shù)據(jù)在不同操作之間的流動(dòng)。變量代的進(jìn)行,每次權(quán)重的值會(huì)發(fā)生相應(yīng)的變化,這樣的值就可以當(dāng)作變推斷的。會(huì)話在TensorFlow中,所有操作都必須在會(huì)話(session)中執(zhí)行,會(huì)話負(fù)責(zé)分配和管理各種資源。在會(huì)話中提供了一個(gè)run方法,可以用它來(lái)執(zhí)行計(jì)算圖整體或者其中的一部分節(jié)點(diǎn)。在執(zhí)行run方法時(shí),還需要用feed_dict把相關(guān)數(shù)據(jù)輸入到計(jì)算圖。當(dāng)run被調(diào)用時(shí),TensorFlow將會(huì)從指定的輸出節(jié)點(diǎn)開始,向前查找所有的依賴節(jié)點(diǎn),所有依賴節(jié)點(diǎn)都將被執(zhí)行。這些操作隨后將被分配到物理執(zhí)行單元上(比如CPU或GPU),這種分配規(guī)則由TensorFlow中的分配算法決定。TensorFlow的運(yùn)行模式TensorFlow與Scikit-Learn的區(qū)別除了支撐的算法不一樣,還有一個(gè)重要的區(qū)別——TensorFlow天生支持分布式和異構(gòu)計(jì)算環(huán)境,從單機(jī)到集群,從CPU到GPU(見圖15-6)都支持良好。圖15-6 GPU集群TensorFlow支持最基本的單機(jī)模式,如圖15-7所示,本書編寫的樣例也都是基于我的MAC筆記本運(yùn)行的,順便提下,MAC下運(yùn)行TensorFlow算法,會(huì)有如下報(bào)錯(cuò)信息,不用理會(huì)它,程序還會(huì)繼續(xù)運(yùn)行。can'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_device.cc:25]Localdeviceintraopparallel圖15-7 TensorFlow單機(jī)運(yùn)行模式TensorFlow也支持分布式架構(gòu),如圖15-8所示,從MAC本到CPU服務(wù)器、GPU服務(wù)器、GPU集群甚至是神秘的TPU集群都支持。圖15-8 TensorFlow分布式運(yùn)行模式示例:在TensorFlow下識(shí)別驗(yàn)證碼(一)完整演示代碼請(qǐng)見本書GitHub上的15-1.py。數(shù)據(jù)清洗與特征提取我們依然使用MNIST數(shù)據(jù)集合,使用TensorFlow的softmax回歸算法,MNIST詳細(xì)介紹請(qǐng)參考第3章中的介紹。唯一不同的地方是我們使用one-hot編碼處理標(biāo)記數(shù)據(jù),原有的標(biāo)記數(shù)據(jù)使用長(zhǎng)度為1的向量標(biāo)記結(jié)果,取值范圍為0~9,one-hot編碼又稱一位有效編碼,其方法是使用N位狀態(tài)寄存器來(lái)對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都有其獨(dú)立的寄存器位,并且在任意時(shí)刻,其中只有一位有效。使用one-hot編碼后,使用一個(gè)長(zhǎng)度為10的向量標(biāo)記結(jié)果,轉(zhuǎn)換的函數(shù)實(shí)現(xiàn)為:defget_one_hot(x,size=10):v=[]forx1inx:x2=[0]*sizex2[(x1-1)]=1v.append(x2)returnv我們使用離線版的MNIST文件,下載鏈接為:\hhttp://www.iro.umontreal.ca/~lisa/deep/data/mnist/mnist.pkl.gz文件讀取方式為:importpickleimportgzipdefload_data():withgzip.open('./mnist.pkl.gz')asfp:training_data,valid_data,test_data=pickle.load(fp)returntraining_data,valid_data,test_data其中各個(gè)返回集合分別為:·training_data,訓(xùn)練數(shù)據(jù)集合;·valid_data,校驗(yàn)數(shù)據(jù)集合;·test_data,測(cè)試數(shù)據(jù)集合。加載數(shù)據(jù),并針對(duì)標(biāo)記數(shù)據(jù)轉(zhuǎn)換成one-hot編碼。training_data,valid_data,test_dat=load_data()x_training_data,y_training_data=training_datax1,y1=test_daty_training_data=get_one_hot(y_training_data)y1=get_one_hot(y1)訓(xùn)練我們使用經(jīng)典的softmax回歸算法來(lái)處理,如圖15-9所示。softmax算法的數(shù)學(xué)化的表現(xiàn)為:y=softmax(Wx+b)使用TensorFlow的計(jì)算模型展現(xiàn)處理過(guò)程,如圖15-10所示。圖15-9 TensorFlow官網(wǎng)對(duì)softmax算法的圖解圖15-10 TensorFlow計(jì)算模型示例圖使用placeholder函數(shù)設(shè)置占位符,用于定義整個(gè)數(shù)據(jù)流的輸入和輸出。在這個(gè)例子中x和_y都是這種情況,其中,x對(duì)應(yīng)整個(gè)系統(tǒng)輸入,是一個(gè)維度為784的向量集合,且長(zhǎng)度不限制;_y是整個(gè)系統(tǒng)的輸出,對(duì)應(yīng)一個(gè)維度為10的向量集合,兩者的特征數(shù)據(jù)類型都是浮點(diǎn)型:x=tf.placeholder("float",[None,784])y_=tf.placeholder("float",[None,10])定義整個(gè)系統(tǒng)中的變量,包括W、b,初始化均為0。整個(gè)系統(tǒng)的操作為y=softmax(Wx+b),x的維度為784,所以W為一個(gè)784乘以10的數(shù)組,b是一個(gè)維度為10的向量:W=tf.Variable(tf.zeros([784,10]))b=tf.Variable(tf.zeros([10]))定義整個(gè)系統(tǒng)的操作函數(shù):y=tf.nn.softmax(tf.matmul(x,W)+b)定義衰減函數(shù),這里的衰減函數(shù)使用交叉熵來(lái)衡量,通過(guò)梯度下降算法以0.01的學(xué)習(xí)速率最小化交叉熵:cross_entropy=-tf.reduce_sum(y_*tf.log(y))train_step=tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)初始化全部變量并定義會(huì)話,在TensorFlow的,相互不干擾。init=tf.initialize_all_variables()sess=tf.Session()sess.run(init)在理想情況下,我們希望用所有的數(shù)據(jù)來(lái)進(jìn)行每一步的訓(xùn)練,因?yàn)檫@能給我們更好的訓(xùn)練結(jié)果,但顯然這需要很大的計(jì)算開銷。所以,每一次訓(xùn)練我們可以使用不同的數(shù)據(jù)子集,這樣做既可以減少計(jì)算開銷,又可以最大化地學(xué)習(xí)到數(shù)據(jù)集的總體特性。我們定義每次訓(xùn)練的數(shù)據(jù)子集的個(gè)數(shù):batch_size=100每次我們都順序取出100個(gè)數(shù)據(jù)用于訓(xùn)練,便于梯度下降算法快速收斂,整個(gè)訓(xùn)練次數(shù)取決于整個(gè)數(shù)據(jù)集合的長(zhǎng)度以及每次訓(xùn)練的數(shù)據(jù)個(gè)數(shù):foriinrange(int(len(x_training_data)/batch_size)):batch_xs=x_training_data[(i*batch_size):((i+1)*batch_size)]batch_ys=y_training_data[(i*batch_size):((i+1)*batch_size)]sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys})驗(yàn)證TensorFlow的數(shù)據(jù)驗(yàn)證非常簡(jiǎn)單,使用自帶的API即可:correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))print(sess.run(accuracy,feed_dict={x:x1,y_:y1}))運(yùn)行結(jié)果如下,準(zhǔn)確率約為90%:can'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_device.cc:25]Localdeviceintraopparallelcan'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_session.cc:45]Localsessioninteropparall0.9097示例:在TensorFlow下識(shí)別驗(yàn)證碼(二)完整演示代碼請(qǐng)見本書GitHub上的15-2.py。數(shù)據(jù)清洗與特征提取我們依然使用MNIST數(shù)據(jù)集合和TensorFlow的多層感知機(jī),同樣利用one-hot編碼處理標(biāo)記數(shù)據(jù)。訓(xùn)練我們使用多層感知機(jī)來(lái)處理。使用TensorFlow的計(jì)算模型展現(xiàn)處理過(guò)程,如圖15-11所示。圖15-11 TensorFlow計(jì)算模型示例圖使用placeholder函數(shù)設(shè)置占位符,用于定義整個(gè)數(shù)據(jù)流的輸入和輸出。在這個(gè)例子中x和_y都是這種情況,其中,x對(duì)應(yīng)整個(gè)系統(tǒng)輸入,是一個(gè)維度為784的向量集合,且長(zhǎng)度不限制;_y是整個(gè)系統(tǒng)的輸出,對(duì)應(yīng)一個(gè)維度為10的向量集合,兩者的特征數(shù)據(jù)類型都是浮點(diǎn)型;另外,需要定義drop_out的比例keep_prob,同樣也是浮點(diǎn)型。x=tf.placeholder("float",[None,784])y_=tf.placeholder("float",[None,10])keep_prob=tf.placeholder(tf.float32)定義整個(gè)系統(tǒng)中的變量W1、b1、W2、b2,其中隱藏層具有300個(gè)節(jié)點(diǎn)。in_units=784h1_units=300W1=tf.Variable(tf.truncated_normal([in_units,h1_units],stddev=0.1))b1=tf.Variable(tf.zeros([h1_units]))W2=tf.Variable(tf.zeros([h1_units,10]))b2=tf.Variable(tf.zeros([10]))定義整個(gè)系統(tǒng)的操作函數(shù),其中隱藏層有一層,使用relu函數(shù)生成:hidden1=tf.nn.relu(tf.matmul(x,W1)+b1)hidden1_drop=tf.nn.dropout(hidden1,keep_prob)y=tf.nn.softmax(tf.matmul(hidden1_drop,W2)+b2)定義衰減函數(shù),這里的衰減函數(shù)使用交叉熵來(lái)衡量,通過(guò)Adagrad自適應(yīng)調(diào)節(jié),學(xué)習(xí)速率為0.3:cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))train_step=tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)初始化全部變量并定義會(huì)話,在TensorFlow中每個(gè)會(huì)話都是獨(dú)立的,互不干擾:init=tf.initialize_all_variables()sess=tf.Session()sess.run(init)我們定義每次訓(xùn)練的數(shù)據(jù)子集的個(gè)數(shù):batch_size=100每次我們都順序取出100個(gè)數(shù)據(jù)用于訓(xùn)練,便于梯度下降算法快速收斂,整個(gè)訓(xùn)練的次數(shù)取決于整個(gè)數(shù)據(jù)集合的長(zhǎng)度以及每次訓(xùn)練的數(shù)據(jù)個(gè)數(shù),其中keep_prob比例為75%:foriinrange(int(len(x_training_data)/batch_size)):batch_xs=x_training_data[(i*batch_size):((i+1)*batch_size)]batch_ys=y_training_data[(i*batch_size):((i+1)*batch_size)]sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys,keep_prob:0.75})驗(yàn)證TensorFlow的數(shù)據(jù)驗(yàn)證非常簡(jiǎn)單,使用自帶的API即可:correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))print(sess.run(accuracy,feed_dict={x:x1,y_:y1,keep_prob:1.0}))運(yùn)行結(jié)果如下,準(zhǔn)確率約為96%,準(zhǔn)確率提升不少,這就是神經(jīng)網(wǎng)絡(luò)的魅力。can'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_device.cc:25]Localdeviceintraopparallelcan'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_session.cc:45]Localsessioninteropparall0.9601示例:在TensorFlow下識(shí)別驗(yàn)證碼(三)完整演示代碼請(qǐng)見本書GitHub上的15-3.py1.數(shù)據(jù)清洗與特征提取我們依然使用MNIST數(shù)據(jù)集合和TensorFlow的DNN(如圖15-12所示),同樣使用one-hot編碼處理標(biāo)記數(shù)據(jù)。圖15-12 3層DNN示意圖訓(xùn)練我們使用DNN模型進(jìn)行計(jì)算,使用placeholder函數(shù)設(shè)置占位符,用于定義整個(gè)數(shù)據(jù)流的輸入和輸出。在這個(gè)例子中x和_y都是這種情況,其中,x對(duì)應(yīng)整個(gè)系統(tǒng)輸入,是一個(gè)維度為784的向量集合,且長(zhǎng)度不限制;_y是整個(gè)系統(tǒng)的輸出,對(duì)應(yīng)一個(gè)維度為10的向量集合,兩者的特征數(shù)據(jù)類型都是浮點(diǎn)型;另外,需要定義drop_out的比例keep_prob,同樣也是浮點(diǎn)型:x=tf.placeholder("float",[None,784])y_=tf.placeholder("float",[None,10])keep_prob=tf.placeholder(tf.float32)定義整個(gè)系統(tǒng)中的變量,其中有3個(gè)隱藏層:W1=tf.Variable(tf.truncated_normal([in_units,h1_units],stddev=0.1))b1=tf.Variable(tf.zeros([h1_units]))W2=tf.Variable(tf.zeros([h1_units,h2_units]))b2=tf.Variable(tf.zeros([h2_units]))W3=tf.Variable(tf.zeros([h2_units,h3_units]))b3=tf.Variable(tf.zeros([h3_units]))W4=tf.Variable(tf.zeros([h3_units,out_units]))b4=tf.Variable(tf.zeros([out_units]))定義整個(gè)系統(tǒng)的操作函數(shù),其中隱藏層有3層,使用relu函數(shù)生成:hidden1=tf.nn.relu(tf.matmul(x,W1)+b1)hidden2=tf.nn.relu(tf.matmul(hidden1,W2)+b2)hidden3=tf.nn.relu(tf.matmul(hidden2,W3)+b3)hidden_drop=tf.nn.dropout(hidden3,keep_prob)y=tf.nn.softmax(tf.matmul(hidden_drop,W4)+b4)定義衰減函數(shù),這里的衰減函數(shù)使用交叉熵來(lái)衡量,通過(guò)Adagrad自適應(yīng)調(diào)節(jié),學(xué)習(xí)速率為0.3:cross_entropy=tf.reduce_mean(-tf.reduce_sum(y_*tf.log(y),reduction_indices=[1]))train_step=tf.train.AdagradOptimizer(0.3).minimize(cross_entropy)初始化全部變量并定義會(huì)話,在TensorFlow中每個(gè)會(huì)話都是獨(dú)立的,互不干擾:init=tf.initialize_all_variables()sess=tf.Session()sess.run(init)我們定義每次訓(xùn)練的數(shù)據(jù)子集的個(gè)數(shù):batch_size=100每次我們都順序取出100個(gè)數(shù)據(jù)用于訓(xùn)練,便于梯度下降算法快速收斂,整個(gè)訓(xùn)練的次數(shù)取決于整個(gè)數(shù)據(jù)集合的長(zhǎng)度以及每次訓(xùn)練的數(shù)據(jù)個(gè)數(shù),其中keep_prob比例為75%:foriinrange(int(len(x_training_data)/batch_size)):batch_xs=x_training_data[(i*batch_size):((i+1)*batch_size)]batch_ys=y_training_data[(i*batch_size):((i+1)*batch_size)]sess.run(train_step,feed_dict={x:batch_xs,y_:batch_ys,keep_prob:0.75})驗(yàn)證TensorFlow的數(shù)據(jù)驗(yàn)證非常簡(jiǎn)單,使用自帶的API即可:correct_prediction=tf.equal(tf.argmax(y,1),tf.argmax(y_,1))accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))print(sess.run(accuracy,feed_dict={x:x1,y_:y1,keep_prob:1.0}))運(yùn)行結(jié)果如下,準(zhǔn)確率約為93%,可見并非深度學(xué)習(xí)就一定效果好,當(dāng)數(shù)據(jù)量不大時(shí),SVM的效果很有可能優(yōu)于深度學(xué)習(xí)。can'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_device.cc:25]Localdeviceintraopparallelcan'tdeterminenumberofCPUcores:assuming4Itensorflow/core/common_runtime/local_session.cc:45]Localsessioninteropparall0.9361示例:在TensorFlow下識(shí)別垃圾郵件(一)完整演示代碼請(qǐng)見本書GitHub上的15-4.py。數(shù)據(jù)清洗與特征提取垃圾郵件是信息時(shí)代的副產(chǎn)品,具有以下危害:·占用網(wǎng)絡(luò)帶寬,造成郵件服務(wù)器擁塞,進(jìn)而降低整個(gè)網(wǎng)絡(luò)的運(yùn)行效率?!で址甘占说碾[私權(quán),侵占收件人信箱空間,耗費(fèi)收件人的時(shí)間、精力和金錢。有的垃圾郵件還盜用他人的電子郵件地址作為發(fā)信地址,嚴(yán)重?fù)p害了他人的信譽(yù)?!け缓诳屠贸蔀橹q為虐的工具。2000年2月,黑客攻擊雅虎等五大熱門網(wǎng)站就是一個(gè)例子。黑客先是侵入并控制了一些高帶寬的網(wǎng)站,集中眾多服務(wù)器的帶寬能力,然后用數(shù)以億萬(wàn)計(jì)的垃圾郵件猛烈襲擊目標(biāo),造成被攻擊網(wǎng)站網(wǎng)路堵塞,最終癱瘓。·嚴(yán)重影響ISP的服務(wù)形象。在國(guó)際上,頻繁轉(zhuǎn)發(fā)垃圾郵件的主機(jī)會(huì)被上級(jí)國(guó)際因特網(wǎng)服務(wù)提供商列入國(guó)際垃圾郵件數(shù)據(jù)庫(kù),從而導(dǎo)致該主機(jī)不能訪問(wèn)國(guó)外許多網(wǎng)站。而且收到垃圾郵件的用戶會(huì)因?yàn)镮SP沒有建立完善的垃圾郵件過(guò)濾機(jī)制,而轉(zhuǎn)向其他ISP。一項(xiàng)調(diào)查表明:ISP每爭(zhēng)取一個(gè)用戶要花費(fèi)75美元,但是每年因垃圾郵件要失去7.2%的用戶?!ぱ曰蟊姟Ⅱ_人錢財(cái)、傳播色情等內(nèi)容的垃圾郵件,已經(jīng)對(duì)現(xiàn)實(shí)社會(huì)造成了危害。我們使用SpamBase這個(gè)入門級(jí)的垃圾郵件分類訓(xùn)練集來(lái)測(cè)試。SpamBase的數(shù)據(jù)不是原始的郵件內(nèi)容而是已經(jīng)特征化的數(shù)據(jù),對(duì)應(yīng)的特征是統(tǒng)計(jì)的關(guān)鍵字以及特殊符號(hào)的詞頻,一共58個(gè)屬性,其中最后一個(gè)是垃圾郵件的標(biāo)記位,如圖15-13所示。特征數(shù)據(jù)結(jié)構(gòu)舉例如下:word_freq_make:continuous.word_freq_address:continuous.word_freq_all:continuous.word_freq_3d: continuous.word_freq_our:continuous.word_freq_over:continuous.word_freq_remove:continuous.word_freq_internet:continuous.word_freq_order:continuous.word_freq_mail:continuous.word_freq_receive:continuous.word_freq_will:continuous.word_freq_people:continuous.word_freq_report:continuous.word_freq_addresses:continuous.圖15-13 SpamBase數(shù)據(jù)集特征抽取過(guò)程數(shù)據(jù)來(lái)源為4601封郵件,其中1813封為垃圾郵件,數(shù)據(jù)內(nèi)容舉例如下:0,0.64,0.64,0,0.32,0,0,0,0,0,0,0.64,0,0,0,0.32,0,1.29,1.93,0,0.96,0,0,0,0,0,0,0,0,00.43,0.43,0,0,0,0,0,0,0,0,0,0,0,0,0.07,0,0,0,0,0,0,0,0,0,0,0,0,0.132,0,0.372,0.18,0加載SpamBase數(shù)據(jù)集,使用逗號(hào)切分,并且轉(zhuǎn)換成數(shù)值型:x=[]y=[]withopen(filename)asf:forlineinf:line=line.strip('\n')v=line.split(',')y.append(int(v[-1]))t=[]foriinrange(57):t.append(float(v[i]))t=np.array(t)x.append(t)x=np.array(x)y=np.array(y)隨機(jī)劃分?jǐn)?shù)據(jù)集為訓(xùn)練集和測(cè)試集,其中測(cè)試集占40%:x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.4,random_statereturnx_train,x_test,y_train,y_test訓(xùn)練訓(xùn)練與驗(yàn)證過(guò)程如圖15-14所示
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年高品質(zhì)食品副食批發(fā)銷售協(xié)議
- 2024年?duì)I業(yè)員勞動(dòng)合同模板:突發(fā)事件應(yīng)急處理3篇
- 2024某醫(yī)療機(jī)構(gòu)與患者之間的醫(yī)療服務(wù)合同
- 2024年裝修工程包清工責(zé)任協(xié)議版B版
- 2024政府采購(gòu)補(bǔ)充合同-城市規(guī)劃設(shè)計(jì)與實(shí)施補(bǔ)充協(xié)議3篇
- 2024年美容院所有權(quán)變更合同版B版
- 2024年高端裝備研發(fā)與許可合同
- 2024旅游景點(diǎn)與旅行社之間的旅游項(xiàng)目合作開發(fā)合同
- 2024某景區(qū)與旅游公司關(guān)于景區(qū)開發(fā)的合同
- 2024年虛擬現(xiàn)實(shí)旅游體驗(yàn)服務(wù)合同
- 2023年泰安市泰山城建集團(tuán)有限公司招聘筆試題庫(kù)及答案解析
- 分布式光伏發(fā)電項(xiàng)目建議書
- 高中化學(xué)必修1思維導(dǎo)圖(Word版zj)
- 2022年體育老師個(gè)人年終工作總結(jié)
- GB 18613-2020 電動(dòng)機(jī)能效限定值及能效等級(jí)
- 指導(dǎo)小學(xué)生課外閱讀案例
- 全國(guó)婦聯(lián)統(tǒng)計(jì)軟件
- 【高中化學(xué)校本課程】《生活中的化學(xué)》校本教材
- 水資源管理培訓(xùn)材料課件
- 促銷活動(dòng)方案(共29頁(yè)).ppt
- 農(nóng)民專業(yè)合作社財(cái)務(wù)報(bào)表(三張表)
評(píng)論
0/150
提交評(píng)論