數(shù)據(jù)科學(xué)基礎(chǔ) 課件 第6章 人工智能與機(jī)器學(xué)習(xí)_第1頁(yè)
數(shù)據(jù)科學(xué)基礎(chǔ) 課件 第6章 人工智能與機(jī)器學(xué)習(xí)_第2頁(yè)
數(shù)據(jù)科學(xué)基礎(chǔ) 課件 第6章 人工智能與機(jī)器學(xué)習(xí)_第3頁(yè)
數(shù)據(jù)科學(xué)基礎(chǔ) 課件 第6章 人工智能與機(jī)器學(xué)習(xí)_第4頁(yè)
數(shù)據(jù)科學(xué)基礎(chǔ) 課件 第6章 人工智能與機(jī)器學(xué)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩224頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第六章人工智能與機(jī)器學(xué)習(xí)6.1人工智能基礎(chǔ)6.1.1人工智能簡(jiǎn)介引例

蘋果siriAI及其研究?jī)?nèi)容AI簡(jiǎn)史6.1.2機(jī)器學(xué)習(xí)基礎(chǔ)定義分類監(jiān)督學(xué)習(xí)與無(wú)監(jiān)督學(xué)習(xí)機(jī)器學(xué)習(xí)過(guò)程6.1.3scikit-learn簡(jiǎn)介236.1.1人工智能簡(jiǎn)介|引例

蘋果siriHey,Siri1.問(wèn):“When’sthenextNBAgame?”Siri:HerearethescoresfromtheNBAlastSaturday.2.問(wèn):“WhowonSaturday'sNBAgame?”

Siri:TheHeatovercametheCelticsbyascoreof101to88lastSaturday.TheCelticsareoutoftheplayoffs(季后賽).3.問(wèn):Who'stallerKobeBryant(科比)orLebronJames?Siri:Ifyousquint,youcanseethatLeBronJamesisslightlytaller.4.問(wèn):HowaretheDodgersdoingthisseason?Siri:OK,theDodgersappeartobeinfirstplaceintheNLWestrightnow.人機(jī)對(duì)話語(yǔ)音識(shí)別自然語(yǔ)言理解信息檢索、歸納、概況語(yǔ)音合成……4人形機(jī)器人Ameca需要兩大核心技術(shù):人工制作的精細(xì)化的肢體(artificialbody)人工智能算法(artificialintelligence)“人工智能”(AI,ArtificialIntelligence)目標(biāo)是通過(guò)機(jī)器來(lái)模擬人類認(rèn)知能力(如學(xué)習(xí)、推理等)。尼爾森定義,“人工智能是關(guān)于知識(shí)的科學(xué)”,所謂“知識(shí)的科學(xué)”就是研究知識(shí)的表示、知識(shí)的獲取和知識(shí)的運(yùn)用。研究領(lǐng)域包括知識(shí)表示、自動(dòng)推理和搜索方法,機(jī)器學(xué)習(xí),自然語(yǔ)言理解,計(jì)算機(jī)視覺(jué),智能機(jī)器人,自動(dòng)程序設(shè)計(jì)等。發(fā)展歷程“AI”最初在1956年Dartmouth會(huì)上提出。

會(huì)議組織者M(jìn)cCarthy經(jīng)過(guò)機(jī)器推理、專家系統(tǒng)、神經(jīng)網(wǎng)絡(luò)等多個(gè)發(fā)展階段?,F(xiàn)階段引領(lǐng)性的戰(zhàn)略性技術(shù)和新一輪產(chǎn)業(yè)變革的核心驅(qū)動(dòng)力。應(yīng)用領(lǐng)域遍布互聯(lián)網(wǎng)、汽車、智能家居、機(jī)器人、交通、醫(yī)療……主要途徑通過(guò)機(jī)器學(xué)習(xí),獲得預(yù)測(cè)和決策的能力;人類專家知識(shí)形成規(guī)則,用于邏輯推理。56.1.1人工智能簡(jiǎn)介|AI及其研究?jī)?nèi)容主流McCarthy(麥卡錫)66.1.1人工智能簡(jiǎn)介|簡(jiǎn)史TuringTest(圖靈測(cè)試)Turing(圖靈)機(jī)器學(xué)習(xí)(MachineLearning)是人工智能一個(gè)分支,ML算法是一種能從數(shù)據(jù)中學(xué)習(xí)的算法。

Mitchell(1997)定義:“對(duì)于某任務(wù)T和性能度量P,一個(gè)計(jì)算機(jī)程序被認(rèn)為可以從經(jīng)驗(yàn)E中學(xué)習(xí)是指,通過(guò)經(jīng)驗(yàn)E改進(jìn)后,它在任務(wù)T上由性能度量P衡量的性能有所提升。研究的主要內(nèi)容是能夠利用“數(shù)據(jù)”訓(xùn)練出“模型”的算法,然后使用模型進(jìn)行預(yù)測(cè)。ML應(yīng)用于數(shù)據(jù)科學(xué)領(lǐng)域。因此有觀點(diǎn)把機(jī)器學(xué)習(xí)看作是一種數(shù)學(xué)建模?!澳P汀狈褐笍臄?shù)據(jù)中學(xué)得的結(jié)果。76.1.2機(jī)器學(xué)習(xí)基礎(chǔ)|定義數(shù)據(jù)是原材料,機(jī)器學(xué)習(xí)算法是加工工具,模型是產(chǎn)品。86.1.2機(jī)器學(xué)習(xí)基礎(chǔ)|機(jī)器學(xué)習(xí)分類監(jiān)督學(xué)習(xí):利用歷史數(shù)據(jù)(稱為訓(xùn)練數(shù)據(jù)),學(xué)習(xí)表示事物的模型;然后利用模型預(yù)測(cè)未知的數(shù)據(jù)。要求訓(xùn)練數(shù)據(jù)預(yù)先標(biāo)記出目標(biāo)變量(即待預(yù)測(cè)的變量)的真實(shí)值。分類任務(wù),判斷新數(shù)據(jù)所屬類別或標(biāo)簽(離散的量)

如,

郵政編碼分類?;貧w任務(wù),預(yù)測(cè)新數(shù)據(jù)在目標(biāo)變量上的值(連續(xù)的量)

如,股票價(jià)格預(yù)測(cè)。96.1.2機(jī)器學(xué)習(xí)基礎(chǔ)|監(jiān)督學(xué)習(xí)無(wú)監(jiān)督學(xué)習(xí):

傾向于對(duì)事物本身特征的分析。數(shù)據(jù)中不含待預(yù)測(cè)量的真實(shí)值。聚類,將數(shù)據(jù)集中類似的數(shù)據(jù)分為一組(稱為簇)

客戶分群降維,從高維數(shù)據(jù)中檢測(cè)、識(shí)別低緯數(shù)據(jù)結(jié)構(gòu)。106.1.2機(jī)器學(xué)習(xí)基礎(chǔ)|無(wú)監(jiān)督學(xué)習(xí)每次平均消費(fèi)金額過(guò)去一年的購(gòu)買次數(shù)圖a客戶分群圖b降維116.1.2機(jī)器學(xué)習(xí)基礎(chǔ)|機(jī)器學(xué)習(xí)過(guò)程setosa

模型

訓(xùn)練

特征提取學(xué)習(xí)算法模型預(yù)測(cè)訓(xùn)練數(shù)據(jù)數(shù)據(jù)準(zhǔn)備

特征選擇和變換

模型訓(xùn)練和測(cè)試

模型性能評(píng)估和優(yōu)化

→模型使用sepallengthsepalwidthpetallengthpetalwidthclass5.13.51.40.2setosa7.03.24.71.4Versicolor……………?未知數(shù)據(jù)[5.2,3.4,1.00.4]Scikit-learn(簡(jiǎn)為sklearn)是最流行的Python機(jī)器學(xué)習(xí)包之一提供

