99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀python數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門實(shí)戰(zhàn)
python數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門實(shí)戰(zhàn)
2020-04-20
收藏
Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

作者 | 韋瑋

來源 | Python愛好者社區(qū)

本文包含了五個(gè)知識(shí)點(diǎn):

1. 數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)技術(shù)簡介

2. Python數(shù)據(jù)預(yù)處理實(shí)戰(zhàn)

3. 常見分類算法介紹

4. 對(duì)鳶尾花進(jìn)行分類案例實(shí)戰(zhàn)

5. 分類算法的選擇思路與技巧

一、數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)技術(shù)簡介

什么是數(shù)據(jù)挖掘?數(shù)據(jù)挖掘指的是對(duì)現(xiàn)有的一些數(shù)據(jù)進(jìn)行相應(yīng)的處理和分析,最終得到數(shù)據(jù)與數(shù)據(jù)之間深層次關(guān)系的一種技術(shù)。例如在對(duì)超市貨品進(jìn)行擺放時(shí),牛奶到底是和面包擺放在一起銷量更高,還是和其他商品擺在一起銷量更高。數(shù)據(jù)挖掘技術(shù)就可以用于解決這類問題。具體來說,超市的貨品擺放問題可以劃分為關(guān)聯(lián)分析類場景。

在日常生活中,數(shù)據(jù)挖掘技術(shù)應(yīng)用的非常廣泛。例如對(duì)于商戶而言,常常需要對(duì)其客戶的等級(jí)(svip、vip、普通客戶等)進(jìn)行劃分,這時(shí)候可以將一部分客戶數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),另一部分客戶數(shù)據(jù)作為測試數(shù)據(jù)。然后將訓(xùn)練數(shù)據(jù)輸入到模型中進(jìn)行訓(xùn)練,在訓(xùn)練完成后,輸入另一部分?jǐn)?shù)據(jù)進(jìn)行測試,最終實(shí)現(xiàn)客戶等級(jí)的自動(dòng)劃分。其他類似的應(yīng)用例子還有驗(yàn)證碼識(shí)別、水果品質(zhì)自動(dòng)篩選等。

那么機(jī)器學(xué)習(xí)技術(shù)又是什么呢?一言以蔽之,凡是讓機(jī)器通過我們所建立的模型和算法對(duì)數(shù)據(jù)之間的關(guān)系或者規(guī)則進(jìn)行學(xué)習(xí),最后供我們利用的技術(shù)都是機(jī)器學(xué)習(xí)技術(shù)。其實(shí)機(jī)器學(xué)習(xí)技術(shù)是一個(gè)交叉的學(xué)科,它可以大致分為兩類:傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)與深度學(xué)習(xí)技術(shù),其中深度學(xué)習(xí)技術(shù)包含了神經(jīng)網(wǎng)絡(luò)相關(guān)技術(shù)。在本次課程中,著重講解的是傳統(tǒng)的機(jī)器學(xué)習(xí)技術(shù)及各種算法。

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

由于機(jī)器學(xué)習(xí)技術(shù)和數(shù)據(jù)挖掘技術(shù)都是對(duì)數(shù)據(jù)之間的規(guī)律進(jìn)行探索,所以人們通常將兩者放在一起提及。而這兩種技術(shù)在現(xiàn)實(shí)生活中也有著非常廣闊的應(yīng)用場景,其中經(jīng)典的幾類應(yīng)用場景如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

1、分類:對(duì)客戶等級(jí)進(jìn)行劃分、驗(yàn)證碼識(shí)別、水果品質(zhì)自動(dòng)篩選等

機(jī)器學(xué)習(xí)數(shù)據(jù)挖掘技術(shù)可以用于解決分類問題,如對(duì)客戶等級(jí)進(jìn)行劃分、驗(yàn)證碼識(shí)別、水果品質(zhì)自動(dòng)篩選等。

