機(jī)器學(xué)習(xí)基礎(chǔ)及應(yīng)用項(xiàng)目7_第1頁
機(jī)器學(xué)習(xí)基礎(chǔ)及應(yīng)用項(xiàng)目7_第2頁
機(jī)器學(xué)習(xí)基礎(chǔ)及應(yīng)用項(xiàng)目7_第3頁
機(jī)器學(xué)習(xí)基礎(chǔ)及應(yīng)用項(xiàng)目7_第4頁
機(jī)器學(xué)習(xí)基礎(chǔ)及應(yīng)用項(xiàng)目7_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

使用支持向量機(jī)實(shí)現(xiàn)圖像識別項(xiàng)目7項(xiàng)目目標(biāo)知識目標(biāo)掌握線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理。掌握線性不可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理。了解支持向量機(jī)的回歸原理。掌握支持向量機(jī)的Sklearn實(shí)現(xiàn)方法。掌握支持向量機(jī)的參數(shù)調(diào)節(jié)方法。技能目標(biāo)能夠使用支持向量機(jī)訓(xùn)練模型。能夠編寫程序,尋找支持向量機(jī)參數(shù)的最優(yōu)值。素養(yǎng)目標(biāo)了解科技前沿新技術(shù),提升通過科學(xué)方法解決實(shí)際問題的能力。掌握人臉識別技術(shù),培養(yǎng)探索精神。

人臉識別是基于人的臉部特征進(jìn)行身份識別的一種生物識別技術(shù),其應(yīng)用范圍非常廣泛。項(xiàng)目導(dǎo)入人臉識別的應(yīng)用范圍項(xiàng)目導(dǎo)入

人機(jī)交互

智能視頻監(jiān)控

人證比對罪犯識別項(xiàng)目導(dǎo)入人臉識別的功能是給定一張人臉圖片,能夠識別該圖片屬于人臉圖片庫中的哪個人,這是一個多分類問題。小旌了解到使用支持向量機(jī)即可實(shí)現(xiàn)這一功能,于是,他決定使用Sklearn自帶的名人人臉照片數(shù)據(jù)集訓(xùn)練一個人臉識別模型,并使用這個模型進(jìn)行預(yù)測。項(xiàng)目導(dǎo)入由于該數(shù)據(jù)集的類別太多,本次訓(xùn)練模型時,小旌只選取最少有60張照片的名人作為數(shù)據(jù)集訓(xùn)練模型,然后對模型進(jìn)行評估,并使用Matplotlib畫圖,顯示分類結(jié)果。項(xiàng)目導(dǎo)入名人人臉照片數(shù)據(jù)集中共存放了5749位名人的人臉照片(每個人有1張或多張照片),共13233張,這些照片分別存放在每個人名對應(yīng)的目錄中。每張照片的大小為62×47像素,將每個像素看成一個特征值,則該數(shù)據(jù)集中共有2914個特征屬性,13233條數(shù)據(jù),5749個類別。項(xiàng)目分析按照項(xiàng)目要求,使用支持向量機(jī)進(jìn)行人臉識別的步驟分解如下。第1步:數(shù)據(jù)準(zhǔn)備。導(dǎo)入Sklearn自帶的名人人臉照片數(shù)據(jù)集,選取最少有60張照片的名人作為訓(xùn)練集,然后輸出這些名人的姓名和照片的尺寸。第2步:數(shù)據(jù)降維處理。由于數(shù)據(jù)集的特征屬性太多,故在訓(xùn)練模型前需要進(jìn)行降維處理。使用主成分分析算法將數(shù)據(jù)集的維度降維到150個,然后以3行5列的形式顯示降維后的部分照片。第3步:訓(xùn)練與評估模型。將降維處理后的數(shù)據(jù)集拆分為訓(xùn)練集與測試集,然后使用網(wǎng)格搜索法尋找支持向量機(jī)中高斯徑向基核函數(shù)參數(shù)gamma與模型松弛系數(shù)懲罰項(xiàng)C的最優(yōu)值,獲取最優(yōu)模型并輸出最優(yōu)模型的評估報告。第4步:顯示分類結(jié)果。首先,創(chuàng)建一個4行6列的畫布;然后,在畫布中繪制圖像;最后,顯示模型的預(yù)測姓名,預(yù)測正確顯示為黑色文字,預(yù)測錯誤顯示為黑色加邊框文字。使用支持向量機(jī)訓(xùn)練人臉識別模型,需要先理解支持向量機(jī)的基本原理。本項(xiàng)目將對相關(guān)知識進(jìn)行介紹,包括線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理,線性不可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理,支持向量機(jī)的回歸原理,支持向量機(jī)的Sklearn實(shí)現(xiàn)方法,以及支持向量機(jī)參數(shù)的調(diào)節(jié)方法。項(xiàng)目準(zhǔn)備全班學(xué)生以3~5人為一組進(jìn)行分組,各組選出組長,組長組織組員掃碼觀看“支持向量機(jī)的分類原理”視頻,討論并回答下列問題。問題1:簡述線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理。問題2:簡述支持向量機(jī)對線性不可分?jǐn)?shù)據(jù)進(jìn)行分類的原理。問題3:寫出支持向量機(jī)常用的核函數(shù)。點(diǎn)擊此處播放微課支持向量機(jī)的分類原理支持向量機(jī)的基本原理支持向量機(jī)的Sklearn實(shí)現(xiàn)/項(xiàng)目導(dǎo)航/7.17.27.1支持向量機(jī)的基本原理7.1支持向量機(jī)的基本原理12支持向量機(jī)(supportvectormachine,SVM)是一種應(yīng)用非常廣泛的機(jī)器學(xué)習(xí)模型,能夠解決線性和非線性的分類與回歸問題。從實(shí)際應(yīng)用來看,支持向量機(jī)在各種實(shí)際問題中的表現(xiàn)都非常優(yōu)秀,其在人臉識別、文本和超文本分類、圖像分割等領(lǐng)域都有著非常重要的地位。支持向量機(jī)非常適合解決復(fù)雜但數(shù)據(jù)集規(guī)模較小的分類問題。7.1.1支持向量機(jī)的分類原理13對于線性可分的數(shù)據(jù),支持向量機(jī)對其進(jìn)行分類的原理是,給定一個訓(xùn)練數(shù)據(jù)集,基于這個數(shù)據(jù)集在樣本空間中找到一個分類超平面,將不同類別的樣本分開。在二維空間中,超平面表現(xiàn)為線的形式。1.線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理14例如,圖a中有兩類不同的樣本數(shù)據(jù)D1和D2,D1用小正方形表示,D2用實(shí)心圓表示,支持向量機(jī)的分類方法就是在這組樣本中找到一個分類超平面(圖a中的直線)作為決策邊界,決策邊界一側(cè)的所有樣本在分類中屬于一個類別,另一側(cè)的所有樣本在分類中屬于另一個類別。圖a數(shù)據(jù)樣本點(diǎn)與分類超平面1.線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理15可見,支持向量機(jī)最重要的任務(wù)是從樣本空間中找到一個合適的分類超平面。在圖a的數(shù)據(jù)分布中,很容易就能在小正方形和實(shí)心圓之間畫出多個分類超平面,如圖b所示。接下來通過計(jì)算尋找最合適的分類超平面。圖b