“分類、回歸、聚類、維數(shù)約簡(jiǎn)、模型選擇和預(yù)處理”六大類工具。Scikit-learn基于NumPy、SciPy和matplotlib開(kāi)發(fā);官方文檔:/stable/index.htmlScikit-learn本身不支持深度學(xué)習(xí)與GPU加速深度學(xué)習(xí)方法需要使用Tensorflow、Keras、PyTorch等Python開(kāi)源框架Anaconda集成開(kāi)發(fā)環(huán)境:集成了Scikit-learn、以及NumPy、SciPy、matplotlib、pandas等;導(dǎo)入即可使用。126.1.3scikit-learn簡(jiǎn)介數(shù)據(jù)表

數(shù)據(jù)表就是二維網(wǎng)格數(shù)據(jù),其中每一行表示數(shù)據(jù)集中的一個(gè)樣本,列表示構(gòu)成樣本的相關(guān)特征或類標(biāo)簽。

如鳶尾花數(shù)據(jù)集136.1.3scikit-learn簡(jiǎn)介|Scikit-Learn的數(shù)據(jù)表示每行數(shù)據(jù)表示一朵鳶尾花。行數(shù)表示數(shù)據(jù)集中記錄的鳶尾花總數(shù)。矩陣的行稱為樣本。樣本數(shù)記為n。每列數(shù)據(jù)表示每個(gè)樣本某特征的量化值。矩陣的列稱為特征。特征數(shù)記為m。樣本的類標(biāo)簽特征矩陣(X)和目標(biāo)數(shù)組(y)訓(xùn)練模型前,輸入的數(shù)據(jù)集要拆分成兩部分:樣本的特征信息、待預(yù)測(cè)的量特征矩陣(X)

數(shù)據(jù)表的特征信息,以二維數(shù)組或矩陣表示,稱為特征矩陣,簡(jiǎn)記為X。X是[n,m]二維矩陣,常用NumPy數(shù)組或Pandas的DataFrame對(duì)象表示。樣本(即每一行)是指數(shù)據(jù)集中的每個(gè)對(duì)象,如一朵花、一篇文章、一幅圖像等。

特征(即每一列)是指每個(gè)樣本都具有的某種量化觀測(cè)值。特征值一般是實(shí)數(shù),有時(shí)可能取布爾類型或離散值。146.1.3scikit-learn簡(jiǎn)介|Scikit-Learn的數(shù)據(jù)表示Sepal_lengthSepal_widthPetal_lengthPetal_widthspecies15.13.51.40.2Setosa24.93.01.40.2Setosa…506.43.54.51.2Versicolor…1505.93.05.01.8Virginica樣本(實(shí)例,示例,觀測(cè))特征(屬性)類標(biāo)簽(目標(biāo))特征矩陣目標(biāo)數(shù)組(y)待預(yù)測(cè)的量,以一個(gè)標(biāo)簽或目標(biāo)數(shù)組表示,常記為y。y是一維數(shù)組,長(zhǎng)度是樣本總數(shù)n,常用一維的NumPy數(shù)組或Pandas的Serie對(duì)象表示。目標(biāo)數(shù)組可以是連續(xù)的數(shù)值類型,也可以是離散的類型/標(biāo)簽。

如,iris數(shù)據(jù)集中待預(yù)測(cè)的花的品種(species)。species列就是目標(biāo)數(shù)組。156.1.3scikit-learn簡(jiǎn)介|Scikit-Learn的數(shù)據(jù)表示Sepal_lengthSepal_widthPetal_lengthPetal_widthspecies15.13.51.40.2Setosa24.93.01.40.2Setosa…506.43.54.51.2Versicolor…1505.93.05.01.8Virginica樣本(實(shí)例,示例,觀測(cè))特征(屬性)類標(biāo)簽(目標(biāo))目標(biāo)數(shù)組Setosa:山鳶尾

versicolor:變色鳶尾

virginica:維吉尼亞鳶尾(1)獲取數(shù)據(jù)集方法一:讀取iris.csv文件

存入一個(gè)DataFrame對(duì)象中;然后拆分?jǐn)?shù)據(jù)集,取其中特征信息存入特征矩陣X,取其中標(biāo)簽信息存入目標(biāo)數(shù)組y中。166.1.3scikit-learn簡(jiǎn)介|例6.1iris數(shù)據(jù)集(1)運(yùn)行結(jié)果【例6-1】鳶尾花數(shù)據(jù)集獲?。ùa:chapter6-1-iris.ipynb)iris數(shù)據(jù)集:共有150個(gè)樣本,分屬3個(gè)類別,每類50個(gè)樣本。每個(gè)樣本有4個(gè)特征,均為正實(shí)數(shù)。17抽取特征矩陣X代碼獲取目標(biāo)數(shù)組y代碼課堂練習(xí)思考:還有其他方法嗎?(2)獲取數(shù)據(jù)集方法二:利用sklearn的數(shù)據(jù)加載函數(shù)利用sklearn.datasets包中的load_iris()函數(shù)獲取iris數(shù)據(jù)集,進(jìn)而得到特征矩陣X和目標(biāo)數(shù)組y。186.1.3scikit-learn簡(jiǎn)介|例6.1iris數(shù)據(jù)集(2)iris數(shù)據(jù)已內(nèi)置入sklearn,通過(guò)load_iris()函數(shù)來(lái)獲得。語(yǔ)法如下:load_iris(return_X_y=False)參數(shù):

return_X_y:默認(rèn)為False,返回一個(gè)bunch對(duì)象。若為True,則返回(X,y)元組。bunch對(duì)象,是一個(gè)類似字典的數(shù)據(jù)對(duì)象。主要屬性有:“data”,待學(xué)習(xí)的數(shù)據(jù),即特征矩陣。NumPy數(shù)組,二維“target”,類標(biāo)簽,即目標(biāo)數(shù)組。NumPy數(shù)組,一維“target_names”,標(biāo)簽的涵義?!癴eature_names”,特征的涵義?!癉ESCR”,數(shù)據(jù)集的完整描述。19利用load_iris()獲取iris數(shù)據(jù)20對(duì)數(shù)據(jù)可視化seaborn.set()可以用來(lái)設(shè)置背景,調(diào)色板等Seaborn在Matplotlib的基礎(chǔ)上開(kāi)發(fā)了一套API,為默認(rèn)的圖形樣式和顏色設(shè)置提供了理智的選擇,為常用的統(tǒng)計(jì)圖形定義了許多簡(jiǎn)單的高級(jí)函數(shù),并與pandasDataFrame的功能有機(jī)結(jié)合。21用seaborn對(duì)數(shù)據(jù)可視化Bunch類型將鍵作為屬性公開(kāi)的容器類型。通過(guò)允許由鍵訪問(wèn)值bunch[“value_key”]或由屬性訪問(wèn)值bunch.value_key來(lái)擴(kuò)展字典。Bunch對(duì)象常用作函數(shù)和方法的輸出。226.1.3scikit-learn簡(jiǎn)介|sklearn.utils.BunchScikit-learn中為每類ML模型提供了一種評(píng)估器,并提供了統(tǒng)一的接口。Scikit-learn評(píng)估器(即模型類)的常用步驟如下:通過(guò)從Scikit-learn中導(dǎo)入適當(dāng)?shù)脑u(píng)估器類,選擇模型類。選擇模型類用合適的數(shù)值對(duì)模型類進(jìn)行實(shí)例化,配置模型超參數(shù)。實(shí)例化模型整理數(shù)據(jù),獲取特征矩陣和目標(biāo)數(shù)組。整理數(shù)據(jù)調(diào)用模型實(shí)例的fit()方法對(duì)數(shù)據(jù)進(jìn)行擬合。訓(xùn)練模型對(duì)新數(shù)據(jù)應(yīng)用模型:應(yīng)用模型在監(jiān)督學(xué)習(xí)模型中,通常使用predict()方法預(yù)測(cè)新數(shù)據(jù)的標(biāo)簽;在無(wú)監(jiān)督學(xué)習(xí)模型中,通常使用transform()或predict()方法轉(zhuǎn)換或推斷數(shù)據(jù)的性質(zhì)。232.1人工智能中的機(jī)器學(xué)習(xí)|Scikit-learn簡(jiǎn)介|評(píng)估器API超參數(shù):是一些重要的必須在選擇模型時(shí)確定好的參數(shù),

即在模型擬合數(shù)據(jù)之前必須被確定的參數(shù)。(3)如何為前面的鳶尾花數(shù)據(jù)集建立分類模型?