以驗(yàn)證碼識(shí)別為例,現(xiàn)需要設(shè)計(jì)一種方案,用以識(shí)別由0到9的手寫體數(shù)字組成的驗(yàn)證碼。有一種解決思路是,先將一些出現(xiàn)的0到9的手寫體數(shù)字劃分為訓(xùn)練集,然后人工的對(duì)這個(gè)訓(xùn)練集進(jìn)行劃分,即將各個(gè)手寫體映射到其對(duì)應(yīng)的數(shù)字類別下面,在建立了這些映射關(guān)系之后,就可以通過分類算法建立相應(yīng)的模型。這時(shí)候如果出現(xiàn)了一個(gè)新的數(shù)字手寫體,該模型可以對(duì)該手寫體代表的數(shù)字進(jìn)行預(yù)測,即它到底屬于哪個(gè)數(shù)字類別。例如該模型預(yù)測某手寫體屬于數(shù)字1的這個(gè)類別,就可以將該手寫體自動(dòng)識(shí)別為數(shù)字1。所以驗(yàn)證碼識(shí)別問題實(shí)質(zhì)上就是一個(gè)分類問題。

水果品質(zhì)的自動(dòng)篩選問題也是一個(gè)分類問題。水果的大小、顏色等特征也可以映射到對(duì)應(yīng)的甜度類別下面,例如1這個(gè)類別可以代表甜,0這個(gè)類別代表不甜。在獲得一些訓(xùn)練集的數(shù)據(jù)之后,同樣可以通過分類算法建立模型,這時(shí)候如果出現(xiàn)一個(gè)新的水果,就可以通過它的大小、顏色等特征來自動(dòng)的判斷它到底是甜的還是不甜的。這樣就實(shí)現(xiàn)了水果品質(zhì)的自動(dòng)篩選。

2、回歸:對(duì)連續(xù)型數(shù)據(jù)進(jìn)行預(yù)測、趨勢預(yù)測等

除了分類之外,數(shù)據(jù)挖掘技術(shù)和機(jī)器學(xué)習(xí)技術(shù)還有一個(gè)非常經(jīng)典的場景——回歸。在前文提到的分類的場景,其類別的數(shù)量都有一定的限制。比如數(shù)字驗(yàn)證碼識(shí)別場景中,包含了0到9的數(shù)字類別;再比如字母驗(yàn)證碼識(shí)別場景中,包含了a到z的有限的類別。無論是數(shù)字類別還是字母類別,其類別數(shù)量都是有限的。

現(xiàn)在假設(shè)存在一些數(shù)據(jù),在對(duì)其進(jìn)行映射后,最好的結(jié)果沒有落在某個(gè)0、1或者2的點(diǎn)上,而是連續(xù)的落在1.2、1.3、1.4...上面。而分類算法就無法解決這類問題,這時(shí)候就可以采用回歸分析算法進(jìn)行解決。在實(shí)際的應(yīng)用中,回歸分析算法可以實(shí)現(xiàn)對(duì)連續(xù)型數(shù)據(jù)進(jìn)行預(yù)測和趨勢預(yù)測等。

3、聚類:客戶價(jià)值預(yù)測、商圈預(yù)測等

什么是聚類?在上文中提過,要想解決分類問題,必須要有歷史數(shù)據(jù)(即人為建立的正確的訓(xùn)練數(shù)據(jù))。倘若沒有歷史數(shù)據(jù),而需要直接將某對(duì)象的特征劃分到其對(duì)應(yīng)的類別,分類算法和回歸算法無法解決這個(gè)問題。這種時(shí)候有一種解決辦法——聚類,聚類方法直接根據(jù)對(duì)象特征劃分出對(duì)應(yīng)的類別,它是不需要經(jīng)過訓(xùn)練的,所以它是一種非監(jiān)督的學(xué)習(xí)方法。

在什么時(shí)候能用到聚類?假如數(shù)據(jù)庫中有一群客戶的特征數(shù)據(jù),現(xiàn)在需要根據(jù)這些客戶的特征直接劃分出客戶的級(jí)別(如SVIP客戶、VIP客戶),這時(shí)候就可以使用聚類的模型去解決。另外在預(yù)測商圈的時(shí)候,也可以使用聚類的算法。

4、關(guān)聯(lián)分析:超市貨品擺放、個(gè)性化推薦等

