旗下產(chǎn)業(yè): A產(chǎn)業(yè)/?A實習(xí)/?A計劃
全國統(tǒng)一咨詢熱線:010-5367 2995
首頁 > 熱門文章 > 大數(shù)據(jù)分析 > 大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫

時間:2020-09-09來源:mwtacok.cn點擊量:作者:Sissi
時間:2020-09-09點擊量:作者:Sissi



  Scikit-learn是一個免費的Python機器學(xué)習(xí)庫。它具有多種算法,例如支持向量機,隨機森林和k鄰域,并且還支持Python數(shù)值和科學(xué)庫,例如NumPy和SciPy。
 

  在大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫中,我們將學(xué)習(xí)scikit-learn庫的幫助,學(xué)習(xí)如何對python進行編碼和應(yīng)用機器學(xué)習(xí),該庫的創(chuàng)建是為了使使用Python進行機器學(xué)習(xí)更輕松,更強大。
 

  為此,我們將使用IBM Watson存儲庫中的Sales_Win_Loss數(shù)據(jù)集。我們將用pandas導(dǎo)入的數(shù)據(jù)集,用pandas的方法,如探索數(shù)據(jù)head(),tail(),dtypes(),然后試試我們的手在利用繪圖技術(shù),Seaborn可視化我們的數(shù)據(jù)。
 

  然后,我們將深入研究scikit-learn,并preprocessing.LabelEncoder()在scikit-learn中使用它來處理數(shù)據(jù),并將train_test_split()數(shù)據(jù)集拆分為測試樣本和訓(xùn)練樣本。我們還將使用備忘單來幫助我們決定對數(shù)據(jù)集使用哪種算法。最后,我們將使用accuracy_score()scikit-learn庫提供的方法,使用三種不同的算法(樸素貝葉斯,LinearSVC,K-Neighbors分類器)進行預(yù)測并比較其性能。我們還將使用scikit-learn和Yellowbrick可視化來可視化不同模型的性能得分。
 

  為了從大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫中獲得最大收益,您可能已經(jīng)對以下內(nèi)容感到滿意:
 

  1)pandas基礎(chǔ)

  2)Seaborn和Matplotlib基礎(chǔ)
 

  如果您需要復(fù)習(xí)這些主題,請查看這些pandas和數(shù)據(jù)可視化博客文章。
 

  數(shù)據(jù)集
 

  對于大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫,我們將使用IBM Watson網(wǎng)站上可用的Sales-Win-Loss數(shù)據(jù)集。該數(shù)據(jù)集包含汽車零件批發(fā)供應(yīng)商的銷售活動數(shù)據(jù)。
 

  我們將使用scikit-learn建立一個預(yù)測模型,以告訴我們哪些銷售活動將導(dǎo)致虧損,哪些將導(dǎo)致獲勝。
 

  讓我們從導(dǎo)入數(shù)據(jù)集開始。
 

  導(dǎo)入數(shù)據(jù)集
 

  首先,我們將導(dǎo)入pandas模塊,并使用一個變量url來存儲要從中下載數(shù)據(jù)集的url。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  接下來,我們將使用read_csv()pandas模塊提供的方法來讀取csv包含逗號分隔值的文件,并將其轉(zhuǎn)換為pandas DataFrame。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  上面的代碼片段返回一個變量sales_data,該變量現(xiàn)在存儲在數(shù)據(jù)幀中。
 

  對于那些不pd.read_csv()熟悉pandas的人,上面的代碼中的方法將創(chuàng)建一個稱為a的表格數(shù)據(jù)結(jié)構(gòu)Dataframe,其中第一列包含唯一標記數(shù)據(jù)的每一行的索引,第一行包含每一列的標簽/名稱。這是從數(shù)據(jù)集中保留的原始列名。sales_data上面的代碼片段中的變量將具有類似于下圖所示的結(jié)構(gòu)。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上圖中,row0,row1,row2是數(shù)據(jù)集中每個記錄的索引,而col0,col1,col2等是數(shù)據(jù)集中每個列(功能)的列名。
 

  現(xiàn)在,我們已經(jīng)從數(shù)據(jù)源下載了數(shù)據(jù)集并將其轉(zhuǎn)換為pandas數(shù)據(jù)框,現(xiàn)在讓我們顯示該數(shù)據(jù)框的一些記錄。為此,我們將使用該head()方法。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  從上面的顯示中可以看出,該head()方法向我們顯示了數(shù)據(jù)集中的前幾條記錄。該head()方法是pandas提供的一種非常漂亮的工具,可幫助我們了解數(shù)據(jù)集的內(nèi)容。head()在下一節(jié)中,我們將詳細討論該方法。
 

  數(shù)據(jù)探索
 

  現(xiàn)在,我們已經(jīng)下載了數(shù)據(jù)集并將其轉(zhuǎn)換為pandas數(shù)據(jù)框,讓我們快速瀏覽數(shù)據(jù),看看數(shù)據(jù)可以告訴我們什么故事,以便我們計劃行動方案。
 

  在任何數(shù)據(jù)科學(xué)或機器學(xué)習(xí)項目中,數(shù)據(jù)探索都是非常重要的一步。即使快速瀏覽數(shù)據(jù)集也可以為我們提供否則可能會丟失的重要信息,并且該信息可以提出重要問題,我們可以嘗試通過項目來回答。
 

  為了探索數(shù)據(jù)集,我們將使用一些第三方Python庫來幫助我們處理數(shù)據(jù),以便可以與scikit-learn的強大算法有效地結(jié)合使用。但是我們可以從上head()一節(jié)中使用的相同方法開始,以查看導(dǎo)入的數(shù)據(jù)集的前幾條記錄,因為head()實際上它的功能遠遠超過此!我們可以自定義head()方法以僅顯示特定數(shù)量的記錄:
 

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上面的代碼段中,我們在head()方法內(nèi)部使用了一個參數(shù),僅顯示數(shù)據(jù)集中的前兩個記錄。參數(shù)中的整數(shù)“ 2” n=2實際上表示數(shù)據(jù)index幀的第二個Sales_data。使用此工具,我們可以快速了解必須處理的數(shù)據(jù)類型。例如,我們可以看到諸如“ Supplies Group”和“ Region”的列包含字符串?dāng)?shù)據(jù),而諸如Opportunity Result,Opportunity Number等的列則包含整數(shù)。此外,我們可以看到“機會編號”列包含每條記錄的唯一標識符。
 

  現(xiàn)在我們已經(jīng)查看了數(shù)據(jù)框的初始記錄,讓我們嘗試查看數(shù)據(jù)集中的最后幾條記錄??梢允褂胻ail()方法來完成此操作,該方法的語法與該head()方法相似。讓我們看看該tail()方法可以做什么:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  tail()上面的代碼片段中的方法向我們返回了數(shù)據(jù)幀中的最后幾條記錄sales_data。我們也可以將參數(shù)傳遞給該tail()方法,以僅從數(shù)據(jù)框中查看有限數(shù)量的記錄:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  現(xiàn)在,我們只能查看數(shù)據(jù)框中的最后兩個記錄,如方法n=2內(nèi)的參數(shù)所示tail()。與該head()方法類似,該方法的參數(shù)n=2中的整數(shù)“ 2” tail()指向數(shù)據(jù)集中最后兩個記錄中的第二個索引sales_data。
 

  這最后兩個記錄告訴我們什么故事?從數(shù)據(jù)框中查看預(yù)告片記錄的“機會編號”列,對于我們來說很明顯,總共有78,024條記錄可用。從該tail()方法顯示的記錄的“索引”編號可以明顯看出這一點。
 

  現(xiàn)在,如果我們能夠看到此數(shù)據(jù)集中可用的不同數(shù)據(jù)類型,那就太好了;如果以后需要進行一些轉(zhuǎn)換,此信息會很方便。我們可以使用dtypes()pandas中的方法來做到這一點:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  正如我們在上面的代碼片段中看到的那樣,使用該dtypes方法,我們可以列出Dataframe中可用的不同列以及它們各自的數(shù)據(jù)類型。例如,我們可以看到“耗材子組”列是object數(shù)據(jù)類型,“按收入劃分的客戶規(guī)模”列是integer數(shù)據(jù)類型。因此,現(xiàn)在我們知道哪些列中包含整數(shù),哪些列中包含字符串?dāng)?shù)據(jù)。
 

  數(shù)據(jù)可視化
 

  現(xiàn)在,我們已經(jīng)完成了一些基本的數(shù)據(jù)探索,讓我們嘗試創(chuàng)建一些漂亮的圖來直觀地表示數(shù)據(jù)并發(fā)現(xiàn)隱藏在數(shù)據(jù)集中的更多故事。
 

  有許多python庫提供用于進行數(shù)據(jù)可視化的功能。一個這樣的庫是Seaborn。要使用Seaborn繪圖,我們應(yīng)該確保已下載并安裝了該python模塊。
 

  讓我們設(shè)置使用Seaborn模塊的代碼:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  現(xiàn)在我們已經(jīng)完成了Seaborn的設(shè)置,讓我們更深入地了解我們所做的事情。
 

  首先,我們導(dǎo)入了Seaborn模塊和matplotlib模塊。set()下一行的方法有助于為繪圖設(shè)置不同的屬性,例如“樣式”,“顏色”等。使用sns.set(style="whitegrid", color_codes=True)代碼段將繪圖的背景設(shè)置為淺色。然后,使用sns.set(rc={'figure.figsize':(11.7,8.27)})代碼段設(shè)置地塊大小,該代碼段將地塊圖形大小定義為11.7px和8.27px。
 

  接下來,我們使用創(chuàng)建圖sns.countplot('Route To Market',data=sales_data,hue = 'Opportunity Result')。該countplot()方法可幫助我們創(chuàng)建一個計數(shù)圖,并公開了幾個參數(shù)以根據(jù)需要定制計數(shù)圖。在此,在方法的第一個參數(shù)中countplot(),我們將X軸定義為數(shù)據(jù)集中的“通往市場的路線”列。第二個參數(shù)是數(shù)據(jù)源,在這種情況下,它是sales_data我們在大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫第一部分中創(chuàng)建的數(shù)據(jù)框。第三個參數(shù)是條形圖的顏色,在數(shù)據(jù)框的“機會結(jié)果”列中,我們將其分配為標簽“獲勝”的標簽為“藍色”,為標簽為“損失”的標簽分配為“綠色” sales_data。
 

  有關(guān)Seaborn計價器的更多詳細信息,請參見此處。
 

  那么,計數(shù)圖告訴我們有關(guān)數(shù)據(jù)的信息是什么?第一件事是,數(shù)據(jù)集具有“虧損”類型的記錄多于“獲勝”類型的記錄,從條形圖的大小可以看出。查看x軸和x軸上每個標簽的對應(yīng)條形,我們可以看到數(shù)據(jù)集中的大多數(shù)數(shù)據(jù)都集中在圖的左側(cè):朝向“現(xiàn)場銷售”和“經(jīng)銷商”類別。要注意的另一件事是,“現(xiàn)場銷售”類別的損失比“經(jīng)銷商”類別的損失更大。
 

  我們選擇了“市場路線”列,因為它在我們初步研究head()and tail()方法的輸出后似乎會提供有用的信息。但是其他區(qū)域(例如“區(qū)域”,“供應(yīng)組”等)也可以用于以相同方式繪制圖。
 

  現(xiàn)在我們已經(jīng)對整體數(shù)據(jù)有了一個很好的可視化,讓我們看看在其他Seaborn繪圖的幫助下可以挖掘出更多的信息。另一個流行的選擇是violinplots,因此讓我們創(chuàng)建一個小提琴圖,看看該圖風(fēng)格可以告訴我們什么。
 

  我們將使用violinplot()Seaborn模塊提供的方法來創(chuàng)建小提琴圖。首先,導(dǎo)入seaborn模塊并使用該set()方法來自定義繪圖的大小。我們將看到圖的大小為16.7px x 13.27px:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  接下來,我們將使用該violinplot()方法創(chuàng)建小提琴圖,然后使用show()方法來顯示該圖–

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫

 

  現(xiàn)在,我們的情節(jié)已經(jīng)創(chuàng)建,讓我們看看它告訴我們什么。小提琴圖以最簡單的形式顯示標簽上數(shù)據(jù)的分布。在上面的圖中,我們在x軸上有標簽“獲勝”和“虧損”,在y軸上有“按收入劃分的客戶規(guī)模”的值。小提琴圖顯示出最大的數(shù)據(jù)分布是在客戶端大小“ 1”中,其余的客戶端大小標簽中的數(shù)據(jù)較少。
 

  該小提琴圖使我們對數(shù)據(jù)的分布方式,哪些特征和標簽具有最大的數(shù)據(jù)集中度具有非常有價值的洞察力,但是在小提琴圖的情況下,所見之處不止于此。您可以通過該模塊的官方文檔更深入地了解小提琴圖的其他用途Seaborn
 

  預(yù)處理數(shù)據(jù)
 

  既然我們對數(shù)據(jù)的外觀有了很好的了解,我們就可以開始準備使用scikit-learn構(gòu)建預(yù)測模型了。


  在最初的探索中,我們看到數(shù)據(jù)集中的大多數(shù)列都是字符串,但是scikit-learn中的算法僅理解數(shù)字數(shù)據(jù)。幸運的是,scikit-learn庫為我們提供了許多將字符串?dāng)?shù)據(jù)轉(zhuǎn)換為數(shù)字數(shù)據(jù)的方法。一種這樣的方法是該LabelEncoder()方法。我們將使用此方法將數(shù)據(jù)集中的分類標簽(例如“贏”和“損失”)轉(zhuǎn)換為數(shù)字標簽。為了可視化我們試圖通過該LabelEncoder()方法實現(xiàn)的目標,讓我們考慮下圖。
 

  下圖表示一個數(shù)據(jù)框,該數(shù)據(jù)框具有一個名為“ color”的列和三個記錄“ Red”,“ Green”和“ Blue”的記錄。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  由于scikit-learn中的機器學(xué)習(xí)算法僅理解數(shù)字輸入,因此我們希望將“紅色”,“綠色”和“藍色”等類別標簽轉(zhuǎn)換為數(shù)字標簽。在原始數(shù)據(jù)幀中完成分類標簽的轉(zhuǎn)換后,我們將得到以下內(nèi)容:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  現(xiàn)在,讓我們開始實際的轉(zhuǎn)換過程。我們將使用fit_transform()提供的方法LabelEncoder()對分類框中的標簽進行編碼,例如sales_data數(shù)據(jù)框中的“通往市場的路線”,然后將它們轉(zhuǎn)換為數(shù)字標簽,類似于上圖所示。該fit_transform()函數(shù)將用戶定義的標簽作為輸入,然后返回編碼的標簽。讓我們通過一個簡單的示例來了解編碼是如何完成的。在下面的代碼示例中,我們有一個城市列表,即["paris", "paris", "tokyo", "amsterdam"],我們將嘗試將這些字符串標簽編碼為類似于–的內(nèi)容[2, 2, 1,3]。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  瞧!我們已經(jīng)成功地將字符串標簽轉(zhuǎn)換為數(shù)字標簽。我們怎么做到的?首先,我們導(dǎo)入了preprocessing提供該LabelEncoder()方法的模塊。然后,我們創(chuàng)建了一個代表LabelEncoder()類型的對象。接下來,我們使用該對象的fit_transform()函數(shù)來區(qū)分列表的不同唯一類,["paris", "paris", "tokyo", "amsterdam"]然后返回帶有相應(yīng)編碼值(即)的列表[1 1 2 0]。
 

  請注意,該LabelEncoder()方法如何按照原始列表中類的第一個字母的順序?qū)?shù)值分配給類:“(a)msterdam”獲得的編碼為“ 0”,“(p)aris獲得的編碼為1” ”和“(t)okyo”的編碼為2。
 

  在LabelEncoder()各種編碼要求下,它們提供了許多方便的功能。我們在這里不需要它們,但是要了解更多信息,一個不錯的起點是scikit-learn的官方頁面,其中LabelEncoder()詳細描述了及其相關(guān)功能。
 

  由于我們現(xiàn)在對LabelEncoder()工作原理有了一個很好的了解,因此可以繼續(xù)使用此方法對sales_data數(shù)據(jù)幀中的分類標簽進行編碼,并將其轉(zhuǎn)換為數(shù)字標簽。在對數(shù)據(jù)集進行初步探索的前幾節(jié)中,我們看到以下各列包含字符串值:“供應(yīng)子組”,“區(qū)域”,“進入市場的路線”,“機會結(jié)果”,“競爭對手類型”和“供應(yīng)”組'。在開始編碼這些字符串標簽之前,讓我們快速看一下這些列包含的不同標簽:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  現(xiàn)在,我們從sales_data數(shù)據(jù)框中布置了不同的分類列,并在每個列下布置了唯一的類。現(xiàn)在,是時候?qū)⑦@些字符串編碼為數(shù)字標簽了。為此,我們將運行以下代碼,然后深入研究其工作原理:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  那我們剛才做了什么?首先,我們導(dǎo)入了preprocessing提供該LabelEncoder()方法的模塊。然后,我們創(chuàng)建le了類型的對象labelEncoder()。在接下來的兩行中,我們使用了fit_transform()提供的功能,LabelEncoder()并將不同列(例如“供應(yīng)子組”,“區(qū)域”,“進入市場的路線”)的分類標簽轉(zhuǎn)換為數(shù)字標簽。為此,我們成功地將所有分類(字符串)列轉(zhuǎn)換為數(shù)值。
 

  現(xiàn)在我們已經(jīng)準備好數(shù)據(jù)并進行了轉(zhuǎn)換,幾乎可以將其用于構(gòu)建我們的預(yù)測模型了。但是我們?nèi)匀恍枰鲆患P(guān)鍵的事情:
 

  訓(xùn)練集和測試集
 

  需要在一組數(shù)據(jù)上訓(xùn)練機器學(xué)習(xí)算法,以學(xué)習(xí)不同特征之間的關(guān)系以及這些特征如何影響目標變量。為此,我們需要將整個數(shù)據(jù)集分為兩組。一個是訓(xùn)練集,我們將在該訓(xùn)練集上訓(xùn)練算法以構(gòu)建模型。另一個是測試集,我們將在該測試集上測試模型以查看其預(yù)測的準確性。
 

  但是在進行所有拆分之前,我們先將功能和目標變量分開。和大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫之前一樣,我們將首先運行以下代碼,然后仔細查看其功能:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  好,那我們剛才做了什么?首先,我們不需要“機會編號”列,因為它只是每條記錄的唯一標識符。另外,我們要預(yù)測“機會結(jié)果”,因此它應(yīng)該是我們的“目標”而不是“數(shù)據(jù)”的一部分。因此,在上述代碼的第一行中,我們僅選擇了與“商機編號”和“商機結(jié)果”不匹配的列,并將它們分配給了變量cols。接下來,我們data使用list中的列創(chuàng)建了一個新的數(shù)據(jù)框cols。這將用作我們的功能集。然后,我們從數(shù)據(jù)框中獲取“機會結(jié)果”列,sales_data并創(chuàng)建了一個新的數(shù)據(jù)框target。
 

  而已!我們已經(jīng)準備好定義我們的功能并將目標定為兩個單獨的數(shù)據(jù)框。下一步,我們將分dataframes data并target投入到訓(xùn)練集和測試集。拆分數(shù)據(jù)集時,我們將保留30%的數(shù)據(jù)作為測試數(shù)據(jù),其余70%作為訓(xùn)練數(shù)據(jù)。但是請記住,這些數(shù)字是任意的,最佳分割取決于您使用的特定數(shù)據(jù)。如果您不確定如何拆分數(shù)據(jù),則將80%的數(shù)據(jù)保留為訓(xùn)練數(shù)據(jù),而將其余20%的數(shù)據(jù)用作測試數(shù)據(jù)的80/20原則是不錯的默認選擇。但是,對于大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫,我們將堅持我們先前的決定,即保留30%的數(shù)據(jù)作為測試數(shù)據(jù)。的train_test_split()在方法scikit學(xué)習(xí)可用于分割數(shù)據(jù):

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  這樣,我們現(xiàn)在已經(jīng)成功地準備了測試集和培訓(xùn)集。在上面的代碼中,我們首先導(dǎo)入了train_test_split模塊。接下來,我們使用該train_test_split()方法將數(shù)據(jù)分為訓(xùn)練集(data_train,target_train)和測試集(data_test,data_train)。方法的第一個參數(shù)train_test_split()是我們在上一節(jié)中分離出的功能,第二個參數(shù)是target('Opportunity Result')。第三個參數(shù)'test_size'是我們想作為訓(xùn)練數(shù)據(jù)分開的數(shù)據(jù)的百分比。在我們的例子中是30%,盡管可以是任何數(shù)字。第四個參數(shù)“ random_state”僅確保我們每次都能獲得可重復(fù)的結(jié)果。
 

  現(xiàn)在,我們已經(jīng)準備就緒,這是大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫最重要,最有趣的部分:使用scikit-learn提供的龐大算法庫構(gòu)建預(yù)測模型。
 

  建立模型
 

  scikit Learn的網(wǎng)站上有machine_learning_map可用的內(nèi)容,可供我們在選擇算法時用作快速參考??雌饋硐襁@樣:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  我們可以將此地圖用作備忘單,以列出可以嘗試構(gòu)建預(yù)測模型的算法。使用清單,讓我們看看我們屬于哪一類:
 

  1)超過50個樣本–檢查

  2)我們要預(yù)測類別嗎?

  3)我們已經(jīng)標記了數(shù)據(jù)?(帶有明確名稱的數(shù)據(jù),例如機會金額等)–檢查

  4)少于10萬個樣本–檢查
 

  基于上面準備的清單,我們machine_learning_map可以嘗試以下提到的算法。
 

  1)樸素貝葉斯

  2)線性SVC

  3)K鄰居分類器
 

  scikit-learn庫的真正優(yōu)點在于,它公開了適用于不同算法的高級API,這使我們更容易嘗試不同的算法并比較模型的準確性,從而確定最適合我們的數(shù)據(jù)集的方法。
 

  讓我們開始嘗試一種不同的算法。
 

  樸素貝葉斯
 

  Scikit-learn提供了一組分類算法,這些分類算法“天真”地假設(shè)在數(shù)據(jù)集中每對特征都是獨立的。這個假設(shè)是貝葉斯定理的基本原理?;诖嗽淼乃惴ǚQ為樸素貝葉斯算法。
 

  在非常高的水平上,樸素貝葉斯算法會計算特征與目標變量的連接概率,然后選擇概率最高的特征。讓我們嘗試通過一個非常簡單的問題陳述來理解這一點:今天會下雨嗎?假設(shè)我們擁有一組天氣數(shù)據(jù),這將成為我們的特征集,而“降雨”的概率將成為我們的目標。基于此功能集,我們可以創(chuàng)建一個表以向我們顯示特定功能/目標對的出現(xiàn)次數(shù)。它看起來像這樣:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上方的表格(列)中,“天氣”包含標簽(“部分多云”和“多云”),“雨”列包含與“天氣”特征一致的降雨發(fā)生(是/否)。每當(dāng)某個功能與下雨同時發(fā)生時,會記錄為“是”,而當(dāng)該功能沒有導(dǎo)致下雨時,則會記錄為“否”?,F(xiàn)在,我們可以使用出現(xiàn)表中的數(shù)據(jù)來創(chuàng)建另一個表,稱為“頻率表”,在該表中,我們可以記錄每個功能所涉及的“是”和“否”答案的數(shù)量:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  最后,我們結(jié)合來自“出現(xiàn)表”和“頻率表”的數(shù)據(jù),并創(chuàng)建一個“可能性表”。下表列出了每個功能部件的“是”和“否”的數(shù)量,然后使用此數(shù)據(jù)來計算每個功能部件對降雨的影響概率:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  請注意上表中的“個體概率”列。我們從“出現(xiàn)表”和“似然表”中出現(xiàn)了6次“部分多云”和“多云”特征,很明顯,特征“部分多云”有4次出現(xiàn)(對于“否”為2次,對于“部分多云”為2次。 '是')。當(dāng)我們將特定特征的“否”和“是”的出現(xiàn)次數(shù)除以“出現(xiàn)表”的“總數(shù)”時,我們就可以得出該特定特征的概率。在我們的案例中,如果我們需要找出哪個要素最有可能促成降雨的發(fā)生,那么我們將每個要素的“否”總數(shù)取為“”,然后將其加到“頻率表”,然后將總和除以“合計表”中的“總計”。
 

  我們將用于銷售數(shù)據(jù)的算法是Gaussian Naive Bayes,它基于與上面剛剛探討的天氣示例類似的概念,盡管在數(shù)學(xué)上要復(fù)雜得多。對于那些想深入研究的人,可以在這里找到“樸素貝葉斯”算法的更詳細說明。
 

  現(xiàn)在,讓我們實現(xiàn)GaussianNBscikit-learn 的高斯樸素貝葉斯或算法來創(chuàng)建我們的預(yù)測模型:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  現(xiàn)在,讓我們仔細看看我們所做的。首先,我們導(dǎo)入了GaussianNB方法和accuracy_score方法。然后,我們創(chuàng)建gnb了類型的對象GaussianNB。此后,我們使用該fit()方法對測試數(shù)據(jù)(data_train)和測試目標(target_train)進行了算法訓(xùn)練,然后使用該方法預(yù)測了測試數(shù)據(jù)中的目標predict()。最后,我們使用該accuracy_score()方法打印了分數(shù),并以此成功地將Naive-Bayes算法應(yīng)用到了預(yù)測模型中。
 

  現(xiàn)在,讓我們看看列表中的其他算法與Naive-Bayes算法相比的性能如何。
 

  線性SVC
 

  LinearSVC或線性支持向量分類是SVM(支持向量機)類的子類。我們不會涉及這類算法中的數(shù)學(xué)的復(fù)雜性,但是在最基本的層次上,LinearSVC會嘗試將數(shù)據(jù)劃分為不同的平面,以便可以找到不同類別的最佳分組。為了清楚地了解這個概念,讓我們想象一下“點”和“正方形”的數(shù)據(jù)集沿兩個軸分為二維空間,如下圖所示:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上面的圖像中,一種LinearSVC實現(xiàn)方式嘗試以這種方式劃分二維空間,以使兩類數(shù)據(jù)(即dots和)squares被清晰地劃分。在這里,這兩行直觀地表示了LinearSVC試圖實現(xiàn)以區(qū)分出兩個可用類的各種劃分。
 

  對于那些想了解更多細節(jié)的人,Support Vector Machine(SVM)可以在這里找到一篇很好的解釋a的文章,但是現(xiàn)在,讓我們深入研究一下,讓我們變得骯臟:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  與在實施GaussianNB期間所做的類似,我們在前兩行中導(dǎo)入了所需的模塊。然后,我們創(chuàng)建了svc_model類型為LinearSVC 的對象,其中random_state為'0'。堅持,稍等!什么是“ random_state”?簡單地說,random_state是對內(nèi)置隨機數(shù)生成器的一條指令,以特定順序?qū)?shù)據(jù)進行隨機排序。
 

  接下來,我們在訓(xùn)練數(shù)據(jù)上訓(xùn)練了LinearSVC,然后使用測試數(shù)據(jù)預(yù)測了目標。最后,我們使用該accuracy_score()方法檢查了準確性得分。
 

  現(xiàn)在我們已經(jīng)嘗試了GaussianNB和LinearSVC算法,我們將嘗試列表中的最后一個算法,那就是K-nearest neighbours classifier
 

  K鄰居分類器
 

  與我們之前使用的兩種算法相比,該分類器稍微復(fù)雜一些。就大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫而言,最好使用KNeighborsClassifierscikit-learn提供的類,而不必擔(dān)心算法的工作原理。(但是,如果您有興趣,可以在此處找到有關(guān)此類算法的非常詳細的說明)
 

  現(xiàn)在,讓我們實現(xiàn)K-Neighbors分類器并查看其得分:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  可以像前面的實現(xiàn)一樣解釋上面的代碼。首先,我們導(dǎo)入了必要的模塊,然后創(chuàng)建了neighKNeighborsClassifier類型的對象,其鄰居數(shù)為n_neighbors=3。然后,我們使用該fit()方法在訓(xùn)練集上訓(xùn)練算法,然后在測試數(shù)據(jù)上測試了模型。最后,我們打印出準確性得分。
 

  現(xiàn)在我們已經(jīng)實現(xiàn)了列表中的所有算法,我們可以簡單地比較所有模型的得分以選擇得分最高的模型。但是,如果我們有一種視覺上比較不同模型性能的方法,那會不會很好?我們可以yellowbrick在scikit-learn中使用該庫,該庫提供了直觀地表示不同評分方法的方法。
 

  性能比較
 

  在前面的部分中,我們使用了該accuracy_score()方法來測量不同算法的準確性?,F(xiàn)在,我們將使用庫ClassificationReport提供的類為我們提供有關(guān)Yellowbrick模型性能的直觀報告。
 

  高斯NB
 

  讓我們從GaussianNB模型開始:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上面的代碼中,首先我們導(dǎo)入模塊ClassificationReport提供的類yellowbrick.classifier。接下來,創(chuàng)建visualizer該類型的對象ClassificationReport。這里的第一個參數(shù)是在實現(xiàn)“樸素貝葉斯”部分中的算法時創(chuàng)建的GaussianNB對象。第二個參數(shù)包含數(shù)據(jù)框“機會結(jié)果”列中的標簽“獲勝”和“損失” 。gnbNaive-Bayessales_data
 

  接下來,我們使用該fit()方法來訓(xùn)練visualizer對象。接下來是該score()方法,該方法使用gnb對象根據(jù)GaussianNB算法執(zhí)行預(yù)測,然后計算該算法做出的預(yù)測的準確性得分。最后,我們使用該poof()方法為GaussianNB算法繪制不同分數(shù)的圖。請注意,如何分別對“ Won”和“ Loss”標簽布置不同的分數(shù);這使我們能夠可視化不同目標類別的分數(shù)。
 

  線性SVC
 

  與我們在上一節(jié)中所做的類似,我們還可以繪制LinearSVC算法的準確性得分:

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  在上面的代碼中,首先我們導(dǎo)入ClassificationReport了yellowbrick.classifier模塊提供的類。接下來,創(chuàng)建一個visualizer類型的對象ClassificationReport。這里的第一個參數(shù)是LinearSVCobject svc_model,它是LinearSVC在“ LinearSVC”部分中實現(xiàn)算法時創(chuàng)建的。第二個參數(shù)包含sales_data數(shù)據(jù)框“機會結(jié)果”列中的標簽“獲勝”和“損失” 。
 

  接下來,我們使用該fit()方法來訓(xùn)練“ svc_model”對象。接下來是score()一種方法,該方法使用svc_model對象根據(jù)LinearSVC算法進行預(yù)測,然后計算由該算法得出的預(yù)測的準確性得分。最后,我們使用該poof()方法為LinearSVC算法繪制了不同分數(shù)的圖。
 

  KNeighborsClassifier
 

  現(xiàn)在,讓我們對K鄰居分類器分數(shù)做同樣的事情。