用所有數(shù)據(jù)來(lái)訓(xùn)練模型,可以嗎?

先用一部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練,再用模型預(yù)測(cè)出其他樣本的標(biāo)簽。246.1.3scikit-learn簡(jiǎn)介|分類評(píng)估器使用|例6.1iris數(shù)據(jù)集(3)本例使用高斯樸素貝葉斯(Gaussianna?veBayes)方法。該方法假設(shè)每個(gè)特征中屬于每一類的觀測(cè)值都服從高斯分布。速度快,無(wú)需選擇超參數(shù),適合作為初步分類手段。sklearn.naive_bayes中的GaussianNB評(píng)估器類。使用前先導(dǎo)入,語(yǔ)法:fromsklearn.naive_bayesimportGaussianNB?怎樣測(cè)試模型?劃分?jǐn)?shù)據(jù)集25Sklearn.model_selection提供了train_test_split()函數(shù),可將原數(shù)據(jù)集隨機(jī)劃分成訓(xùn)練子集和測(cè)試子集,語(yǔ)法:train_test_split(X,y,test_size=0.25,random_state=None)初始化模型前,使用該函數(shù)劃分原始數(shù)據(jù)集。使用前先導(dǎo)入,導(dǎo)入語(yǔ)法:fromsklearn.model_selectionimporttrain_test_split參數(shù)X:array;待擬合的特征矩陣y:array;目標(biāo)向量(監(jiān)督學(xué)習(xí))test_size:int;測(cè)試集大小,默認(rèn)為0.25random_state:int;

隨機(jī)數(shù)種子,默認(rèn)None返回值劃分結(jié)果列表:

list;訓(xùn)練X,測(cè)試X,訓(xùn)練y,測(cè)試y26

例6.1鳶尾花數(shù)據(jù)集(代碼)代碼:例6.1iris數(shù)據(jù)集.ipynb數(shù)據(jù)整理劃分?jǐn)?shù)據(jù)集模型訓(xùn)練與預(yù)測(cè)模型分類結(jié)果評(píng)估例6-2簡(jiǎn)單線性回歸。276.1.3scikit-learn簡(jiǎn)介|回歸評(píng)估器使用|例6-2簡(jiǎn)單線性回歸給一個(gè)線性函數(shù)添加適當(dāng)大小的噪聲,構(gòu)造一個(gè)合成的回歸問(wèn)題。造數(shù)據(jù):代碼:例6-2簡(jiǎn)單線性回歸.ipynb

28(2)實(shí)例化模型(選擇超參數(shù))(1)選擇模型類(3)整理數(shù)據(jù)(特征矩陣和目標(biāo)數(shù)組)有監(jiān)督學(xué)習(xí)的基本步驟:選擇模型類選擇模型超參數(shù)用模型擬合訓(xùn)練數(shù)據(jù)用模型預(yù)測(cè)新數(shù)據(jù)的標(biāo)簽

例6-2簡(jiǎn)單線性回歸(代碼)29(4)訓(xùn)練模型(用模型擬合數(shù)據(jù))(5)應(yīng)用模型(預(yù)測(cè)新數(shù)據(jù)的標(biāo)簽)

30小結(jié)有監(jiān)督學(xué)習(xí):分類預(yù)測(cè)兩個(gè)或多個(gè)離散分類標(biāo)簽的模型回歸預(yù)測(cè)連續(xù)標(biāo)簽的模型無(wú)監(jiān)督學(xué)習(xí):聚類檢測(cè)、識(shí)別數(shù)據(jù)顯著組別的模型降維從高維數(shù)據(jù)中識(shí)別低維數(shù)據(jù)結(jié)構(gòu)的模型Scikit-learn中的數(shù)據(jù)表示Scikit-learn中評(píng)估器類的使用步驟:

導(dǎo)入模型/初始化模型/擬合數(shù)據(jù)/預(yù)測(cè)數(shù)據(jù)6.2分類6.2.1性能評(píng)估與模型驗(yàn)證常用分類算法分類器性能評(píng)估sklearn中的metrics類模型驗(yàn)證6.2.2k近鄰6.2.3樸素貝葉斯分類器6.2.4支持向量機(jī)(SVM)6.2.5決策樹(shù)31326.2.1性能評(píng)估與模型驗(yàn)證|常用分類算法樸素貝葉斯k近鄰法支持向量機(jī)(SupportVectorMachine)決策樹(shù)(DecisionTree)神經(jīng)網(wǎng)絡(luò)(NeuralNetwork)集成學(xué)習(xí)(EnsembleLearning)常用分類算法:

336.2.1性能評(píng)估與模型驗(yàn)證|分類器性能評(píng)估預(yù)測(cè)為正類預(yù)測(cè)為負(fù)類真實(shí)是正類ab真實(shí)是負(fù)類cd真實(shí)預(yù)測(cè)

例假定一文本中有100個(gè)詞,20個(gè)地名(正類),80個(gè)非地名(負(fù)類)分類結(jié)果:30個(gè)地名,其中15是真的地名,15個(gè)不是70個(gè)非地名,其中65個(gè)真的不是地名,5個(gè)是地名346.2.1性能評(píng)估與模型驗(yàn)證|分類器性能評(píng)估預(yù)測(cè)為正類預(yù)測(cè)為負(fù)類真實(shí)是正類155真實(shí)是負(fù)類1565真實(shí)預(yù)測(cè)準(zhǔn)確率:80/100精確率:15/30召回率:15/20F1得分:30/50356.2.1性能評(píng)估與模型驗(yàn)證|sklearn中的metrics類數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集兩部分:用訓(xùn)練集數(shù)據(jù)訓(xùn)練模型、用測(cè)試集數(shù)據(jù)來(lái)測(cè)試模型。sklearn.metrics模塊中提供模型評(píng)估的常用方法函數(shù),有:

預(yù)測(cè)結(jié)果的準(zhǔn)確率accuracy_score(y,predicted_y)

混淆矩陣計(jì)算metrics.confusion_matrix(y,predicted_y)分類性能報(bào)告metrics.classification_report(y,predicted_y)參數(shù):y:待預(yù)測(cè)量的真實(shí)值Predicted_y:模型預(yù)測(cè)結(jié)果366.2.1性能評(píng)估與模型驗(yàn)證|例6.1iris數(shù)據(jù)集(4)(4)如何評(píng)估前面建立的分類器的分類結(jié)果?

分別用sklearn.metrics中的accuracy_score、classification_report、confusion_matrix評(píng)估分類器的性能。有監(jiān)督學(xué)習(xí)的基本步驟:選擇模型類選擇模型超參數(shù)用模型擬合訓(xùn)練數(shù)據(jù)用模型預(yù)測(cè)新數(shù)據(jù)的標(biāo)簽376.2.1性能評(píng)估與模型驗(yàn)證|模型驗(yàn)證模型驗(yàn)證的常用方法:留出法、交叉驗(yàn)證法sklearn.naive_bayes.GaussianNB如何驗(yàn)證選中的模型和超參數(shù)是否已經(jīng)很好地?cái)M合了數(shù)據(jù)呢?思考:可否用一套數(shù)據(jù)訓(xùn)練模型,又用它評(píng)估模型?為什么?常用模型驗(yàn)證方法:(1)留出法:從原訓(xùn)練集中留出一部分用來(lái)驗(yàn)證模型性能。(2)k折交叉驗(yàn)證法:將所有訓(xùn)練樣本分為k個(gè)子集,其中k-1個(gè)作為訓(xùn)練集,剩下的1個(gè)作為驗(yàn)證集;然后更換驗(yàn)證子集,使得每個(gè)子集均做一次驗(yàn)證集,交叉驗(yàn)證總共重復(fù)k次;最后將k次驗(yàn)證結(jié)果的均值作為最終的結(jié)果。優(yōu)點(diǎn):所有樣本都被作為了訓(xùn)練集和驗(yàn)證集,每個(gè)樣本都被驗(yàn)證一次。這樣在多個(gè)模型比較中,用k折交叉驗(yàn)證結(jié)果來(lái)評(píng)估各模型準(zhǔn)確性,更準(zhǔn)確。極端情況只留一個(gè)樣本做驗(yàn)證,其余樣本全用于訓(xùn)練,稱為L(zhǎng)OO(Leave-One-Out)交叉驗(yàn)證,即留一法。386.2.1性能評(píng)估與模型驗(yàn)證|模型驗(yàn)證訓(xùn)練集模型驗(yàn)證的主要目的是為了選擇最優(yōu)模型。主要挑戰(zhàn)是算法必須能在先前未觀測(cè)的新輸入上表現(xiàn)良好。在先前未觀測(cè)到的輸入上表現(xiàn)良好的能力被稱為泛化(generalization)。6.2.1性能評(píng)估與模型驗(yàn)證|選擇最優(yōu)模型模型對(duì)數(shù)據(jù)過(guò)擬合(overfitting):過(guò)擬合是指訓(xùn)練誤差和測(cè)試誤差之間的差距太大。另一種說(shuō)法是模型具有高方差。模型對(duì)數(shù)據(jù)欠擬合(underfitting):欠擬合是指模型不能在訓(xùn)練集上獲得足夠低的誤差。另一種說(shuō)法是模型具有高偏差。用線性函數(shù)擬合數(shù)據(jù)用二次函數(shù)擬合數(shù)據(jù)用9階多項(xiàng)式擬合數(shù)據(jù)若模型效果不好,如何改進(jìn)?可能的答案:用更復(fù)雜/更靈活的模型用更簡(jiǎn)單/更確定的模型采集更多的訓(xùn)練樣本為每個(gè)樣本采集更多的特征sklearn.model_selection.cross_val_score方法:k折交叉驗(yàn)證評(píng)分

