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

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

時(shí)間:2020-09-09來(lái)源:5wd995.cn點(diǎn)擊量:作者:Sissi
時(shí)間:2020-09-09點(diǎn)擊量:作者:Sissi



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

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

  為此,我們將使用IBM Watson存儲(chǔ)庫(kù)中的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中使用它來(lái)處理數(shù)據(jù),并將train_test_split()數(shù)據(jù)集拆分為測(cè)試樣本和訓(xùn)練樣本。我們還將使用備忘單來(lái)幫助我們決定對(duì)數(shù)據(jù)集使用哪種算法。最后,我們將使用accuracy_score()scikit-learn庫(kù)提供的方法,使用三種不同的算法(樸素貝葉斯,LinearSVC,K-Neighbors分類器)進(jìn)行預(yù)測(cè)并比較其性能。我們還將使用scikit-learn和Yellowbrick可視化來(lái)可視化不同模型的性能得分。
 

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

  1)pandas基礎(chǔ)

  2)Seaborn和Matplotlib基礎(chǔ)
 

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

  數(shù)據(jù)集
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  這最后兩個(gè)記錄告訴我們什么故事?從數(shù)據(jù)框中查看預(yù)告片記錄的“機(jī)會(huì)編號(hào)”列,對(duì)于我們來(lái)說(shuō)很明顯,總共有78,024條記錄可用。從該tail()方法顯示的記錄的“索引”編號(hào)可以明顯看出這一點(diǎn)。
 

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

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

  正如我們?cè)谏厦娴拇a片段中看到的那樣,使用該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)建一些漂亮的圖來(lái)直觀地表示數(shù)據(jù)并發(fā)現(xiàn)隱藏在數(shù)據(jù)集中的更多故事。
 

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

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

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

  現(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。
 

  接下來(lái),我們使用創(chuàng)建圖sns.countplot('Route To Market',data=sales_data,hue = 'Opportunity Result')。該countplot()方法可幫助我們創(chuàng)建一個(gè)計(jì)數(shù)圖,并公開(kāi)了幾個(gè)參數(shù)以根據(jù)需要定制計(jì)數(shù)圖。在此,在方法的第一個(gè)參數(shù)中countplot(),我們將X軸定義為數(shù)據(jù)集中的“通往市場(chǎng)的路線”列。第二個(gè)參數(shù)是數(shù)據(jù)源,在這種情況下,它是sales_data我們?cè)?a href="http://5wd995.cn/data/2663.html" target="_blank">大數(shù)據(jù)分析Python中Scikit-learn機(jī)器學(xué)習(xí)庫(kù)第一部分中創(chuàng)建的數(shù)據(jù)框。第三個(gè)參數(shù)是條形圖的顏色,在數(shù)據(jù)框的“機(jī)會(huì)結(jié)果”列中,我們將其分配為標(biāo)簽“獲勝”的標(biāo)簽為“藍(lán)色”,為標(biāo)簽為“損失”的標(biāo)簽分配為“綠色” sales_data。
 

  有關(guān)Seaborn計(jì)價(jià)器的更多詳細(xì)信息,請(qǐng)參見(jiàn)此處。
 

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

  我們選擇了“市場(chǎng)路線”列,因?yàn)樗谖覀兂醪窖芯縣ead()and tail()方法的輸出后似乎會(huì)提供有用的信息。但是其他區(qū)域(例如“區(qū)域”,“供應(yīng)組”等)也可以用于以相同方式繪制圖。
 

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

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

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

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

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

 

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  建立模型
 

  scikit Learn的網(wǎng)站上有machine_learning_map可用的內(nèi)容,可供我們?cè)谶x擇算法時(shí)用作快速參考??雌饋?lái)像這樣:

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

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

  1)超過(guò)50個(gè)樣本–檢查

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

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

  4)少于10萬(wàn)個(gè)樣本–檢查
 

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

  1)樸素貝葉斯

  2)線性SVC

  3)K鄰居分類器
 

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

  讓我們開(kāi)始嘗試一種不同的算法。
 

  樸素貝葉斯
 

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

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

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

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

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

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

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

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

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

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

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

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

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

  線性SVC
 

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

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

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

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

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

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

  接下來(lái),我們?cè)谟?xùn)練數(shù)據(jù)上訓(xùn)練了LinearSVC,然后使用測(cè)試數(shù)據(jù)預(yù)測(cè)了目標(biāo)。最后,我們使用該accuracy_score()方法檢查了準(zhǔn)確性得分。
 

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

  K鄰居分類器
 

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

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

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

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

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

  性能比較
 

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

  高斯NB
 

  讓我們從GaussianNB模型開(kāi)始:

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

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

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

  線性SVC
 

  與我們?cè)谏弦还?jié)中所做的類似,我們還可以繪制LinearSVC算法的準(zhǔn)確性得分:

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

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

  接下來(lái),我們使用該fit()方法來(lái)訓(xùn)練“ svc_model”對(duì)象。接下來(lái)是score()一種方法,該方法使用svc_model對(duì)象根據(jù)LinearSVC算法進(jìn)行預(yù)測(cè),然后計(jì)算由該算法得出的預(yù)測(cè)的準(zhǔn)確性得分。最后,我們使用該poof()方法為L(zhǎng)inearSVC算法繪制了不同分?jǐn)?shù)的圖。
 

  KNeighborsClassifier
 

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

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

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

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

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

  結(jié)論
 

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

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

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



 

預(yù)約申請(qǐng)免費(fèi)試聽(tīng)課

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

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

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

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

網(wǎng)站地圖