大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫
 

  再一次,我們首先導(dǎo)入模塊ClassificationReport提供的類yellowbrick.classifier。接下來,創(chuàng)建visualizer該類型的對象ClassificationReport。這里的第一個參數(shù)是KNeighborsClassifierobject neigh,它是在實現(xiàn)KNeighborsClassifier“ KNeighborsClassifier”部分中的算法時創(chuàng)建的。第二個參數(shù)包含sales_data數(shù)據(jù)框“機會結(jié)果”列中的標簽“獲勝”和“損失” 。
 

  接下來,我們使用該fit()方法訓(xùn)練“鄰居”對象。接下來是score()一種方法,該方法使用neigh對象根據(jù)KNeighborsClassifier算法進行預(yù)測,然后計算由該算法得出的預(yù)測的準確性得分。最后,我們使用該poof()方法為KNeighborsClassifier算法繪制了不同分數(shù)的圖。
 

  現(xiàn)在我們已經(jīng)可視化了結(jié)果,現(xiàn)在我們可以輕松比較分數(shù)并選擇最能滿足我們需求的算法。
 

  結(jié)論
 

  scikit-learn庫提供了許多不同的算法,這些算法可以導(dǎo)入到代碼中,然后用于構(gòu)建模型,就像我們導(dǎo)入其他任何Python庫一樣。這使快速構(gòu)建不同模型并比較這些模型以選擇得分最高的模型變得更加容易。
 

  在大數(shù)據(jù)分析Python中Scikit-learn機器學(xué)習(xí)庫中,我們僅介紹了scikit-learn庫所能提供的功能。為了最大程度地使用此機器學(xué)習(xí)庫,scikit-learn的官方頁面上提供了許多資源,并提供了詳細的文檔供您參考。scikit-learn的快速入門指南可以在這里找到,對于剛開始探索機器學(xué)習(xí)世界的初學(xué)者來說,這是一個很好的切入點。
 

  但是要真正欣賞scikit-learn庫的真正功能,您真正需要做的是開始在不同的開放數(shù)據(jù)集上使用它,并使用這些數(shù)據(jù)集建立預(yù)測模型。開放數(shù)據(jù)集的來源包括Kaggle和Data.world。兩者都包含許多有趣的數(shù)據(jù)集,可以使用scikit-learn庫提供的算法在這些數(shù)據(jù)集上練習(xí)構(gòu)建預(yù)測模型。



 

預(yù)約申請免費試聽課

填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!

?2007-2021/北京漫動者教育科技有限公司版權(quán)所有
備案號:京ICP備12034770號

?2007-2022/ mwtacok.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc

京公網(wǎng)安備 11010802035704號

網(wǎng)站地圖