關(guān)聯(lián)分析是指對(duì)物品之間的關(guān)聯(lián)性進(jìn)行分析。例如,某超市內(nèi)存放有大量的貨品,現(xiàn)在需要分析出這些貨品之間的關(guān)聯(lián)性,如面包商品與牛奶商品之間的關(guān)聯(lián)性的強(qiáng)弱程度,這時(shí)候可以采用關(guān)聯(lián)分析算法,借助于用戶的購買記錄等信息,直接分析出這些商品之間的關(guān)聯(lián)性。在了解了這些商品的關(guān)聯(lián)性之后,就可以將之應(yīng)用于超市的商品擺放,通過將關(guān)聯(lián)性強(qiáng)的商品放在相近的位置上,可以有效提升該超市的商品銷量。

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

此外,關(guān)聯(lián)分析還可以用于個(gè)性化推薦技術(shù)。比如,借助于用戶的瀏覽記錄,分析各個(gè)網(wǎng)頁之間存在的關(guān)聯(lián)性,在用戶瀏覽網(wǎng)頁時(shí),可以向其推送強(qiáng)關(guān)聯(lián)的網(wǎng)頁。例如,在分析了瀏覽記錄數(shù)據(jù)后,發(fā)現(xiàn)網(wǎng)頁A與網(wǎng)頁C之間有很強(qiáng)的關(guān)聯(lián)關(guān)系,那么在某個(gè)用戶瀏覽網(wǎng)頁A時(shí),可以向他推送網(wǎng)頁C,這樣就實(shí)現(xiàn)了個(gè)性化推薦。

5、自然語言處理:文本相似度技術(shù)、聊天機(jī)器人等

除了上述的應(yīng)用場景之外,數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)技術(shù)也可以用于自然語言處理和語音處理等等。例如對(duì)文本相似度的計(jì)算和聊天機(jī)器人。

二、Python數(shù)據(jù)預(yù)處理實(shí)戰(zhàn)

在進(jìn)行數(shù)據(jù)挖掘機(jī)器學(xué)習(xí)之前,首先要做的一步是對(duì)已有數(shù)據(jù)進(jìn)行預(yù)處理。倘若連初始數(shù)據(jù)都是不正確的,那么就無法保證最后的結(jié)果的正確性。只有對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,保證其準(zhǔn)確性,才能保證最后結(jié)果的正確性。

數(shù)據(jù)預(yù)處理指的是對(duì)數(shù)據(jù)進(jìn)行初步處理,把臟數(shù)據(jù)(即影響結(jié)果準(zhǔn)確率的數(shù)據(jù))處理掉,否則很容易影響最終的結(jié)果。常見的數(shù)據(jù)預(yù)處理方法如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

1、缺失值處理

缺失值是指在一組數(shù)據(jù)中,某行數(shù)據(jù)缺失的某個(gè)特征值。解決缺失值有兩種方法,一是將該缺失值所在的這行數(shù)據(jù)刪除掉,二是將這個(gè)缺失值補(bǔ)充一個(gè)正確的值。

2、異常值處理

異常值產(chǎn)生的原因往往是數(shù)據(jù)在采集時(shí)發(fā)生了錯(cuò)誤,如在采集數(shù)字68時(shí)發(fā)生了錯(cuò)誤,誤將其采集成680。在處理異常值之前,自然需要先發(fā)現(xiàn)這些異常值數(shù)據(jù),往往可以借助畫圖的方法來發(fā)現(xiàn)這些異常值數(shù)據(jù)。在對(duì)異常值數(shù)據(jù)處理完成之后,原始數(shù)據(jù)才會(huì)趨于正確,才能保證最終結(jié)果的準(zhǔn)確性。

3、數(shù)據(jù)集成