數(shù)據(jù)樣本點(diǎn)與多個分類超平面1.線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理16在分類任務(wù)中,樣本數(shù)據(jù)點(diǎn)與決策邊界(分類超平面)的距離越遠(yuǎn),說明模型越好。然而在實(shí)際應(yīng)用中,往往不需要計(jì)算所有樣本數(shù)據(jù)點(diǎn)與決策邊界的距離,而是計(jì)算離決策邊界最近的樣本數(shù)據(jù)點(diǎn)與決策邊界的距離,如果這些樣本數(shù)據(jù)點(diǎn)能分類正確,那么,其他樣本數(shù)據(jù)點(diǎn)也能分類正確。在支持向量機(jī)中,通常把離分類超平面距離最近的樣本數(shù)據(jù)點(diǎn)稱為支持向量,而兩個異類支持向量到分類超平面的距離之和稱為分類超平面的間隔,通常記作d,如圖所示。支持向量與間隔顯然,離分類超平面距離最近的點(diǎn)到分類超平面的距離(間隔)d最大時對應(yīng)的分類超平面就是最優(yōu)分類超平面。因此,尋找最優(yōu)分類超平面的過程就轉(zhuǎn)化成了求間隔d的最大值的過程。只要計(jì)算出d的最大值,就能找到對應(yīng)的分類超平面,這個分類超平面就是最優(yōu)的分類超平面。1.線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理17這個公式就是支持向量機(jī)分類模型的損失函數(shù),求解該損失函數(shù)的最小值,一般需要先用拉格朗日函數(shù)將其轉(zhuǎn)化為對偶問題,然后再使用序列最小優(yōu)化(sequentialminimaloptimization,SMO)算法求解該對偶優(yōu)化問題。在樣本空間中,通常使用方程來描述超平面。其中,為超平面的參數(shù)向量,決定了超平面的方向;為特征向量;b為位移項(xiàng),決定了超平面與原點(diǎn)之間的距離。那么,間隔d的計(jì)算公式可表示為其中,為向量w的模長,模長表示向量在空間中的長度。求d的最大值,就是求的最小值,為方便計(jì)算,通常把求解的最小值轉(zhuǎn)化為求解以下公式的最小值。1.線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理18支持向量機(jī)分類模型的損失函數(shù)之所以要加上平方,是因?yàn)槟iL是一個帶根號的式子,取平方是為了消除根號,方便求導(dǎo)。暢所欲言請同學(xué)們查閱相關(guān)資料,討論什么是拉格朗日函數(shù),什么是SMO算法。高手點(diǎn)撥7.1.1支持向量機(jī)的分類原理19對于給定的線性可分訓(xùn)練樣本數(shù)據(jù)集,上述SVM模型要求對任何訓(xùn)練樣本都不能做出錯誤分類,這種構(gòu)造SVM模型的方法稱為硬間隔??梢?,硬間隔對訓(xùn)練樣本數(shù)據(jù)集的線性可分性要求非常嚴(yán)苛。而實(shí)際上,多數(shù)樣本數(shù)據(jù)集中都會存在噪聲數(shù)據(jù),通常只能大致將兩類樣本用分類超平面分割,此時將無法完成SVM模型的構(gòu)造。為解決上述問題,人們提出了一種軟間隔構(gòu)造SVM模型的方法。訓(xùn)練軟間隔SVM模型時并不要求所有訓(xùn)練樣本都能被正確分類,而是允許少量訓(xùn)練樣本被錯誤分類。軟間隔的實(shí)現(xiàn)方法是在模型優(yōu)化過程中引入一個取值較小的非負(fù)松弛變量來放寬約束條件。松弛變量的取值越大,SVM模型對錯誤分類的容忍度越高。2.硬間隔與軟間隔7.1.1支持向量機(jī)的分類原理20線性可分樣本數(shù)據(jù)集,可使用上述線性支持向量機(jī)訓(xùn)練模型。然而,對于線性不可分的樣本數(shù)據(jù)集(見圖c),就不能直接用線性支持向量機(jī)訓(xùn)練模型了,而需要使用核函數(shù)將樣本數(shù)據(jù)點(diǎn)變換到適當(dāng)?shù)母呔S空間,使得樣本數(shù)據(jù)點(diǎn)在高維空間中滿足線性可分,并由此構(gòu)造所需的SVM模型,如圖d所示。圖c