cross_val_score(estimator,X,y,cv=3,…)406.2.1性能評(píng)估與模型驗(yàn)證|cross_val_score參數(shù)estimator:待訓(xùn)練的模型X:list或array;待擬合的特征矩陣y:array;目標(biāo)向量(監(jiān)督學(xué)習(xí))cv:int,交叉驗(yàn)證折數(shù),默認(rèn)值3返回值scores:實(shí)型數(shù)組;評(píng)估器每次運(yùn)行交叉驗(yàn)證得分構(gòu)成的數(shù)組。6.2分類6.2.1性能評(píng)估與模型驗(yàn)證6.2.2k近鄰法K近鄰分類思想Scikit-learn中kNN類構(gòu)建kNN分類器的步驟模型驗(yàn)證最優(yōu)模型選擇6.2.3樸素貝葉斯分類器6.2.4支持向量機(jī)(SVM)6.2.5決策樹(shù)41426.2.2k近鄰法|思想K近鄰法(KNearestNeighbors,KNN)最簡(jiǎn)單思想:新數(shù)據(jù)點(diǎn)的預(yù)測(cè)結(jié)果由距離其最近的k個(gè)“鄰居”的信息決定。判斷x屬于哪個(gè)類別:找出距離x最近K個(gè)鄰居

看K個(gè)鄰居分別屬于哪個(gè)類別,最多的類別就是x的類別歐氏距離436.2.2k近鄰法|思想可見(jiàn),K值是影響KNN分類算法性能的一個(gè)關(guān)鍵因素446.2.2k近鄰法|KNN算法關(guān)鍵因素對(duì)K進(jìn)行枚舉(從較小的K開(kāi)始,不斷增加),通過(guò)交叉驗(yàn)證,最終找到一個(gè)的K值KNN分類算法的關(guān)鍵:K值、距離1.K:超參數(shù)456.2.2k近鄰法|KNN算法關(guān)鍵因素KNN分類算法的關(guān)鍵:K值、距離2.距離:超參數(shù)

466.2.2k近鄰法|k近鄰分類算法

輸入:已知類別訓(xùn)練集(X,y)數(shù)據(jù),待預(yù)測(cè)類別的新數(shù)據(jù)inX,近鄰個(gè)數(shù)k過(guò)程:選擇一種距離度量方法(如歐氏距離),計(jì)算訓(xùn)練集中的每個(gè)點(diǎn)與新數(shù)據(jù)點(diǎn)之間的距離;按距離遞增次序排序;確定前k個(gè)點(diǎn)所在類別的出現(xiàn)頻率返回前k個(gè)點(diǎn)出現(xiàn)頻率最高的類別,作為新數(shù)據(jù)點(diǎn)的預(yù)測(cè)類別。輸出:新數(shù)據(jù)的類別標(biāo)簽labelY默認(rèn)使用歐式距離,它在多數(shù)情況下效果都很好。47k近鄰分類器代碼新建:kNearest_Neighbor_Classifier.py功能:實(shí)現(xiàn)k近鄰分類器類kNNClassifier距離:歐氏距離存儲(chǔ)訓(xùn)練樣本例6.3編寫(xiě)k近鄰類48新建:kNearest_Neighbor_Classifier.py功能:實(shí)現(xiàn)k近鄰分類器類kNNClassifier距離:歐氏距離對(duì)每個(gè)測(cè)試樣本:

找它的k個(gè)近鄰訓(xùn)練樣本

預(yù)測(cè)這k個(gè)樣本的出現(xiàn)頻次最高的類標(biāo)49例6.4kNN鳶尾花分類例6.4kNN鳶尾花分類用例6.3編寫(xiě)的k近鄰類kNNClassifier,訓(xùn)練一個(gè)k為3的k近鄰分類器,計(jì)算該分類器的分類準(zhǔn)確率、混淆矩陣,輸出分類性能報(bào)告。50例6.4#1.讀iris.csv數(shù)據(jù)importpandasaspdiris=pd.read_csv(r'..\datasets\iris.csv')iris.head(3)#2.整理數(shù)據(jù)X=iris.drop('species',axis=1)#特征矩陣Xy=iris['species']#目標(biāo)數(shù)組yimportnumpyasnpX=np.array(X)#轉(zhuǎn)換為(n,d)的numpy數(shù)組y=np.array(y,np.newaxis)#轉(zhuǎn)換為(n,1)的numpy數(shù)組fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)#劃分?jǐn)?shù)據(jù)集51例6.4(續(xù))

#3.創(chuàng)建k=3的近鄰分類器,然后訓(xùn)練fromkNNimportkNNClassifier#導(dǎo)入自定義KNNClassifier類clf=kNNClassifier(3)#初始化k=3的近鄰分類器clf.train(X_train,y_train)#訓(xùn)練y_pred=clf.predict(X_test)#預(yù)測(cè)#4.評(píng)估模型性能fromsklearnimportmetricsscore=metrics.accuracy_score(y_test,y_pred)print('測(cè)試集上分類準(zhǔn)確率為:{:.4f}'.format(score))mat=metrics.confusion_matrix(y_test,y_pred)#計(jì)算混淆矩陣print("混淆矩陣:\n",mat)print("分類性能報(bào)告:")print(metrics.classification_report(y_test,y_pred))scikit-learn中的k近鄰分類評(píng)估器

sklearn.neighbors.KNeighborsClassifier(n_neighbors=k,p=2)主要參數(shù):n_neighbors:int,用來(lái)設(shè)置近鄰個(gè)數(shù)k,是超參數(shù),默認(rèn)為5。k=1,稱為最近鄰法。p:默認(rèn)值2,minkowski距離的冪次主要方法:

fit(X_train,y_train):用訓(xùn)練集數(shù)據(jù)訓(xùn)練模型。predict(X_new):預(yù)測(cè)新數(shù)據(jù)的類別。score(X_test,y_test):返回模型分類準(zhǔn)確度。

kneighbors(X,n_neighbors,return_distance):找X的k個(gè)近鄰,返回k近鄰的索引,及其與X的距離。若return_distance=False,則不返回距離,其默認(rèn)值為True。526.2.2k近鄰法|Sklearn中kNN分類評(píng)估器fromsklearn.neighborsimportKNeighborsClassifierknn=KNeigborsClassifier(n_neighbors=3)

例6.5一個(gè)簡(jiǎn)單的kNN分類器(1)生成帶標(biāo)簽的數(shù)據(jù)集(X,y),含100個(gè)樣本,每個(gè)樣本有2個(gè)特征,分屬2個(gè)類別。數(shù)據(jù)在中心點(diǎn)(-2,1)和(0,2)周圍呈高斯分布。