相較于上文的缺失值處理異常值處理,數(shù)據(jù)集成是一種較為簡單的數(shù)據(jù)預(yù)處理方式。那么數(shù)據(jù)集成是什么?假設(shè)存在兩組結(jié)構(gòu)一樣的數(shù)據(jù)A和數(shù)據(jù)B,且兩組數(shù)據(jù)都已加載進(jìn)入內(nèi)存,這時(shí)候如果用戶想將這兩組數(shù)據(jù)合并為一組數(shù)據(jù),可以直接使用Pandas對(duì)其進(jìn)行合并,而這個(gè)合并的過程實(shí)際上就是數(shù)據(jù)的集成。

接下來以淘寶商品數(shù)據(jù)為例,介紹一下上文預(yù)處理的實(shí)戰(zhàn)。

在進(jìn)行數(shù)據(jù)預(yù)處理之前,首先需要從MySQL數(shù)據(jù)庫中導(dǎo)入淘寶商品數(shù)據(jù)。在開啟MySQL數(shù)據(jù)庫之后,對(duì)其中的taob表進(jìn)行查詢,得到了如下的輸出:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

可以看到,taob表中有四個(gè)字段。其中title字段用于存儲(chǔ)淘寶商品的名稱;link字段存儲(chǔ)淘寶商品的鏈接;price存儲(chǔ)淘寶商品的價(jià)格;comment存儲(chǔ)淘寶商品的評(píng)論數(shù)(一定程度上代表商品的銷量)。

那么接下來如何將這些數(shù)據(jù)導(dǎo)入進(jìn)來?首先通過pymysql連接數(shù)據(jù)庫(如果出現(xiàn)亂碼,則對(duì)pymysql的源碼進(jìn)行修改),連接成功后,將taob中的數(shù)據(jù)全部檢索出來,然后借助pandas中的read_sql()方法便可以將數(shù)據(jù)導(dǎo)入到內(nèi)存中。

read_sql()方法有兩個(gè)參數(shù),第一個(gè)參數(shù)是sql語句,第二個(gè)參數(shù)是MySQL數(shù)據(jù)庫的連接信息。具體代碼如下圖:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

1、缺失值處理實(shí)戰(zhàn)

對(duì)缺失值進(jìn)行處理可以采用數(shù)據(jù)清洗的方式。以上面的淘寶商品數(shù)據(jù)為例,某件商品的評(píng)論數(shù)可能為0,但是它的價(jià)格卻不可能為0。然而實(shí)際上在數(shù)據(jù)庫內(nèi)存在一些price值為0的數(shù)據(jù),之所以會(huì)出現(xiàn)這種情況,是因?yàn)閷?duì)部分?jǐn)?shù)據(jù)的價(jià)格屬性沒有爬到。

那么如何才能判斷出這些數(shù)據(jù)出現(xiàn)了缺失值呢?可以通過以下的方法來進(jìn)行判別:

首先對(duì)于之前的taob表調(diào)用data.describe()方法,會(huì)出現(xiàn)如下圖所示的結(jié)果:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

如何看懂這個(gè)統(tǒng)計(jì)結(jié)果?第一步要注意觀察price和comment字段的count數(shù)據(jù),如果兩者不相等,說明一定有信息缺失;如果兩者相等,則暫時(shí)無法看出是否有缺失情況。例如price的count為9616.0000,而comment的count為9615.0000,說明評(píng)論數(shù)據(jù)至少缺失了一條。

其他各個(gè)字段的含義分別為:mean代表平均數(shù);std代表標(biāo)準(zhǔn)差;min代表最小值;max代表最大值。

那么如何對(duì)這些缺失數(shù)據(jù)進(jìn)行處理?一種方法是刪掉這些數(shù)據(jù),還有一種方法是在缺失值處插入一個(gè)新值。第二種方法中的值可以是平均數(shù)或者中位數(shù),而具體使用平均數(shù)還是中位數(shù)需要根據(jù)實(shí)際情況來決定。例如年齡這個(gè)數(shù)據(jù)(1到100歲),這類平穩(wěn)、變化的級(jí)差不大的數(shù)據(jù),一般插入平均數(shù),而變化的間隔比較大的數(shù)據(jù),一般插入中位數(shù)。

處理價(jià)格的缺失值的具體操作如下:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

2、異常值處理實(shí)戰(zhàn)