線性不可分樣本數(shù)據(jù)集圖d

高維空間樣本數(shù)據(jù)集3.線性不可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理7.1.1支持向量機(jī)的分類原理21表7-1支持向量機(jī)中常用的核函數(shù)核函數(shù)含義適用場合參數(shù)linear()線性核函數(shù)線性該核函數(shù)無參數(shù)poly()多項(xiàng)式核函數(shù)偏線性該核函數(shù)有3個參數(shù),分別是gamma、degree和coef0rbf()高斯徑向基核函數(shù)偏非線性該核函數(shù)的參數(shù)為gamma,這個參數(shù)的設(shè)置非常關(guān)鍵,如果設(shè)置過大,則整個高斯核會向線性核方向退化,向更高維度非線性投影的能力就會減弱;但如果設(shè)置過小,則會使得樣本中噪聲的影響加大,從而干擾最終SVM的有效性sigmoid()雙曲正切核函數(shù)非線性該核函數(shù)有兩個參數(shù),分別是gamma和coef03.線性不可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理核函數(shù)的思想可用現(xiàn)實(shí)生活中的實(shí)例進(jìn)行類比。例如,桌上隨意散放著一些綠豆和瓜子,這些綠豆和瓜子由于是雜亂擺放的,因此無法用一條直線將其分開;這時,可用力拍一下桌子,使得綠豆和瓜子都彈起來;由于綠豆彈得高一些,瓜子彈得低一些,它們彈起來的瞬間,可在空中加一個平面把它們分隔開。核函數(shù)的思想與這個實(shí)例相似,使用核函數(shù)可將線性不可分的數(shù)據(jù)集變換到高維空間,然后再通過支持向量機(jī)進(jìn)行分類,將非線性問題轉(zhuǎn)化為線性問題。支持向量機(jī)常用的核函數(shù)如表7-1所示。其中,多項(xiàng)式核函數(shù)和高斯徑向基核函數(shù)(簡稱高斯核)是最常用的兩種核函數(shù)。7.1.2支持向量機(jī)的回歸原理22支持向量機(jī)除了能夠用于分類任務(wù),還可以用于回歸任務(wù)。回歸任務(wù)研究的是一組變量與另一組變量之間的關(guān)系,其預(yù)測結(jié)果是連續(xù)的數(shù)值。支持向量機(jī)用于回歸任務(wù)的原理是,給定一個訓(xùn)練數(shù)據(jù)集,基于這個數(shù)據(jù)集在樣本空間中找到一個形如的回歸模型,來擬合樣本數(shù)據(jù)點(diǎn),使得模型的預(yù)測值與樣本真實(shí)值y盡可能接近,其中與b是待確定的模型參數(shù)。7.1.2支持向量機(jī)的回歸原理23支持向量機(jī)回歸模型于一般的回歸算法,學(xué)習(xí)得到的模型的輸出值與樣本真實(shí)值y完全相同時,損失才為零;而支持向量機(jī)回歸模型允許與y之間存在偏差ε,當(dāng)且僅當(dāng)時,才計(jì)算損失,相當(dāng)于以為中心,構(gòu)建一個寬度為2ε的間隔帶(可將“寬度為2ε的間隔帶”理解為關(guān)于超平面的管道),若訓(xùn)練樣本落入此間隔帶,則認(rèn)為預(yù)測正確,如圖所示。7.1.2支持向量機(jī)的回歸原理24對在回歸任務(wù)中,模型預(yù)測值與真實(shí)值越接近,說明模型越好,而支持向量機(jī)解決回歸問題時,允許存在偏差,只需要計(jì)算的樣本點(diǎn)的損失。因此,支持向量機(jī)回歸模型的損失函數(shù)須在分類模型的損失函數(shù)中加入該條件,于是有其中,C為正則化常數(shù),為ε不敏感損失函數(shù),的取值為顯然,損失函數(shù)最小時對應(yīng)的和b值即為最優(yōu)參數(shù)值,對應(yīng)的超平面即為最優(yōu)超平面。求解該函數(shù)的最小值,與求解支持向量機(jī)分類模型損失函數(shù)最小值的方法類似,一般需要先用拉格朗日函數(shù)將其轉(zhuǎn)化為對偶問題,然后再用SMO算法求解該對偶優(yōu)化問題。7.1.2支持向量機(jī)的回歸原理25支持向量機(jī)回歸模型也可使用核函數(shù)將非線性數(shù)據(jù)變換到適當(dāng)?shù)母呔S空間,然后在高維空間中構(gòu)造最優(yōu)超平面。高手點(diǎn)撥7.1.2支持向量機(jī)的回歸原理262022年9月1日~9月3日,世界人工智能大會在我國上海舉辦。會上,達(dá)闥機(jī)器人展現(xiàn)了獨(dú)特的魅力。兩名達(dá)闥機(jī)器人身穿戲服,演出了京劇《大鬧天宮》選段,而在另一邊,機(jī)器人搖身一變又成了“家庭保姆”,它手持吸塵器,干活細(xì)心麻利。這是由于新一代的智能柔性關(guān)節(jié)和云端融合智能等技術(shù)使機(jī)器人得以“身兼數(shù)職”。不僅如此,達(dá)闥機(jī)器人還可以依靠云端大腦的能力,進(jìn)行多模態(tài)交互和自主學(xué)習(xí),只要提前在應(yīng)用場景里做充足的訓(xùn)練,就能實(shí)現(xiàn)快速“轉(zhuǎn)崗”,廣泛服務(wù)于導(dǎo)覽講解、養(yǎng)老陪護(hù)、教育科研等場景。目前,多任務(wù)處理已成為機(jī)器人未來的研發(fā)方向。預(yù)計(jì)到2025年,達(dá)闥人形雙足機(jī)器人“七仙女”將飛入尋常百姓家。素養(yǎng)之窗(1)簡述線性可分?jǐn)?shù)據(jù)的支持向量機(jī)分類原理。(2)簡述支持向量機(jī)對線性不可分?jǐn)?shù)據(jù)進(jìn)行分類的原理。課堂訓(xùn)練支持向量機(jī)的基本原理支持向量機(jī)的分類原理支持向量機(jī)的回歸原理課堂小結(jié)7.2支持向量機(jī)的Sklearn實(shí)現(xiàn)7.2.1Sklearn中的支持向量機(jī)模塊30Sklearn的svm模塊提供了SVC類和SVR類,分別用于實(shí)現(xiàn)支持向量機(jī)分類和支持向量機(jī)回歸。在Sklearn中,可通過下面語句導(dǎo)入支持向量機(jī)模塊。fromsklearn.svmimportSVC#導(dǎo)入支持向量機(jī)分類模塊fromsklearn.svmimportSVR#導(dǎo)入支持向量機(jī)回歸模塊7.2.1Sklearn中的支持向量機(jī)模塊31SVC類和SVR類都有如下幾個參數(shù)。(1)參數(shù)kernel用于指定核函數(shù)的類型,默認(rèn)值為rbf(高斯徑向基核函數(shù)),其他值有l(wèi)inear、poly、sigmoid和precomputed(用戶預(yù)先計(jì)算好的核矩陣,輸入后算法內(nèi)部將使用用戶提供的矩陣進(jìn)行計(jì)算)。(2)參數(shù)degree表示多項(xiàng)式核函數(shù)的維度,默認(rèn)值為3,選擇其他核函數(shù)時該參數(shù)會被忽略。(3)參數(shù)gamma為核函數(shù)rgb()、poly()和sigmoid()的參數(shù),其取值決定了數(shù)據(jù)映射到新的特征空間后的分布。默認(rèn)值為auto,表示其值是樣本特征數(shù)的倒數(shù)。(4)參數(shù)C表示松弛系數(shù)的懲罰項(xiàng)系數(shù),默認(rèn)值為1.0。如果C值設(shè)置得比較大,則模型預(yù)測準(zhǔn)確率較高,泛化能力較弱;如果C值設(shè)置得比較小,則模型預(yù)測準(zhǔn)確率會降低,但是泛化能力會增強(qiáng)。(5)參數(shù)coef0只針對poly()和sigmoid()核函數(shù),表示核函數(shù)的常數(shù)項(xiàng)。7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)32【例7-1】使用支持向量機(jī)的4種核函數(shù)(線性核函數(shù)、多項(xiàng)式核函數(shù)、高斯徑向基核函數(shù)和雙曲正切核函數(shù))分別對Sklearn自帶的肺癌數(shù)據(jù)集進(jìn)行分類,并比較4種核函數(shù)的預(yù)測準(zhǔn)確率。【程序分析】