(2)試用sklearn.neighbors的KNeighborsClassifier,建一個(gè)k=5的kNN分類器,預(yù)測(cè)兩個(gè)新樣本(-1,3)和(-0.9,1.1)的類別,并評(píng)估預(yù)測(cè)的準(zhǔn)確率。53

6.2.2k近鄰法|例6.5一個(gè)簡(jiǎn)單的kNN分類器利用sklearn.datasets下的make_blobs函數(shù),生成各向同性的呈高斯分布的數(shù)據(jù)集。

make_blobs(n_samples=100,n_features=2,centers=None,cluster_std=1.0,random_state=None,…)參數(shù):n_samples:生成的樣本個(gè)數(shù),默認(rèn)100

n_features:每個(gè)樣本的特征個(gè)數(shù),默認(rèn)2centers:默認(rèn)值為None,生成的樣本中心個(gè)數(shù)或樣本中心位置cluster_std:聚類簇的標(biāo)準(zhǔn)差,默認(rèn)值為1.0random_state

隨機(jī)數(shù)種子,以便多次調(diào)用產(chǎn)生相同結(jié)果。返回值:X

:

[n_samples,n_features]

的數(shù)組,生成的樣本集。y

:

[n_samples]

的數(shù)組,樣本對(duì)應(yīng)的類標(biāo)簽數(shù)組。54

6.2.2k近鄰法|例6.4一個(gè)簡(jiǎn)單的kNN分類器|生成數(shù)據(jù)的方法55#100個(gè)樣本點(diǎn),2個(gè)特征。分布在centers參數(shù)所指定的2個(gè)中心點(diǎn)(-2,1)和(0,2)周圍。#分布的標(biāo)準(zhǔn)差cluster_std設(shè)為0.6。生成數(shù)據(jù)(特征矩陣)放在X中,其類別標(biāo)記存入y中。fromsklearn.datasetsimportmake_blobscenters=[(-2,1),(0,2)]X,y=make_blobs(n_samples=100,centers=centers,random_state=0,cluster_std=0.6)1.生成數(shù)據(jù)集#拆分?jǐn)?shù)據(jù)集fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,random_state=0)fromsklearn.neighborsimportKNeighborsClassifierclf=KNeighborsClassifier(n_neighbors=5)#初始化模型clf.fit(X_train,y_train)#訓(xùn)練模型2.模型初始化與訓(xùn)練3.對(duì)新數(shù)據(jù)點(diǎn)(-1,3)和(-0.9,1.1)進(jìn)行預(yù)測(cè)importnumpyasnpX_sample=np.array([[-1,3],[-0.9,1.1]])#輸入必須是二維數(shù)組y_sample=clf.predict(X_sample)neighbors=clf.kneighbors(X_sample,return_distance=False);#取出最近的5個(gè)點(diǎn)print("KNeighborsClassifier分類器預(yù)測(cè)結(jié)果:{}".format(y_sample))例6.456#把待預(yù)測(cè)的新數(shù)據(jù)以及和它最近的5個(gè)樣本點(diǎn)標(biāo)出來(lái)%matplotlibinlineimportmatplotlib.pyplotaspltplt.figure(figsize=(16,10),dpi=144)c0=[idxforidx,iteminenumerate(y_train)ifitem==0]#0類樣本索引集合c1=[idxforidx,iteminenumerate(y_train)ifitem==1]#1類樣本索引集合plt.scatter(X_train[c0,0],X_train[c0,1],marker='*',c='c',s=100,cmap='cool')#0類樣本點(diǎn),用藍(lán)綠色('c':cyan)星號(hào)繪制plt.scatter(X_train[c1,0],X_train[c1,1],marker='o',c='m',s=100,cmap='cool')#1類樣本點(diǎn),用洋紅色('m':magenta)圓點(diǎn)繪制c=np.array(centers)plt.scatter(c[:,0],c[:,1],s=100,marker='^',c='k')#中心點(diǎn),用黑色三角繪制color=['c','m']foridx,iteminenumerate(y_sample[:]):plt.scatter(X_sample[idx,0],X_sample[idx,1],marker="x",c=color[item],s=100)#待預(yù)測(cè)點(diǎn)foriinneighbors[0]:#第一個(gè)樣本到5個(gè)近鄰的連線

plt.plot([X_train[i][0],X_sample[0][0]],[X_train[i][1],X_sample[0][1]],'k--',linewidth=0.6)foriinneighbors[1]:#第二個(gè)樣本到5個(gè)近鄰的連線

plt.plot([X_train[i][0],X_sample[1][0]],[X_train[i][1],X_sample[1][1]],'k--',linewidth=0.6)4.畫(huà)出示意圖5.評(píng)估模型print("分類準(zhǔn)確率:{:.2f}".format(clf.score(X_test,y_test)))57

6.2.2k近鄰法|例6.4一個(gè)簡(jiǎn)單的kNN分類器(-1,3)的類別(-1,1)的類別預(yù)測(cè)精度k=5100.92k=3100.96圖1k=5時(shí)分類結(jié)果圖2k=3時(shí)分類結(jié)果(3)將近鄰數(shù)改為3,用同樣的訓(xùn)練集重新訓(xùn)練一個(gè)模型,預(yù)測(cè)同樣新數(shù)據(jù)的類別,并用同樣的測(cè)試集評(píng)估兩個(gè)模型的性能。超參數(shù)k:即近鄰個(gè)數(shù)k。當(dāng)k取不同值時(shí),分類結(jié)果會(huì)有顯著不同。實(shí)踐中,使用較小的k(如3或5)往往得到較好的結(jié)果,但需要調(diào)節(jié)這個(gè)參數(shù)。距離測(cè)度:采用不同的距離測(cè)度,找出的“近鄰”可能有顯著差別,從而也會(huì)導(dǎo)致分類結(jié)果有顯著不同。默認(rèn)使用歐式距離,它在多數(shù)情況下效果都很好。58

6.2.2k近鄰法|影響k近鄰分類的主要因素測(cè)試樣本在k=3時(shí)被判為類,k=5時(shí)被判為

類。

加權(quán)kNN:使用加權(quán)距離,對(duì)不同的鄰居指定不同的距離權(quán)重,距離越近權(quán)重越高。sklearn.neighbors中的KNeighborsClassifier參數(shù)weights設(shè)置為'distance'。

KNeighborsClassifier(n_neighbors=k,weights='distance')指定半徑的kNN:用指定半徑內(nèi)的點(diǎn)取代距離最近的k個(gè)點(diǎn)。當(dāng)數(shù)據(jù)采樣不均勻時(shí),該法可取得更好的性能。sklearn.neighbors中RadiusNeighborsClassifier評(píng)估器類

RadiusNeighborsClassifier(radius=1.0)596.2.2k近鄰法|kNN算法的改進(jìn)加權(quán)kNN,k=5時(shí)測(cè)試樣本被判為?類。目的:模型的比較要求:(1)給定糖尿病數(shù)據(jù)集,試比較K近鄰、加權(quán)K近鄰、指定半徑的K近鄰算法的分類性能。(2)選出性能最好的模型,訓(xùn)練并計(jì)算其性能評(píng)分,分析結(jié)果;通過(guò)學(xué)習(xí)曲線、數(shù)據(jù)可視化驗(yàn)證結(jié)論。60

6.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)

數(shù)據(jù)來(lái)源:

/uciml/pima-Indians-diabetes-database.數(shù)據(jù)簡(jiǎn)介:768個(gè)樣本,9列信息(8列是特征,Outcome列為類別標(biāo)簽,0表示沒(méi)有糖尿病(陰性),1表示由糖尿病(陽(yáng)性))。768個(gè)樣本中陰性樣本500例,陽(yáng)性樣本268例。8個(gè)特征及其涵義如下表所示:616.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)|數(shù)據(jù)下載PregnanciesGlucoseBloodPressureSkinThicknessInsulinBMIDiabetesPedigreeFunctionAge懷孕的次數(shù)血漿葡萄糖濃度舒張壓(毫米汞柱)肱三頭肌皮膚褶皺厚度(毫米)兩個(gè)小時(shí)血清胰島素(μU/毫升)身體質(zhì)量指數(shù),體重除以身高的平方糖尿病血統(tǒng)指數(shù),糖尿病和家庭遺傳相關(guān)。年齡Sklearn提供了內(nèi)置函數(shù)可獲取該數(shù)據(jù)集,sklearn.datasets.load_diabetes626.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)|Diabetes數(shù)據(jù)集的部分?jǐn)?shù)據(jù)數(shù)據(jù)準(zhǔn)備:處理數(shù)據(jù):把Outcome列分離出來(lái),作為類別標(biāo)簽存入y;其余8個(gè)特征值分離出來(lái),作為行數(shù)據(jù)存入X。劃分?jǐn)?shù)據(jù)集:用train_test_split(),把數(shù)據(jù)集(X,y)劃分為訓(xùn)練集(X_train,y_train)和測(cè)試集(X_test,y_test)。模型比較:待比較模型:KNN、帶權(quán)KNN、指定半徑的KNN分類器比較1:用訓(xùn)練集分別訓(xùn)練以上3個(gè)模型,并計(jì)算在測(cè)試集上的各自評(píng)分。比較2:采用交叉驗(yàn)證法(cross_val_score函數(shù)),計(jì)算各模型準(zhǔn)確性評(píng)分的平均值,以提高模型評(píng)價(jià)的準(zhǔn)確度。模型分析:選擇評(píng)分平均值最高的模型,再次用數(shù)據(jù)集訓(xùn)練該模型,計(jì)算評(píng)分,并分析結(jié)果。畫(huà)出學(xué)習(xí)曲線,證實(shí)結(jié)論。選擇與輸出值最相關(guān)的兩個(gè)特征,畫(huà)出數(shù)據(jù)分布圖,進(jìn)一步證實(shí)結(jié)論。636.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)|模型比較與分析關(guān)鍵代碼(1)#1.加載數(shù)據(jù),下載diabetes.csv存入當(dāng)前程序所在文件夾importpandasaspddata=pd.read_csv('diabetes.csv')#返回DataFrame類型的數(shù)據(jù)X=data.iloc[:,0:8]#將8個(gè)特征值分離出來(lái),存入Xy=data.iloc[:,8]#outcome列分離出來(lái)作為目標(biāo)值存入yfromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)#劃分?jǐn)?shù)據(jù)集#2.構(gòu)造3個(gè)模型fromsklearn.neighborsimportKNeighborsClassifier,RadiusNeighborsClassifiermodels=[]models.append(("KNN",KNeighborsClassifier(n_neighbors=3)))#k=3models.append(("KNNwithweights",KNeighborsClassifier(n_neighbors=3,weights="distance")))#權(quán)重算法:距離越近,權(quán)重越高models.append(("RadiusNeighbors",RadiusNeighborsClassifier(radius=500.0)))#模型半徑設(shè)為50064例6.6#3.分別訓(xùn)練3個(gè)模型,并計(jì)算模型評(píng)分(實(shí)現(xiàn)模型比較1)results=[]forname,modelinmodels:model.fit(X_train,y_train)results.append((name,model.score(X_test,y_test)))foriinrange(len(results)):print("name:{};score:{:.4f}".format(results[i][0],results[i][1]))#4.利用scikit-learn提供的cross_val_score(實(shí)現(xiàn)模型比較2)fromsklearn.model_selectionimportcross_val_scoreresults=[]forname,modelinmodels:cv_result=cross_val_score(model,X_train,y_train,cv=10)

#10折交叉驗(yàn)證results.append((name,cv_result))#3種模型,均得到10次評(píng)分foriinrange(len(results)):print("name:{};crossvalscore:{:.4f}".format(results[i][0],results[i][1].mean()))#求每種模型10次評(píng)分的平均值關(guān)鍵代碼(2)#5.選擇評(píng)分最高的KNN模型,訓(xùn)練并評(píng)估knn=KNeighborsClassifier(n_neighbors=3)#k=3knn.fit(X_train,y_train)train_score=knn.score(X_train,y_train)test_score=knn.score(X_test,y_test)print("trainscore:{:.4f};testscore:{:.4f}".format(train_score,test_score))完整代碼:例6knn預(yù)測(cè)糖尿病.ipynb關(guān)鍵代碼(3)分析:觀察學(xué)習(xí)曲線,訓(xùn)練樣本得分不高,且測(cè)試樣本與訓(xùn)練樣本距離較大。這是典型的欠擬合現(xiàn)象。KNN算法沒(méi)有更好的措施解決欠擬合問(wèn)題。由此可見(jiàn),KNN算法對(duì)該問(wèn)題不是一個(gè)好模型。(自定義了函數(shù)plot_learning_curve(),用于畫(huà)學(xué)習(xí)曲線。)676.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)|學(xué)習(xí)曲線68

6.2.2k近鄰法|驗(yàn)證曲線與學(xué)習(xí)曲線模型得分模型復(fù)雜度訓(xùn)練得分驗(yàn)證得分高偏差高方差最優(yōu)模型模型得分訓(xùn)練數(shù)據(jù)集規(guī)模訓(xùn)練得分驗(yàn)證得分高方差效果好驗(yàn)證曲線學(xué)習(xí)曲線影響模型效果的因素有兩個(gè):模型的復(fù)雜度和訓(xùn)練數(shù)據(jù)集的規(guī)模。分析:從圖可看出,在中間數(shù)據(jù)密集區(qū)域,陽(yáng)性樣本與陰性樣本幾乎重疊在一起?,F(xiàn)假設(shè)有一個(gè)待預(yù)測(cè)樣本在中間密集區(qū)域,那么它的陽(yáng)性近鄰多還是陰性近鄰多呢?很難確定??芍庇^地看到,KNN算法對(duì)這個(gè)糖尿病預(yù)測(cè)問(wèn)題無(wú)法到達(dá)很高的預(yù)測(cè)準(zhǔn)確性。696.2.2k近鄰法|例6.6kNN糖尿病預(yù)測(cè)|數(shù)據(jù)可視化結(jié)果KNN算法性能缺陷:KNN是一種懶惰算法,平時(shí)不好好學(xué)習(xí),考試(對(duì)測(cè)試樣本分類)時(shí)才臨陣磨槍(臨時(shí)去找k個(gè)近鄰)。懶惰的后果:構(gòu)造模型很簡(jiǎn)單,但在對(duì)測(cè)試樣本分類時(shí)的系統(tǒng)開(kāi)銷大,因?yàn)橐獟呙枞坑?xùn)練樣本并計(jì)算距離。該算法對(duì)有很多特征的數(shù)據(jù)集效果不好,對(duì)稀疏數(shù)據(jù)集效果尤其不好。706.2.2k近鄰法|KNN算法性能提升性能改進(jìn)716.2.2k近鄰法|特點(diǎn)KNN特點(diǎn):非參的、惰性的1.非參的:不會(huì)對(duì)數(shù)據(jù)做出任何的假設(shè),線性回歸假設(shè)數(shù)據(jù)是一條直線2.惰性有:沒(méi)有明確的訓(xùn)練數(shù)據(jù)的過(guò)程KNN算法優(yōu)點(diǎn):

簡(jiǎn)單易用

模型訓(xùn)練時(shí)間快對(duì)異常值不敏感KNN算法缺點(diǎn):存儲(chǔ)空間要求較高(存儲(chǔ)了所有訓(xùn)練數(shù)據(jù))預(yù)測(cè)階段可能很慢(計(jì)算與所有點(diǎn)的距離)72構(gòu)建kNN分類器的主要步驟:1.整理數(shù)據(jù),包括數(shù)據(jù)集拆分2.選擇模型類,初始化模型

fromsklearn.neighborsimportKNeighborsClassifierknn=KNeighborsClassifier(n_neighbors=k)