跟缺失值的處理過程類似,想要處理異常值,首先要發(fā)現(xiàn)異常值。而異常值的發(fā)現(xiàn)往往是通過畫散點(diǎn)圖的方法,因?yàn)橄嗨频臄?shù)據(jù)會(huì)在散點(diǎn)圖中集中分布到一塊區(qū)域,而異常的數(shù)據(jù)會(huì)分布到遠(yuǎn)離這塊區(qū)域的地方。根據(jù)這個(gè)性質(zhì),可以很方便的找到數(shù)據(jù)中的異常值。具體操作如下圖:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

首先需要從數(shù)據(jù)中抽出價(jià)格數(shù)據(jù)和評(píng)論數(shù)據(jù)。通常的做法可以借助循環(huán)去抽取,但是這種方法太復(fù)雜,有一種簡單的方法是這個(gè)數(shù)據(jù)框進(jìn)行轉(zhuǎn)置,這時(shí)候原先的列數(shù)據(jù)就變成了現(xiàn)在的行數(shù)據(jù),可以很方便的獲取價(jià)格數(shù)據(jù)和評(píng)論數(shù)據(jù)。接下來通過plot()方法繪制散點(diǎn)圖,plot()方法第一個(gè)參數(shù)代表橫坐標(biāo),第二個(gè)參數(shù)代表縱坐標(biāo),第三個(gè)參數(shù)代表圖的類型,”o”代表散點(diǎn)圖。最后通過show()方法將其展現(xiàn)出來,這樣就可以直觀的觀測到離群點(diǎn)。這些離群點(diǎn)對(duì)數(shù)據(jù)的分析沒有幫助,在實(shí)際操作中往往需要將這些離群點(diǎn)代表的數(shù)據(jù)刪除或者轉(zhuǎn)成正常的值。下圖是繪制的散點(diǎn)圖

根據(jù)上圖所示,將評(píng)論大于100000,價(jià)格大于1000的數(shù)據(jù)都處理掉,就可以達(dá)到處理異常值的效果。而具體的兩種處理方法的實(shí)現(xiàn)過程如下:

第一種是改值法,將其改為中位數(shù)、平均數(shù)或者其他的值。具體操作如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

第二種是刪除處理法,即直接刪除這些異常數(shù)據(jù),也是推薦使用的一種方法。具體操作如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

3、分布分析

分布分析是指對(duì)數(shù)據(jù)的分布狀態(tài)進(jìn)行分析,即觀察其是線性分布還是正態(tài)分布。一般采用畫直方圖的方式來進(jìn)行分布分析。直方圖的繪制有以下幾個(gè)步驟:計(jì)算極差、計(jì)算組距和繪制直方圖。具體的操作如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

其中,借助arrange()方法來制定樣式,arrange()方法第一個(gè)參數(shù)代表最小值,第二個(gè)參數(shù)代表最大值,第三個(gè)參數(shù)代表組距,接下來使用hist()方法來繪制直方圖

taob表中的淘寶商品價(jià)格直方圖如下圖所示,大致上符合正態(tài)分布

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

taob表中的淘寶商品評(píng)論直方圖如下圖所示,大致上是遞減的曲線:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

4、詞云圖的繪制

有的時(shí)候常常需要根據(jù)一段文本信息來進(jìn)行詞云圖的繪制,繪制的具體操作如下圖:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

實(shí)現(xiàn)的大致流程是:先使用cut()對(duì)文檔進(jìn)行切詞,在切詞完成之后,將這些詞語整理為固定格式,然后根據(jù)所需的詞云圖的展現(xiàn)形式讀取相應(yīng)的圖片(下圖中的詞云圖是貓的形狀),接著使用wc.WordCloud()進(jìn)行詞云圖的轉(zhuǎn)換,最后通過imshow()展現(xiàn)出相應(yīng)的詞云圖。例如根據(jù)老九門.txt文檔繪制的詞云圖效果如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

三、常見分類算法介紹

常見的分類算法有很多,如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

其中KNN算法和貝葉斯算法都是較為重要的算法,除此之外還有其他的一些算法,如決策樹算法、邏輯回歸算法和SVM算法。Adaboost算法主要是用于弱分類算法改造成強(qiáng)分類算法。