使用支持向量機(jī)對Sklearn自帶的肺癌數(shù)據(jù)集進(jìn)行分類的步驟如下。1.使用核函數(shù)訓(xùn)練模型7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)33程序運(yùn)行結(jié)果如圖所示??梢姡瑪?shù)據(jù)集中有569條數(shù)據(jù),每條數(shù)據(jù)包含30個特征變量。肺癌數(shù)據(jù)集(1)導(dǎo)入Sklearn自帶的肺癌數(shù)據(jù)集,并查看數(shù)據(jù)集中的數(shù)據(jù)。【運(yùn)行結(jié)果】1.使用核函數(shù)訓(xùn)練模型【參考代碼】fromsklearn.datasetsimportload_breast_cancer #導(dǎo)入肺癌數(shù)據(jù)集fromsklearn.svmimportSVC #導(dǎo)入支持向量機(jī)分類模塊fromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpimportpandasaspdx,y=load_breast_cancer().data,load_breast_cancer().targetprint(x.shape)print(x)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)34程序運(yùn)行結(jié)果如圖所示。可見,數(shù)據(jù)標(biāo)準(zhǔn)化處理后,消除了數(shù)據(jù)的數(shù)量級差距。數(shù)據(jù)標(biāo)準(zhǔn)化處理后的肺癌數(shù)據(jù)集(2)從圖肺癌數(shù)據(jù)集中可以看出,數(shù)據(jù)之間存在數(shù)據(jù)量綱(如第1行第3列數(shù)據(jù)與第1行最后一列數(shù)據(jù)差距較大,數(shù)據(jù)的數(shù)量級差距在100倍以上)問題。因此,在訓(xùn)練模型之前,需要對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理?!具\(yùn)行結(jié)果】1.使用核函數(shù)訓(xùn)練模型【參考代碼】#數(shù)據(jù)標(biāo)準(zhǔn)化處理fromsklearn.preprocessingimportStandardScalerx=StandardScaler().fit_transform(x)print(x)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)35程序運(yùn)行結(jié)果如圖所示。可見,使用線性核函數(shù)時,模型的預(yù)測準(zhǔn)確率最高,故該數(shù)據(jù)集偏線性可分。4個模型的預(yù)測準(zhǔn)確率(3)分別選擇支持向量機(jī)的4種核函數(shù)訓(xùn)練模型,并輸出模型的預(yù)測準(zhǔn)確率?!具\(yùn)行結(jié)果】1.使用核函數(shù)訓(xùn)練模型【參考代碼】#分割數(shù)據(jù)集fromsklearn.metricsimportaccuracy_scorex_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=420)Kernel=["linear","poly","rbf","sigmoid"]forkernelinKernel:model=SVC(kernel=kernel,gamma="auto",degree=1)