3.擬合數(shù)據(jù),knn.fit(X_train,y_train)4.評(píng)估模型,knn.score(X_test,y_test)cross_val_score(knn,X_train,y_train,cv=5)5.預(yù)測(cè)新數(shù)據(jù),knn.predict(X_new)小結(jié)6.2分類6.2.1引例鳶尾花分類6.2.2k近鄰6.2.3樸素貝葉斯分類器原理Scikit-learn中樸素貝葉斯分類器在文本分類上的應(yīng)用6.2.4支持向量機(jī)(SVM)6.2.5決策樹(shù)731.病人分類問(wèn)題6.2.3樸素貝葉斯分類器|原理已有六例病人:癥狀職業(yè)疾病(類標(biāo)簽)打噴嚏護(hù)士感冒打噴嚏農(nóng)夫過(guò)敏頭痛建筑工人腦震蕩頭痛建筑工人感冒打噴嚏教師感冒頭痛教師腦震蕩第七例病人:打噴嚏的建筑工人,患上感冒的概率有多大?離散特征貝葉斯定理:后驗(yàn)概率P(A|B)=P(B|A)P(A)/P(B)6.2.3樸素貝葉斯分類器|原理

樸素,獨(dú)立性假設(shè)???樸素貝葉斯分類的原理:6.2.3樸素貝葉斯分類器|原理

樸素貝葉斯分類器:2.性別分類6.2.3樸素貝葉斯分類器|原理性別身高(英尺)體重(磅)腳掌(英寸)男6

180

12

男5.92

190

11

男5.58

170

12

男5.92

165

10

女5

100

6

女5.5

150

8

女5.42

130

7

女5.75

150

9

問(wèn)題:某人身高6英尺、體重130磅,腳掌8英寸,男是女?難點(diǎn):身高、體重、腳掌都是連續(xù)特征,不能采用離散特征的方法計(jì)算概率。由于樣本太少,所以也無(wú)法分成區(qū)間計(jì)算。假定:正態(tài)分布,通過(guò)均值和方差得到正態(tài)分布的密度函數(shù),通過(guò)密度函數(shù)算出值不能離散化的連續(xù)特征2.性別分類6.2.3樸素貝葉斯分類器|原理假定:男性身高正態(tài)分布(均值5.855、方差0.035)男性的身高為6英尺,其概率約等于1.5789P(身高=6|男)xP(體重=130|男)xP(腳掌=8|男)xP(男)

=6.1984e-9P(身高=6|女)xP(體重=130|女)xP(腳掌=8|女)xP(女)

=5.3778e-4故,推測(cè)為女性。樸素貝葉斯分類器,基于貝葉斯判定準(zhǔn)則,其數(shù)學(xué)基礎(chǔ)是貝葉斯公式。796.2.3樸素貝葉斯分類器|原理

貝葉斯決策是使后驗(yàn)概率最大的決策,這樣的決策錯(cuò)誤率最小。806.2.3樸素貝葉斯分類器|原理|貝葉斯判定準(zhǔn)則

樸素貝葉斯分類器表達(dá)式816.2.3樸素貝葉斯分類|原理|概率估計(jì)

(1)(2)Scikit-learn中實(shí)現(xiàn)了三種樸素貝葉斯分類,根據(jù)對(duì)數(shù)據(jù)分布的不同假設(shè),分別為:高斯樸素貝葉斯,假設(shè)每個(gè)類標(biāo)簽的數(shù)據(jù)服從簡(jiǎn)單的高斯分布,輸入數(shù)據(jù)為連續(xù)數(shù)據(jù)。

sklearn.naive_bayes包中的GaussianNB評(píng)估器多項(xiàng)式樸素貝葉斯,假設(shè)每個(gè)類標(biāo)簽的數(shù)據(jù)由簡(jiǎn)單多項(xiàng)式分布生成的,輸入數(shù)據(jù)為計(jì)數(shù)數(shù)據(jù)(即每個(gè)特征代表某個(gè)對(duì)象的整數(shù)計(jì)數(shù),如一個(gè)單詞在句中出現(xiàn)的次數(shù))。sklearn.naive_bayes包中的MultinomialNB評(píng)估器伯努利樸素貝葉斯,假設(shè)每個(gè)類標(biāo)簽的數(shù)據(jù)服從伯努利分布,輸入數(shù)據(jù)為二分類數(shù)據(jù)。

sklearn.naive_bayes包中的BernoulliNB評(píng)估器說(shuō)明:GaussianNB主要用于連續(xù)的高維數(shù)據(jù);BernoulliNB和MultinomialNB主要稀疏計(jì)數(shù)數(shù)據(jù),如文本分類。MultinomialNB性能優(yōu)于BernoulliNB,特別是包含很多非零特征的數(shù)據(jù)集(即大型文檔)上。826.2.3樸素貝葉斯分類器|sklearn中的樸素貝葉斯文本數(shù)據(jù):自由格式的字符串?dāng)?shù)據(jù),由短語(yǔ)或句子組成。如聊天記錄和酒店評(píng)論、維基百科內(nèi)容等。這些集合包含的信息大多是由單詞組成的句子。語(yǔ)料庫(kù):在文本分析的語(yǔ)境下,數(shù)據(jù)集通常被稱為語(yǔ)料庫(kù)(corpus);文檔:每個(gè)由單個(gè)文本表示的數(shù)據(jù)點(diǎn)被稱為文檔(document)文本表示方法:將文本轉(zhuǎn)換成一組數(shù)值,以便用于機(jī)器學(xué)習(xí)。詞袋(bag-of-words):計(jì)算語(yǔ)料庫(kù)中每個(gè)單詞在每個(gè)文本中的出現(xiàn)頻次。最簡(jiǎn)單的方法。對(duì)于文檔語(yǔ)料庫(kù),計(jì)算詞袋表示包括三個(gè)步驟:分詞、構(gòu)建詞表、編碼。分詞(tokenization):將每個(gè)文檔劃分為出現(xiàn)在其中的單詞[稱為詞例(token)],如按空格和標(biāo)點(diǎn)劃分。構(gòu)建詞表(vocabularybuilding):收集一個(gè)詞表,里面包含出現(xiàn)在任意文檔中的所有單詞,并對(duì)它們進(jìn)行編號(hào)(比如按字母順序排序)。編碼(encoding):對(duì)于每個(gè)文檔,計(jì)算詞表中每個(gè)單詞在該文檔中的出現(xiàn)次數(shù)。sklearn.feature_extraction.text中的CountVectorizer類實(shí)現(xiàn)了詞袋表示

fromsklearn.feature_extraction.textimportCountVectorizer

CountVectorizer作用:將文本文檔集合轉(zhuǎn)換為詞例計(jì)數(shù)矩陣836.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|詞袋表示846.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|詞袋處理過(guò)程語(yǔ)料庫(kù)詞例計(jì)數(shù)矩陣‘problem

of

evil’[‘evil’,‘horizon’,‘of’,‘problem’,‘queen’][‘problem’,‘of’,‘evil’]Evilhorizonofproblemqueen[1,0,1,1,0]分詞器對(duì)所有文檔構(gòu)建一個(gè)詞表稀疏矩陣編碼圖1詞袋處理過(guò)程例6-5一個(gè)包含4個(gè)樣本的語(yǔ)料庫(kù),要求:(1)利用CountVectorizer進(jìn)行詞袋表示。856.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|例6-5文本表示(1)CountVectorizer的常用方法作用fit_transform(raw_documents)參數(shù):raw_documents語(yǔ)料庫(kù)返回值:X文檔-詞矩陣(n_samples,n_features)擬合語(yǔ)料庫(kù)數(shù)據(jù)并返回文檔-詞矩陣(即詞袋表示)get_feature_names()返回值:feature_names特征名稱列表從特征索引到特征名稱的數(shù)組映射。fromsklearn.feature_extraction.textimportCountVectorizervec=CountVectorizer()#實(shí)例化X=vec.fit_transform(corpus)#擬合語(yǔ)料庫(kù)數(shù)據(jù)并返回文檔-詞矩陣print(vec.get_feature_names())#返回特征名稱print(X.toarray())#將稀疏矩陣轉(zhuǎn)換為數(shù)組,輸出#表示為帶列標(biāo)簽的DataFrameimportpandasaspdpd.DataFrame(X.toarray(),columns=vec.get_feature_names())corpus=['thisisthefirstdocument','thisdocumentistheseconddocument','andthisisthethirdone','isthisthefirstdocument']詞袋表示的缺點(diǎn):會(huì)使一些常用詞權(quán)重過(guò)高。解決方法:TF-IDF(termfrequency-inversedocumentfrequency,詞頻-逆文檔頻率),通過(guò)單詞在文檔中出現(xiàn)的頻率來(lái)衡量其權(quán)重。對(duì)在某個(gè)特定文檔中經(jīng)常出現(xiàn)的術(shù)語(yǔ)給予很高的權(quán)重,但對(duì)在語(yǔ)料庫(kù)的許多文檔中都經(jīng)常出現(xiàn)的術(shù)語(yǔ)給予的權(quán)重卻不高。如果一個(gè)單詞在某個(gè)特定文檔中經(jīng)常出現(xiàn),但在許多文檔中卻不常出現(xiàn),那么這個(gè)單詞很可能是對(duì)文檔內(nèi)容的很好描述。Scikit-learn中的TfidfVecotorizer類和TfidfTransformer類實(shí)現(xiàn)了是TF-IDF方法。TfidfTransformer接受CountVectorizer生成的稀疏矩陣并將其變換。TfidfVecotorizer接受文本數(shù)據(jù)并完成詞袋特征提取與tf-idf變換。單詞w在文檔d中的tf-idf分?jǐn)?shù)計(jì)算公式如下:

866.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|TF-IDF表示

876.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|例6-5文本表示(2)例6-5一個(gè)包含4個(gè)樣本的語(yǔ)料庫(kù),要求:(2)利用TfidfVectorizer進(jìn)行tfidf表示。corpus=['thisisthefirstdocument','thisdocumentistheseconddocument','andthisisthethirdone','isthisthefirstdocument']例6-6文本分類對(duì)20個(gè)網(wǎng)絡(luò)新聞組語(yǔ)料庫(kù)(約20000篇新聞),以TF-IDF作為特征,用多項(xiàng)式樸素貝葉斯對(duì)該新聞組分類。886.2.3樸素貝葉斯分類器|在文本分類上的應(yīng)用|例6-6文本分類1.載入數(shù)據(jù)fromsklearn.datasetsimportfetch_20newsgroupsdata=fetch_20newsgroups()data.target_names#為簡(jiǎn)化演示過(guò)程,只選擇4類新聞,下載訓(xùn)練集和測(cè)試集:categories=['talk.religion.misc','soc.religion.christian','sci.space','comp.graphics']train=fetch_20newsgroups(subset='train',categories=categories)#加載指定類別的訓(xùn)練集test=fetch_20newsgroups(subset='test',categories=categories)2.TF-IDF特征向量化與多項(xiàng)式樸素貝葉斯組合成管道fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.naive_bayesimportMultinomialNBfromsklearn.pipelineimportmake_pipelinemodel=make_pipeline(TfidfVectorizer(),MultinomialNB())3.模型訓(xùn)練、預(yù)測(cè)model.fit(train.data,train.target)labels=model.predict(test.data)4.畫(huà)混淆矩陣fromsklearn.metricsimportconfusion_matriximportmatplotlib.pyplotaspltimportseabornassns;sns.set()mat=confusion_matrix(test.target,labels)sns.heatmap(mat,square=True,annot=True,fmt='d',cbar=False,xticklabels=train.target_names,yticklabels=train.target_names)plt.xlabel('truelabel')plt.ylabel('predictedlabel’)plt.show()8990fromsklearnimportmetricsprint('模型的準(zhǔn)確率為:\n',metrics.accuracy_score(test.target,labels))print('模型的評(píng)估報(bào)告:\n',metrics.classification_report(test.target,labels))5.模型性能評(píng)估6.對(duì)任意字符串進(jìn)行分類pred=model.predict(['sendingapayloadtotheISS'])train.target_names[pred[0]]91樸素貝葉斯特點(diǎn)和應(yīng)用場(chǎng)景特點(diǎn)訓(xùn)練和預(yù)測(cè)的速度快直接使用概率預(yù)測(cè),很容易解釋可調(diào)參數(shù)非常少應(yīng)用場(chǎng)景假設(shè)分布函數(shù)與數(shù)據(jù)匹配(實(shí)際中很少見(jiàn))各種類型的區(qū)分度很高,模型復(fù)雜度不重要非常高維度的數(shù)據(jù),模型復(fù)雜度不重要6.2分類6.2.1引例鳶尾花分類6.2.2k近鄰6.2.3樸素貝葉斯分類器6.2.4支持向量機(jī)最大間隔準(zhǔn)則核技巧scikit-learn中的SVM人臉識(shí)別上的應(yīng)用6.2.5決策樹(shù)92對(duì)有些數(shù)據(jù)集,能通過(guò)一直線、平面、超平面,將兩類樣本清晰分開(kāi)。這樣的數(shù)據(jù)集被稱為是線性可分的。這樣的分類器是線性分類器。936.2.4支持向量機(jī)|引子

0問(wèn):此圖中將兩類樣本分開(kāi)的分類線有多條,哪一個(gè)好呢?答:選擇“正中間”,因?yàn)檫@條分類線離兩類樣本最遠(yuǎn)。

問(wèn)題轉(zhuǎn)化為找到正中間的那條線946.2.4支持向量機(jī)|引子

|最優(yōu)超平面

0最優(yōu)超平面(optimalhyperplane)與兩類中最靠近的樣本點(diǎn)的距離同時(shí)達(dá)到最大的超平面,稱為“最優(yōu)分類超平面”(簡(jiǎn)稱“最優(yōu)超平面”)間隔(margin)兩類樣本中離分類面最近的樣本到分類面的距離稱作分類間隔(簡(jiǎn)稱“間隔”)。最優(yōu)超平面是具有最大間隔的超平面。

最優(yōu)超平面怎樣才能找到最優(yōu)分類超平面?支持向量機(jī)(SupportVectorMachine,SVM)是基于最優(yōu)化技術(shù),求解最優(yōu)超平面,將兩種不同類別的樣本分開(kāi)的方法。956.2.4支持向量機(jī)|思想6.2.4支持向量機(jī)|支持向量0支持向量間隔邊界最優(yōu)超平面間隔邊界間隔支持向量(SupportVector)兩類中與最優(yōu)超平面最靠近的樣本,稱為支持向量,穿過(guò)支持向量與最優(yōu)超平面平行的兩個(gè)超平面(虛線所示),稱為間隔邊界。

尋找最優(yōu)超平面,即尋找間隔最大的超平面。支持向量是用來(lái)確定間隔的樣本,通常是那些最難被分類,卻能給分類器提供最多信息的樣本。6.2.4支持向量機(jī)|最大間隔準(zhǔn)則

兩分類問(wèn)題

有些數(shù)據(jù)集,在原空間中找不到一個(gè)超平面劃分各類,而適當(dāng)?shù)赜成涞礁呔S空間后,則能找到一個(gè)超平面將不同類別的數(shù)據(jù)分開(kāi)。6.2.4支持向量機(jī)|核技巧原空間變換變換后的特征空間

SVM核函數(shù)6.2.4支持向量機(jī)|核技巧

3維向量變換成9維向量6.2.4支持向量機(jī)|核技巧6.2.4支持向量機(jī)|核技巧

多項(xiàng)式核函數(shù)6.2.4支持向量機(jī)|核技巧K(x,y)=<f(x),f(y)>

如果有一個(gè)函數(shù)K,得到與<f(x),f(y)>相同的結(jié)果,而無(wú)需計(jì)算f(x)和f(y),則稱K為核函數(shù)。有些數(shù)據(jù)集不是線性可分的,即使采用核技巧也不能完全分開(kāi),如存在離群點(diǎn)(outlier,也稱異常值)。6.2.4支持向量機(jī)|軟間隔最大化

支持向量機(jī)既可用于分類,又可用于回歸。sklearn.svm模塊給出了多個(gè)SVM算法實(shí)現(xiàn),包括:分類算法:SVC,LinearSVC,NuSVC均適用于多類問(wèn)題.回歸算法:SVR,LinearSVR,NuSVR1046.2.4支持向量機(jī)|scik

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論