四、對(duì)鳶尾花進(jìn)行分類案例實(shí)戰(zhàn)

假如現(xiàn)有一些鳶尾花的數(shù)據(jù),這些數(shù)據(jù)包含了鳶尾花的一些特征,如花瓣長度、花瓣寬度、花萼長度和花萼寬度這四個(gè)特征。有了這些歷史數(shù)據(jù)之后,可以利用這些數(shù)據(jù)進(jìn)行分類模型的訓(xùn)練,在模型訓(xùn)練完成后,當(dāng)新出現(xiàn)一朵不知類型的鳶尾花時(shí),便可以借助已訓(xùn)練的模型判斷出這朵鳶尾花的類型。這個(gè)案例有著不同的實(shí)現(xiàn)方法,但是借助哪種分類算法進(jìn)行實(shí)現(xiàn)會(huì)更好呢?

1、KNN算法

(1)、KNN算法簡介

首先考慮這樣一個(gè)問題,在上文的淘寶商品中,有三類商品,分別是零食、名牌包包和電器,它們都有兩個(gè)特征:price和comment。按照價(jià)格來排序,名牌包包最貴,電器次之,零食最便宜;按照評(píng)論數(shù)來排序,零食評(píng)論數(shù)最多,電器次之,名牌包包最少。然后以price為x軸、comment為y軸建立直角坐標(biāo)系,將這三類商品的分布繪制在坐標(biāo)系中,如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

顯然可以發(fā)現(xiàn),這三類商品都集中分布在不同的區(qū)域。如果現(xiàn)在出現(xiàn)了一個(gè)已知其特征的新商品,用?表示這個(gè)新商品。根據(jù)其特征,該商品在坐標(biāo)系映射的位置如圖所示,問該商品最有可能是這三類商品中的哪種?

這類問題可以采用KNN算法進(jìn)行解決,該算法的實(shí)現(xiàn)思路是,分別計(jì)算未知商品到其他各個(gè)商品的歐幾里得距離之和,然后進(jìn)行排序,距離之和越小,說明該未知商品與這類商品越相似。例如在經(jīng)過計(jì)算之后,得出該未知商品與電器類的商品的歐幾里得距離之和最小,那么就可以認(rèn)為該商品屬于電器類商品。

(2)、實(shí)現(xiàn)方式

上述過程的具體實(shí)現(xiàn)如下:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

當(dāng)然也可以直接調(diào)包,這樣更加簡潔和方便,缺點(diǎn)在于使用的人無法理解它的原理:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

(3)、使用KNN算法解決鳶尾花的分類問題

首先加載鳶尾花數(shù)據(jù)。具體有兩種加載方案,一種是直接從鳶尾花數(shù)據(jù)集中讀取,在設(shè)置好路徑之后,通過read_csv()方法進(jìn)行讀取,分離數(shù)據(jù)集的特征和結(jié)果,具體操作如下:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

還有一種加載方法是借助sklearn來實(shí)現(xiàn)加載。sklearn的datasets中自帶有鳶尾花的數(shù)據(jù)集,通過使用datasets的load_iris()方法就可以將數(shù)據(jù)加載出來,隨后同樣獲取特征和類別,然后進(jìn)行訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)的分離(一般做交叉驗(yàn)證),具體是使用train_test_split()方法進(jìn)行分離,該方法第三個(gè)參數(shù)代表測試比例,第四個(gè)參數(shù)是隨機(jī)種子,具體操作如下:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

在加載完成之后,就可以調(diào)用上文中提到的KNN算法進(jìn)行分類了。

2、貝葉斯算法

(1)、貝葉斯算法的介紹

首先介紹樸素貝葉斯公式:P(B|A)=P(A|B)P(B)/P(A)。假如現(xiàn)在有一些課程的數(shù)據(jù),如下表所示,價(jià)格和課時(shí)數(shù)是課程的特征,銷量是課程的結(jié)果,若出現(xiàn)了一門新課,其價(jià)格高且課時(shí)多,根據(jù)已有的數(shù)據(jù)預(yù)測新課的銷量。

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