model.fit(x_train,y_train)pred=model.predict(x_test)ac=accuracy_score(y_test,pred)print("選擇%s核函數(shù)時,模型的預(yù)測準(zhǔn)確率為%f"%(kernel,ac))7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)36本例題中如果不進(jìn)行數(shù)據(jù)預(yù)處理,結(jié)果會是什么呢?請同學(xué)們刪除本例程序中的“數(shù)據(jù)預(yù)處理”代碼,然后運(yùn)行程序,觀察其運(yùn)行結(jié)果,并討論為什么會出現(xiàn)這樣的結(jié)果。暢所欲言7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)37多項(xiàng)式核函數(shù)的參數(shù)有3個,這3個參數(shù)共同影響其分類效果。在實(shí)際應(yīng)用中,往往使用網(wǎng)格搜索法共同調(diào)節(jié)這3個參數(shù)。【例7-2】使用支持向量機(jī)的多項(xiàng)式核函數(shù)對Sklearn自帶的肺癌數(shù)據(jù)集進(jìn)行分類,并使用網(wǎng)格搜索法尋找參數(shù)的最優(yōu)值。2.多項(xiàng)式核函數(shù)參數(shù)的調(diào)節(jié)【程序分析】使用網(wǎng)格搜索法尋找多項(xiàng)式核函數(shù)參數(shù)的最優(yōu)值并訓(xùn)練分類模型的步驟如下。7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)38【參考代碼】fromsklearn.datasetsimportload_breast_cancer #導(dǎo)入肺癌數(shù)據(jù)集fromsklearn.svmimportSVC#導(dǎo)入支持向量機(jī)分類模塊fromsklearn.model_selectionimporttrain_test_splitimportnumpyasnpfromsklearn.preprocessingimportStandardScalerx,y=load_breast_cancer().data,load_breast_cancer().targetx=StandardScaler().fit_transform(x)#數(shù)據(jù)標(biāo)準(zhǔn)化處理(1)導(dǎo)入Sklearn自帶的肺癌數(shù)據(jù)集,并對數(shù)據(jù)集進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理。2.多項(xiàng)式核函數(shù)參數(shù)的調(diào)節(jié)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)39程序運(yùn)行結(jié)果如圖所示??梢?,網(wǎng)格搜索給出了多項(xiàng)式核函數(shù)的最優(yōu)參數(shù)值,以及模型的預(yù)測準(zhǔn)確率。模型的預(yù)測準(zhǔn)確率較調(diào)參前略有提高,但整體分?jǐn)?shù)還是沒有超過線性核函數(shù)的預(yù)測準(zhǔn)確率。多項(xiàng)式核函數(shù)的最優(yōu)參數(shù)值與對應(yīng)模型的預(yù)測準(zhǔn)確率【運(yùn)行結(jié)果】(2)使用網(wǎng)格搜索法找到多項(xiàng)式核函數(shù)參數(shù)的最優(yōu)值,并使用該參數(shù)值訓(xùn)練模型,輸出其預(yù)測準(zhǔn)確率。2.多項(xiàng)式核函數(shù)參數(shù)的調(diào)節(jié)【參考代碼】fromsklearn.model_selectionimportStratifiedShuffleSplit #導(dǎo)入分層抽樣方法fromsklearn.model_selectionimportGridSearchCV #導(dǎo)入網(wǎng)格搜索方法gamma_range=np.logspace(-10,1,20)coef0_range=np.linspace(0,5,10)param_grid=dict(gamma=gamma_range,coef0=coef0_range)cv=StratifiedShuffleSplit(n_splits=5,test_size=0.3,random_state=420) #對樣本進(jìn)行分層抽樣grid=GridSearchCV(SVC(kernel="poly",degree=1),param_grid=param_grid,cv=cv) #使用網(wǎng)格搜索法尋找參數(shù)的最優(yōu)值grid.fit(x,y)print("最優(yōu)參數(shù)值為:%s"%grid.best_params_)print("選取該參數(shù)值時,模型的預(yù)測準(zhǔn)確率為:%f"%grid.best_score_)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)40①

logspace(start,stop,num)函數(shù)可用于構(gòu)造等比數(shù)列,其中,參數(shù)start表示數(shù)列的開始項(xiàng)為10的start次冪,參數(shù)stop表示數(shù)列的結(jié)束項(xiàng)為10的stop次冪,參數(shù)num表示數(shù)列的元素個數(shù);②

np.linspace(start,stop,num)函數(shù)可用于構(gòu)造等差數(shù)列,其中,參數(shù)start表示數(shù)列的開始項(xiàng),參數(shù)stop表示數(shù)列的結(jié)束項(xiàng),參數(shù)num表示數(shù)列的元素個數(shù);③

StratifiedShuffleSplit(n_splits=5,test_size=0.3,random_state=420)函數(shù)用于對樣本進(jìn)行分層抽樣,其中,參數(shù)n_splits表示將訓(xùn)練數(shù)據(jù)分成train/test對的組數(shù),可根據(jù)需要進(jìn)行設(shè)置,默認(rèn)值為10,參數(shù)test_size用于設(shè)置train/test對中train和test所占的比例,參數(shù)random_state為隨機(jī)數(shù)種子,其值設(shè)定為一個值,表示每次抽到的樣本數(shù)據(jù)相同;④

GridSearchCV(SVC(kernel="poly",degree=1,),param_grid=param_grid,cv=cv)函數(shù)表示使用網(wǎng)格搜索法進(jìn)行參數(shù)調(diào)節(jié),其中,第一個參數(shù)表示選用的分類算法,參數(shù)param_grid表示需要優(yōu)化的參數(shù)的取值,其值為字典或列表類型,參數(shù)cv表示交叉驗(yàn)證參數(shù)。【程序說明】2.多項(xiàng)式核函數(shù)參數(shù)的調(diào)節(jié)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)41多項(xiàng)式核函數(shù)參數(shù)degree的默認(rèn)值為3,表示核函數(shù)的階數(shù)為3,此時計(jì)算耗時非常長。因此,本例題中將其值設(shè)置為1(表示多項(xiàng)式核只能進(jìn)行線性分類),不再對其進(jìn)行參數(shù)調(diào)節(jié)。高手點(diǎn)撥7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)42(1)導(dǎo)入Sklearn自帶的肺癌數(shù)據(jù)集,并對數(shù)據(jù)集進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理(參考代碼與例7-2相應(yīng)步驟的參考代碼相同,此處不再贅述)。(2)尋找高斯徑向基核函數(shù)參數(shù)gamma的最優(yōu)值,并且使用該參數(shù)值訓(xùn)練模型,輸出其預(yù)測準(zhǔn)確率。3.高斯徑向基核函數(shù)參數(shù)的調(diào)節(jié)【例7-3】使用支持向量機(jī)的高斯徑向基核函數(shù)對Sklearn自帶的肺癌數(shù)據(jù)集進(jìn)行分類,并尋找高斯徑向基核函數(shù)參數(shù)gamma的最優(yōu)值。【程序分析】尋找高斯徑向基核函數(shù)參數(shù)gamma的最優(yōu)值并訓(xùn)練分類模型的步驟如下。7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)43程序運(yùn)行結(jié)果如圖1與圖2所示??梢姡咚箯较蚧撕瘮?shù)的最高預(yù)測準(zhǔn)確率約為97.66%,與線性核函數(shù)達(dá)到了相同的水平,此時gamma參數(shù)的取值約為0.012。一般來說,gamma的取值越大,模型越復(fù)雜,更容易出現(xiàn)過擬合現(xiàn)象,泛化能力越差。圖1gamma取值與模型預(yù)測準(zhǔn)確率的關(guān)系圖2參數(shù)gamma的最優(yōu)值與對應(yīng)模型的預(yù)測準(zhǔn)確率【運(yùn)行結(jié)果】3.高斯徑向基核函數(shù)參數(shù)的調(diào)節(jié)【參考代碼】fromsklearn.metricsimportaccuracy_scoreimportmatplotlib.pyplotaspltx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=420) #分割數(shù)據(jù)集score=[]gamma_range=np.logspace(-10,1,50)foriingamma_range:model=SVC(kernel='rbf',gamma=i)model.fit(x_train,y_train)pred=model.predict(x_test)ac=accuracy_score(y_test,pred)score.append(ac)#畫曲線圖,橫軸為gamma值,縱軸為對應(yīng)模型的預(yù)測準(zhǔn)確率plt.plot(gamma_range,score)plt.show()#輸出模型的最大預(yù)測準(zhǔn)確率與對應(yīng)的gamma值print("參數(shù)gamma的最優(yōu)值為:%s"%gamma_range[score.index(max(score))])print("選取該參數(shù)值時,模型的預(yù)測準(zhǔn)確率為:%f"%max(score))7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)44在實(shí)際應(yīng)用中,松弛系數(shù)懲罰項(xiàng)C與核函數(shù)的相關(guān)參數(shù)(gamma、coef0或degree)往往搭配在一起進(jìn)行調(diào)節(jié),這是支持向量機(jī)模型調(diào)參的重點(diǎn)。通常情況下,C的默認(rèn)值1是一個比較合理的參數(shù)。如果數(shù)據(jù)的噪聲點(diǎn)很多,一般要減小C的值,當(dāng)然也可以使用網(wǎng)格搜索法或?qū)W習(xí)曲線來調(diào)整C的值。(1)導(dǎo)入Sklearn自帶的肺癌數(shù)據(jù)集,并對數(shù)據(jù)集進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理(參考代碼與例7-2相應(yīng)步驟的參考代碼相同,此處不再贅述)。(2)使用支持向量機(jī)的線性核函數(shù)訓(xùn)練模型,尋找最優(yōu)的C值,并輸出模型的預(yù)測準(zhǔn)確率。4.松弛系數(shù)懲罰項(xiàng)C的調(diào)節(jié)【例7-4】使用支持向量機(jī)的線性核函數(shù)與高斯徑向基核函數(shù)對肺癌數(shù)據(jù)集進(jìn)行分類,并分別尋找兩個模型中松弛系數(shù)懲罰項(xiàng)C的最優(yōu)值?!境绦蚍治觥?/p>

尋找松弛系數(shù)懲罰項(xiàng)C的最優(yōu)值并使用支持向量機(jī)的線性核函數(shù)與高斯徑向基核函數(shù)訓(xùn)練模型的步驟如下。7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)45程序運(yùn)行結(jié)果如圖3與圖4所示??梢?,當(dāng)C值約為1.2341時,線性核函數(shù)的分類準(zhǔn)確率最高,達(dá)到了約97.66%?!具\(yùn)行結(jié)果】圖3線性核函數(shù)模型的C值與預(yù)測準(zhǔn)確率的關(guān)系圖4線性核函數(shù)模型的最優(yōu)C值與預(yù)測準(zhǔn)確率4.松弛系數(shù)懲罰項(xiàng)C的調(diào)節(jié)【參考代碼】fromsklearn.metricsimportaccuracy_scoreimportmatplotlib.pyplotaspltx_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=420) #分割數(shù)據(jù)集score=[]C_range=np.linspace(0.01,30,50)foriinC_range:model=SVC(kernel='linear',C=i)model.fit(x_train,y_train)pred=model.predict(x_test)ac=accuracy_score(y_test,pred)score.append(ac)#畫曲線圖,橫軸為C值,縱軸為對應(yīng)模型的預(yù)測準(zhǔn)確率plt.plot(C_range,score)plt.show()#輸出模型的最大預(yù)測準(zhǔn)確率與對應(yīng)的C值print("模型的最優(yōu)C值為:%s"%C_range[score.index(max(score))])print("模型選取該參數(shù)時的預(yù)測準(zhǔn)確率為:%f"%max(score))7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)46(3)使用支持向量機(jī)的高斯徑向基核函數(shù)訓(xùn)練模型,尋找最優(yōu)的C值,并輸出模型的預(yù)測準(zhǔn)確率。將步驟(2)參考代碼中的“model=SVC(kernel='linear',C=i)”修改為“model=SVC(kernel='rbf',C=i,gamma=0.01207)”,然后運(yùn)行程序。4.松弛系數(shù)懲罰項(xiàng)C的調(diào)節(jié)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)47程序運(yùn)行結(jié)果如圖5與圖6所示??梢?,當(dāng)C值約為6.7424時,高斯徑向基核函數(shù)模型的預(yù)測準(zhǔn)確率達(dá)到最大值,約為98.25%,這個值超過了線性核函數(shù)模型的最高預(yù)測準(zhǔn)確率。【運(yùn)行結(jié)果】圖5高斯徑向基核函數(shù)模型的C值與預(yù)測準(zhǔn)確率的關(guān)系圖6高斯徑向基核函數(shù)模型的最優(yōu)C值與預(yù)測準(zhǔn)確率4.松弛系數(shù)懲罰項(xiàng)C的調(diào)節(jié)7.2.2支持向量機(jī)參數(shù)的調(diào)節(jié)48(1)線性核函數(shù)與多項(xiàng)式核函數(shù)在數(shù)據(jù)中的表現(xiàn)很不穩(wěn)定,如果數(shù)據(jù)相對線性可分,則表現(xiàn)不錯;如果數(shù)據(jù)像環(huán)形數(shù)據(jù)那樣徹底不可分,則表現(xiàn)很糟糕。(2)雙曲正切核函數(shù)在非線性數(shù)據(jù)中的表現(xiàn)比以上兩個核函數(shù)好一些,但效果不如高斯徑向基核函數(shù),在線性數(shù)據(jù)上完全比不了線性核函數(shù),故很少使用。(3)高斯徑向基核函數(shù)在任何數(shù)據(jù)集上都表現(xiàn)不錯。因此,在訓(xùn)練支持向量機(jī)模型時,應(yīng)先嘗試使用高斯徑向基核函數(shù),如果高斯徑向基核函數(shù)的表現(xiàn)不好,再嘗試其他核函數(shù)。支持向量機(jī)的幾種核函數(shù)在實(shí)際應(yīng)用中的性能表現(xiàn):高手點(diǎn)撥項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別步驟1導(dǎo)入Sklearn自帶的名人人臉照片數(shù)據(jù)集。步驟2選取最少有60張照片的名人作為數(shù)據(jù)集。步驟3獲取最少有60張照片的名人的姓名和照片尺寸,并將其輸出。49點(diǎn)擊此處播放微課數(shù)據(jù)準(zhǔn)備1.?dāng)?shù)據(jù)準(zhǔn)備50項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖7所示??梢姡摂?shù)據(jù)集中最少有60張照片的名人有8位,共有1348張照片,照片尺寸為62×47像素。圖7最少有60張照片的名人姓名、樣本數(shù)量與照片尺寸1.?dāng)?shù)據(jù)準(zhǔn)備【參考代碼】fromsklearn.datasetsimportfetch_lfw_people #導(dǎo)入名人人臉照片數(shù)據(jù)集importmatplotlib.pyplotaspltfaces=fetch_lfw_people(min_faces_per_person=60) #選取最少有60張照片的數(shù)據(jù)作為訓(xùn)練集x,y=faces.data,faces.targettarget_names=faces.target_namesn_samples,h,w=faces.images.shape #n_samples為樣本數(shù)量,h和w為特征變量#輸出數(shù)據(jù)集信息print(target_names) #顯示名人的姓名print(n_samples,h,w) #顯示樣本數(shù)量與照片尺寸51項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別第一次導(dǎo)入名人人臉照片數(shù)據(jù)集時,會從網(wǎng)上自動下載該數(shù)據(jù)集。由于數(shù)據(jù)集太大,下載速度較慢,有時還會報錯。讀者可以從本書自帶的資料包“item7/lfw_home”中手動下載該數(shù)據(jù)集,然后將下載下來的數(shù)據(jù)集復(fù)制到“C:\Users\DELL\scikit_learn_data”路徑下(如果沒有找到該路徑,可直接在C盤搜索“scikit_learn_data”,進(jìn)行尋找),再重新運(yùn)行代碼即可。高手點(diǎn)撥項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別52步驟1導(dǎo)入主成分分析(principalcomponentanalysis,PCA)降維算法。步驟2對數(shù)據(jù)集進(jìn)行降維處理,維度降低到150個。步驟3以3行5列的形式顯示降維后的部分照片。點(diǎn)擊此處播放微課數(shù)據(jù)降維處理2.?dāng)?shù)據(jù)降維處理53項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別PCA算法主要用于數(shù)據(jù)降維處理,其參數(shù)主要有n_components、svd_solver和whiten:①

參數(shù)n_components表示需要保留的特征個數(shù);②參數(shù)svd_solver用于指定奇異值分解的方法(奇異值分解可用于降維算法中進(jìn)行特征值的分解),其取值有4個,分別為“randomized”“full”“arpack”和“auto”,“randomized”一般適用于數(shù)據(jù)量大,數(shù)據(jù)維度多同時主成分?jǐn)?shù)目比例又較低的PCA降維,“full”是傳統(tǒng)意義上的奇異值分解方法,“arpack”一般用于特征矩陣為稀疏矩陣的情況,“auto”是默認(rèn)值,表示自動選擇一個合適的算法來降維;③

參數(shù)whiten表示是否對降維后的變量進(jìn)行歸一化處理。以3行5列的形式顯示15張照片,程序中可以先用subplots()函數(shù)創(chuàng)建一個3行5列的畫布,然后再用imshow()函數(shù)在畫布中繪制圖像。指點(diǎn)迷津54項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別

【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖8所示。圖8降維處理后的名人人臉數(shù)據(jù)集(部分)2.?dāng)?shù)據(jù)降維處理【參考代碼】fromsklearn.decompositionimportPCA #導(dǎo)入PCA降維算法#降維處理,將數(shù)據(jù)集維度降低到150個n_components=150pca=PCA(n_components=n_components,svd_solver='randomized',whiten=True,random_state=70).fit(x)eigenfaces=ponents_.reshape((n_components,h,w))

#提取特征值x_pca=pca.transform(x) #將訓(xùn)練集轉(zhuǎn)化成低維度的特征向量#以3行5列的形式顯示降維后的照片fig,ax=plt.subplots(3,5)fori,axiinenumerate(ax.flat):axi.imshow(eigenfaces[i].reshape(h,w),cmap='bone')axi.set(xticks=[],yticks=[])plt.show()項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別55步驟1

將降維處理后數(shù)據(jù)集拆分為訓(xùn)練集與測試集。步驟2使用網(wǎng)格搜索法尋找支持向量機(jī)中高斯徑向基核函數(shù)參數(shù)gamma與模型松弛系數(shù)懲罰項(xiàng)C的最優(yōu)值。步驟3獲取最優(yōu)參數(shù)值下的模型,即最優(yōu)模型。步驟4輸出最優(yōu)模型的評估報告。點(diǎn)擊此處播放微課訓(xùn)練與評估模型3.訓(xùn)練與評估模型56項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別【運(yùn)行結(jié)果】

程序運(yùn)行結(jié)果如圖9所示??梢姡W(wǎng)格搜索法找到的最優(yōu)參數(shù)值是{'C':5,'gamma':0.001},模型的預(yù)測準(zhǔn)確率是82%,預(yù)測精確率最高的名人是HugoChavez,預(yù)測精確率最低的名人是ArielSharon。圖9最優(yōu)模型的評估報告3.訓(xùn)練與評估模型【參考代碼】fromsklearn.svmimportSVCfromsklearn.model_selectionimportGridSearchCVfromsklearn.metricsimportclassification_reportfromsklearn.model_selectionimporttrain_test_splitimportnumpyasnp#拆分?jǐn)?shù)據(jù)集x_train,x_test,y_train,y_test=train_test_split(x_pca,y,test_size=400,random_state=42)#使用網(wǎng)格搜索法尋找參數(shù)的最優(yōu)值param_grid={'C':[1,5,10,50,100],'gamma':[0.0001,0.0005,0.001,0.005,0.01,0.1]}grid=GridSearchCV(SVC(kernel="rbf",random_state=0),param_grid=param_grid,cv=5)grid.fit(x_train,y_train)print("最優(yōu)參數(shù)值為:%s"%grid.best_params_)#最優(yōu)模型評估m(xù)odel=grid.best_estimator_ #獲取最優(yōu)模型pred=model.predict(x_test)re=classification_report(y_test,pred,target_names=faces.target_names)print("最優(yōu)模型的評估報告:")print(re)項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別57步驟1創(chuàng)建一個4行6列的畫布。步驟2使用imshow()函數(shù)在畫布中繪制圖像。步驟3顯示模型的預(yù)測姓名,預(yù)測正確顯示為黑色文字,預(yù)測錯誤顯示為黑色加邊框文字。步驟4輸出最終圖像。點(diǎn)擊此處播放微課顯示分類結(jié)果4.顯示分類結(jié)果58項(xiàng)目實(shí)施——使用支持向量機(jī)實(shí)現(xiàn)人臉識別set_ylabel(bbox=dict(fc='black',alpha=0.4))函數(shù)可用于設(shè)置圖像在y軸上的

溫馨提示

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

最新文檔

評論

0/150

提交評論