顯然這個(gè)問題屬于分類問題。先對(duì)表格進(jìn)行處理,將特征一與特征二轉(zhuǎn)化成數(shù)字,即0代表低,1代表中,2代表高。在進(jìn)行數(shù)字化之后,[[t1,t2],[t1,t2],[t1,t2]]------[[0,2],[2,1],[0,0]],然后對(duì)這個(gè)二維列表進(jìn)行轉(zhuǎn)置(便于后續(xù)統(tǒng)計(jì)),得到[[t1,t1,t1],[t2,t2,t2]]-------[[0,2,0],[2,1,0]]。其中[0,2,0]代表著各個(gè)課程價(jià)格,[2,1,0]代表各個(gè)課程的課時(shí)數(shù)。

而原問題可以等價(jià)于求在價(jià)格高、課時(shí)多的情況下,新課程銷量分別為高、中、低的概率。即P(C|AB)=P(AB|C)P(C)/P(AB)=P(A|C)P(B|C)P(C)/P(AB)=》P(A|C)P(B|C)P(C),其中C有三種情況:c0=高,c1=中,c2=低。而最終需要比較P(c0|AB)、P(c1|AB)和P(c2|AB)這三者的大小,又

P(c0|AB)=P(A|C0)P(B|C0)P(C0)=2/4*2/4*4/7=1/7

P(c1|AB)=P(A|C1)P(B|C1)P(C1)=0=0

P(c2|AB)=P(A|C2)P(B|C2)P(C2)=0=0

顯然P(c0|AB)最大,即可預(yù)測這門新課的銷量為高。

(2)、實(shí)現(xiàn)方式

KNN算法一樣,貝葉斯算法也有兩種實(shí)現(xiàn)方式,一種是詳細(xì)的實(shí)現(xiàn):

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)
Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

另一種是集成的實(shí)現(xiàn)方式:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

3、決策樹算法

決策樹算法是基于信息熵的理論去實(shí)現(xiàn)的,該算法的計(jì)算流程分為以下幾個(gè)步驟:

(1)先計(jì)算總信息熵

(2)計(jì)算各個(gè)特征的信息熵

(3)計(jì)算E以及信息增益,E=總信息熵-信息增益,信息增益=總信息熵-E

(4)E如果越小,信息增益越大,不確定因素越小

決策樹是指對(duì)于多特征的數(shù)據(jù),對(duì)于第一個(gè)特征,是否考慮這個(gè)特征(0代表不考慮,1代表考慮)會(huì)形成一顆二叉樹,然后對(duì)第二個(gè)特征也這么考慮...直到所有特征都考慮完,最終形成一顆決策樹。如下圖就是一顆決策樹

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

決策樹算法實(shí)現(xiàn)過程為:首先取出數(shù)據(jù)的類別,然后對(duì)數(shù)據(jù)轉(zhuǎn)化描述的方式(例如將“是”轉(zhuǎn)化成1,“否”轉(zhuǎn)化成0),借助于sklearn中的DecisionTreeClassifier建立決策樹,使用fit()方法進(jìn)行數(shù)據(jù)訓(xùn)練,訓(xùn)練完成后直接使用predict()即可得到預(yù)測結(jié)果,最后使用export_graphviz進(jìn)行決策樹的可視化。具體實(shí)現(xiàn)過程如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

4、邏輯回歸算法

邏輯回歸算法是借助于線性回歸的原理來實(shí)現(xiàn)的。假如存在一個(gè)線性回歸函數(shù):y=a1x1+a2x2+a3x3+…+anxn+b,其中x1到xn代表的是各個(gè)特征,雖然可以用這條直線去擬合它,但是由于y范圍太大,導(dǎo)致其魯棒性太差。若想實(shí)現(xiàn)分類,需要縮小y的范圍到一定的空間內(nèi),如[0,1]。這時(shí)候通過換元法可以實(shí)現(xiàn)y范圍的縮?。?/span>

令y=ln(p/(1-p))

那么:e^y=e^(ln(p/(1-p)))

=> e^y=p/(1-p)

=>e^y*(1-p)=p => e^y-p*e^y=p

=> e^y=p(1+e^y)

=> p=e^y/(1+e^y)

=> p屬于[0,1]

這樣y就降低了范圍,從而實(shí)現(xiàn)了精準(zhǔn)分類,進(jìn)而實(shí)現(xiàn)邏輯回歸

邏輯回歸算法對(duì)應(yīng)的實(shí)現(xiàn)過程如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

5、SVM算法

SVM算法是一種精準(zhǔn)分類的算法,但是其可解釋性并不強(qiáng)。它可以將低維空間線性不可分的問題,變?yōu)楦呶豢臻g上的線性可分。SVM算法的使用十分簡單,直接導(dǎo)入SVC,然后訓(xùn)練模型,并進(jìn)行預(yù)測。具體操作如下:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

盡管實(shí)現(xiàn)非常簡單,然而該算法的關(guān)鍵卻在于如何選擇核函數(shù)。核函數(shù)可分為以下幾類,各個(gè)核函數(shù)也適用于不同的情況:

(1)、線性核函數(shù)

(2)、多項(xiàng)式核函數(shù)

(3)、徑向基核函數(shù)

(4)、Sigmoid核函數(shù)

對(duì)于不是特別復(fù)雜的數(shù)據(jù),可以采用線性核函數(shù)或者多項(xiàng)式核函數(shù)。對(duì)于復(fù)雜的數(shù)據(jù),則采用徑向基核函數(shù)。采用各個(gè)核函數(shù)繪制的圖像如下圖所示:

Python<a href='/map/shujuwajue/' style='color:#000;font-size:inherit;'>數(shù)據(jù)挖掘</a>與<a href='/map/jiqixuexi/' style='color:#000;font-size:inherit;'>機(jī)器學(xué)習(xí)</a>技術(shù)入門實(shí)戰(zhàn)

5、Adaboost算法

假如有一個(gè)單層決策樹的算法,它是一種弱分類算法(準(zhǔn)確率很低的算法)。如果想對(duì)這個(gè)弱分類器進(jìn)行加強(qiáng),可以使用boost的思想去實(shí)現(xiàn),比如使用Adaboost算法,即進(jìn)行多次的迭代,每次都賦予不同的權(quán)重,同時(shí)進(jìn)行錯(cuò)誤率的計(jì)算并調(diào)整權(quán)重,最終形成一個(gè)綜合的結(jié)果。

Adaboost算法一般不單獨(dú)使用,而是組合使用,來加強(qiáng)那些弱分類的算法。

五、分類算法的選擇思路與技巧

首先看是二分類還是多分類問題,如果是二分類問題,一般這些算法都可以使用;如果是多分類問題,則可以使用KNN和貝葉斯算法。其次看是否要求高可解釋性,如果要求高可解釋性,則不能使用SVM算法。再看訓(xùn)練樣本數(shù)量、再看訓(xùn)練樣本數(shù)量,如果訓(xùn)練樣本的數(shù)量太大,則不適合使用KNN算法。最后看是否需要進(jìn)行弱-強(qiáng)算法改造,如果需要?jiǎng)t使用Adaboost算法,否則不使用Adaboost算法。如果不確定,可以選擇部分?jǐn)?shù)據(jù)進(jìn)行驗(yàn)證,并進(jìn)行模型評(píng)價(jià)(耗時(shí)和準(zhǔn)確率)。

綜上所述,可以總結(jié)出各個(gè)分類算法的優(yōu)缺點(diǎn)為:

KNN:多分類,惰性調(diào)用,不宜訓(xùn)練數(shù)據(jù)過大

貝葉斯:多分類,計(jì)算量較大,特征間不能相關(guān)

決策樹算法:二分類,可解釋性非常好

邏輯回歸算法:二分類,特征之間是否具有關(guān)聯(lián)無所謂

SVM算法:二分類,效果比較不錯(cuò),但可解釋性欠缺

Adaboost算法:適用于對(duì)弱分類算法進(jìn)行加強(qiáng)

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }