大數(shù)據(jù)應(yīng)用導(dǎo)論

| 2022-09-13 admin

大數(shù)據(jù)分析

 


一、數(shù)據(jù)分析介紹

什么是數(shù)據(jù)分析?

  • 數(shù)據(jù)分析就是利用機(jī)器學(xué)習(xí)等算法分析數(shù)據(jù)、挖掘數(shù)據(jù)信息的一個(gè)過(guò)程。
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)

  • 機(jī)器學(xué)習(xí)是大數(shù)據(jù)分析的核心方法

  • 機(jī)器學(xué)習(xí)就是讓計(jì)算機(jī)從大量的數(shù)據(jù)中學(xué)習(xí)相關(guān)的規(guī)律,然后利用學(xué)習(xí)來(lái)的規(guī)律對(duì)未知數(shù)據(jù)進(jìn)行預(yù)測(cè)的方法。

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_算法_02

1、機(jī)器學(xué)習(xí)發(fā)展歷程

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_03

2、機(jī)器學(xué)習(xí)的分類(lèi)

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_算法_04

2.1、有監(jiān)督學(xué)習(xí)(supervised learning)

數(shù)據(jù)集中的樣本帶有標(biāo)簽,有明確目標(biāo)

  • 實(shí)例:信用風(fēng)險(xiǎn)評(píng)估
    根據(jù)用戶(hù)的歷史還款記錄和信用賬戶(hù)賬齡等信息,預(yù)測(cè)用戶(hù)未來(lái)是否違約。
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_算法_05

2.2、無(wú)監(jiān)督學(xué)習(xí)(unsupervised learning)

數(shù)據(jù)集中的樣本沒(méi)有標(biāo)簽,沒(méi)有明確目標(biāo)

  • 實(shí)例:電信用戶(hù)聚類(lèi)
    根據(jù)用戶(hù)的通信行為數(shù)據(jù)集,將電信用戶(hù)劃分為不同的群體
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_06

2.3、強(qiáng)化學(xué)習(xí)(reinforcement learning)

智慧決策的過(guò)程,通過(guò)過(guò)程模擬和觀察來(lái)不斷學(xué)習(xí)、提高決策能力

  • 實(shí)例:AlphaGo
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_07

3、機(jī)器學(xué)習(xí)的基本概念和流程

3.1、機(jī)器學(xué)習(xí)的基本概念

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_08

1、明確目標(biāo)

  • 將實(shí)際問(wèn)題轉(zhuǎn)換為數(shù)學(xué)問(wèn)題
  • 明確需要的數(shù)據(jù)的形式
  • 明確機(jī)器學(xué)習(xí)的目標(biāo)分類(lèi)、回歸還是聚類(lèi),還是其他
1、什么是分類(lèi)
  • 分類(lèi)就是根據(jù)樣樣本數(shù)據(jù)的特征或?qū)傩?,將其分到某一已有的?lèi)別中
    eg:在電子郵箱服務(wù)中,將郵箱劃分為正常郵件或垃圾郵件,這時(shí)比較典型的一個(gè)分類(lèi)問(wèn)題。
2、什么是回歸
  • 在日常生活中,我們會(huì)碰到目標(biāo)特征為連續(xù)型的預(yù)測(cè)問(wèn)題,例如收入預(yù)測(cè)、銷(xiāo)量預(yù)測(cè)和商品預(yù)測(cè)等,這種問(wèn)題稱(chēng)為回歸問(wèn)題。
    eg:根據(jù)鉆石的切割、成色、凈度、卡拉重量和價(jià)格等特征,對(duì)鉆石的價(jià)格進(jìn)行預(yù)測(cè)。
3、什么是聚類(lèi)
  • 聚類(lèi)就是將數(shù)據(jù)集中類(lèi)似的樣本進(jìn)行分組的過(guò)程,每一個(gè)稱(chēng)為一個(gè)“簇”
    eg:根據(jù)全球各地觀測(cè)到的氣候特征,將全球劃分為不同的氣候區(qū)域
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_09

3.2、機(jī)器學(xué)習(xí)的基本流程

下圖為信貸模型完整流程示意:
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_10
信貸模型

  • 目標(biāo):根據(jù)借貸人的基本信息如收入、教育程度、婚姻狀態(tài)等,預(yù)測(cè)借貸人未來(lái)是否違約
  • 研究的問(wèn)題“是否違約”稱(chēng)為目標(biāo)變量
  • 研究的問(wèn)題是一個(gè)分類(lèi)問(wèn)題

特征:

  • 在信貸模型中,我們收集到的數(shù)據(jù)集中的變量有:性別、收入、教育程度、婚姻狀態(tài)等,我們把這些變量稱(chēng)為特征。
  • 特征不僅僅包括這些可以直接獲得的變量,還包括利用原始信息構(gòu)成的新的變量。

特征的數(shù)據(jù)類(lèi)型:
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_算法_11

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

  • 在銀行貸款案例中,我們將獲取到的數(shù)據(jù)集分為兩部分,一部分用來(lái)學(xué)習(xí)分類(lèi)、訓(xùn)練模型,稱(chēng)之為訓(xùn)練集;另一部分用來(lái)預(yù)測(cè),即測(cè)試訓(xùn)練好的模型的預(yù)測(cè)能力,稱(chēng)之為測(cè)試機(jī)
  • 一般按照一定的比例隨機(jī)的將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試機(jī)

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

1、訓(xùn)練模型
  • 用訓(xùn)練集來(lái)訓(xùn)練模型,其中每個(gè)訓(xùn)練樣本由特征和目標(biāo)變量組成
  • 銀行借貸案例中,每個(gè)訓(xùn)練樣本有四種特征(性別、收入、教育程度、婚姻狀態(tài)),一個(gè)目標(biāo)變量(是否違約)
2、測(cè)試模型
  • 當(dāng)完成模型訓(xùn)練后,利用測(cè)試集對(duì)模型進(jìn)行測(cè)試,檢驗(yàn)?zāi)P偷暮脡?/li>
  • 將測(cè)試集輸入訓(xùn)練好的模型,輸出預(yù)測(cè)值
  • 通過(guò)性能指標(biāo),比較預(yù)測(cè)的目標(biāo)變量值和實(shí)際目標(biāo)變量值之間的差別,評(píng)價(jià)模型的好壞
3、模型性能評(píng)估
  • 在回歸問(wèn)題上,通常用均方誤差(MSE)來(lái)評(píng)價(jià)模型的好壞
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_12

  • 在分類(lèi)問(wèn)題上,常用正確率和錯(cuò)誤率來(lái)評(píng)價(jià)模型的好壞

  • 混淆矩陣(confusion matrix)可以直觀查看分類(lèi)問(wèn)題中預(yù)測(cè)分類(lèi)與真實(shí)分類(lèi)的情況
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_13

  • 正確率(Accuracy):正確分類(lèi)(預(yù)測(cè)類(lèi)別與實(shí)際類(lèi)別相等)
    樣本數(shù)占樣本總數(shù)的比例:
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_14

  • 一般情況下,正確率越大,表示模型預(yù)測(cè)效果越好

  • 錯(cuò)誤率:錯(cuò)誤分類(lèi)(預(yù)測(cè)類(lèi)別與實(shí)際類(lèi)別不相等)樣本數(shù)占樣本總數(shù)的比例:
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_15

  • 一般來(lái)說(shuō),錯(cuò)誤率越小,表示模型越策效果越好

  • 召回率(recall)和精度(precision):
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_16

  • ROC曲線基本概念:
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_17

  • AUC值:
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_18

二、機(jī)器學(xué)習(xí)算法模型與算法

不同的模型能達(dá)到不同的效果,如果選擇錯(cuò)模型,就會(huì)無(wú)用功。

1、線性回歸

基本思想:

  • 就是尋找一條直線,使得所有樣本盡可能地落在它的附近,即目標(biāo)變量y和特征x之間的關(guān)系近似遵循一條直線

1.1、公式及圖解

  • 一元線性回歸模型為:
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_19
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_20

1.2、線性回歸的特點(diǎn):

  • 形式簡(jiǎn)單,易于建模
  • 具有很好的可解釋性

2、邏輯回歸

  • 邏輯回歸之所以稱(chēng)為“回歸”,是因?yàn)樗捎昧嘶貧w分析的思想。然而,它是用來(lái)解決分類(lèi)問(wèn)題的模型,通常解決的是二分類(lèi)問(wèn)題
  • 邏輯回歸是應(yīng)用最為廣泛的模型之一
  • ①金融領(lǐng)域的風(fēng)險(xiǎn)評(píng)估
  • ②互聯(lián)網(wǎng)廣澳點(diǎn)擊預(yù)測(cè)

從線性回歸到邏輯回歸

  • 在線性回歸中,預(yù)測(cè)目標(biāo)y是連續(xù)型,模型如下
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_21
  • 假如要解決的是二分類(lèi)問(wèn)題,也就是預(yù)測(cè)目標(biāo)y為離散型
  •  這時(shí)線性回歸無(wú)法解決該問(wèn)題
  •  為了能夠利用回歸的方法來(lái)解決二分類(lèi)問(wèn)題,需要對(duì)線性回歸的輸出作改變

改變方式—引入Logistic函數(shù)
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_22

2.1、邏輯回歸公式

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_23

2.2、邏輯回歸的特點(diǎn)

  • 速度快,適合二分類(lèi)問(wèn)題
  • 簡(jiǎn)單易于理解,可以直接看到各個(gè)特征的權(quán)重

3、K近鄰(KNN)

K近鄰并沒(méi)有學(xué)習(xí)的過(guò)程,而是在預(yù)測(cè)的時(shí)候根據(jù)數(shù)據(jù)的狀況直接進(jìn)行預(yù)測(cè)
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_24

3.1、K近鄰算法流程

  • 確定K的大小和相似度的計(jì)算方法
  • 從訓(xùn)練樣本中挑選k個(gè)與測(cè)試樣本最相似的樣本
  • 根據(jù)k個(gè)訓(xùn)練樣本的類(lèi)別,通過(guò)投票的方式來(lái)確定測(cè)試樣本的類(lèi)別

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_25

3.2、K近鄰(KNN)的特點(diǎn)

優(yōu)點(diǎn):

  • 簡(jiǎn)單實(shí)用,易于實(shí)現(xiàn)
  • 對(duì)異常數(shù)據(jù)不敏感

缺點(diǎn):

  • 計(jì)算效率不高

4、決策樹(shù)

生活中有很多場(chǎng)景需要我們通過(guò)一系列問(wèn)題的診斷結(jié)果來(lái)進(jìn)行決策。

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_26

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_27

4.1、決策樹(shù)的基本結(jié)構(gòu)

  • 一個(gè)根節(jié)點(diǎn)(沒(méi)有箭頭指向它):圖中的“收入”就是一個(gè)根節(jié)點(diǎn)
  • 內(nèi)部節(jié)點(diǎn)(既有箭頭指向它,它又有箭頭指出):圖中的“教育程度”就是一個(gè)內(nèi)部節(jié)點(diǎn)
  • 葉子節(jié)點(diǎn)(只有箭頭指向它,它沒(méi)有箭頭指出):表示一個(gè)類(lèi),圖中粉色和綠色方塊就是兩個(gè)葉子節(jié)點(diǎn)

4.2、決策樹(shù)的生成

  • 決策樹(shù)模型就是基于特征,自動(dòng)生成一顆具有分類(lèi)能力的樹(shù)的過(guò)程
  • 從根節(jié)點(diǎn)開(kāi)始,進(jìn)行特征的選擇(如年齡)
  • 然后選擇該節(jié)點(diǎn)特征的分裂點(diǎn),根據(jù)分裂點(diǎn)分裂節(jié)點(diǎn)(如50)
  • 然后選擇新的特征作為分支節(jié)點(diǎn),繼續(xù)分裂,直至達(dá)到一定條件停止分裂,形成一顆決策樹(shù)
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_28

4.3、決策樹(shù)的特點(diǎn)

  • 原理簡(jiǎn)單、易于理解
  • 具有較強(qiáng)的解釋性
  • 對(duì)缺失值也有很好的處理方式

5、K-means聚類(lèi)

  • 聚類(lèi):“物以類(lèi)聚,人以群分”

  • K-means聚類(lèi)原理:
    將n個(gè)樣本劃分到K個(gè)簇中,其中每個(gè)樣本歸屬于距離自己最近的簇

  • 聚類(lèi)效果:使簇內(nèi)具有較高的相似度,而簇間的相似度較低

5.1、K-means算法步驟

1、隨機(jī)選取K個(gè)樣本作為初始中心
2、重復(fù)迭代如下步驟直至收斂:

 ①把每個(gè)樣本指派到最近的中心,形成K個(gè)簇 ②重新計(jì)算每個(gè)簇的中心 ③直到中心不在發(fā)生變化

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_29

5.2、K-means算法的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 算法實(shí)現(xiàn)簡(jiǎn)單、直觀
  • 支持多種距離計(jì)算

缺點(diǎn):

  • 聚類(lèi)結(jié)果依賴(lài)于初始于K個(gè)中心的選擇
  • 需要指定K值和初始化K個(gè)簇
  • 不易處理非簇狀數(shù)據(jù),且易受離群值的影響

6、PCA降維

  • 高緯數(shù)據(jù)給數(shù)據(jù)分析帶來(lái)的一個(gè)嚴(yán)重的挑戰(zhàn)是維度災(zāi)難問(wèn)題,即模型的復(fù)雜度和計(jì)算量隨著維數(shù)的增加而呈指數(shù)增長(zhǎng)
  • 降維試解決維度災(zāi)難的一種手段

假如我們現(xiàn)在要借助用戶(hù)手機(jī)的通信數(shù)據(jù)對(duì)用戶(hù)價(jià)值進(jìn)行分析,原始通信數(shù)據(jù)包括:入網(wǎng)時(shí)間、套餐價(jià)格、每月話費(fèi)、每月流量、每月通話時(shí)長(zhǎng)、欠費(fèi)金額、欠費(fèi)月數(shù)等7個(gè)特征,但它的“內(nèi)在維度”可能只有3個(gè):用戶(hù)忠誠(chéng)度、消費(fèi)能力、欠費(fèi)指數(shù),這3個(gè)維度能夠更加直觀地對(duì)用戶(hù)價(jià)值進(jìn)行刻畫(huà)

  • 即將原始7維數(shù)據(jù)降為3維

6.1、PCA的基本思想

主成分分析(PCA)是一種有效的降維方法

  • 構(gòu)成原始特征的一系列線性組合形成低維的特征,以去除相關(guān)數(shù)據(jù)的相關(guān)性,并使降維后的數(shù)據(jù)最大程度地保持原始高維數(shù)據(jù)地信息
  • 即把多個(gè)特征轉(zhuǎn)換為少數(shù)幾個(gè)互不相關(guān)地總和特征,且盡可能地保留原始數(shù)據(jù)地信息,這些互不相關(guān)地綜合特征稱(chēng)為主成分

6.2、步驟

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_30

6.3、特點(diǎn)

優(yōu)點(diǎn):

  • 計(jì)算效率高
  • 便于理解低維數(shù)據(jù)

缺點(diǎn):

  • 構(gòu)建的主成分特征沒(méi)有明確的含義
三、數(shù)據(jù)分析的工具與介紹

1、數(shù)據(jù)分析常用工具

  1. 基于Python的Scikit-learn庫(kù)
  2. 基于Hadoop的Mahout
  3. 基于Spark的Mllib模塊

2、常用到的Python模塊

  1. Numpy庫(kù):科學(xué)計(jì)算基礎(chǔ)庫(kù)
  2. Pandas庫(kù):數(shù)據(jù)處理和分析工具庫(kù)
  3. Scipy庫(kù):算法和數(shù)學(xué)工具庫(kù)
  4. Matplotlib:繪制數(shù)據(jù)圖表的庫(kù)
  5. Scikit-learn(簡(jiǎn)稱(chēng)Sklearn)庫(kù):機(jī)器學(xué)習(xí)庫(kù)

3、Sklearn庫(kù)

3.1、Sklearn庫(kù)簡(jiǎn)介

Sklearn是Python著名的機(jī)器學(xué)習(xí)庫(kù)

  • 封裝了眾多機(jī)器學(xué)習(xí)算法,內(nèi)置了許多公開(kāi)數(shù)據(jù)集,且擁有完整的文檔
  • 實(shí)現(xiàn)了數(shù)據(jù)預(yù)處理、分類(lèi)、回歸、降維、特征選擇、特征抽取和模型評(píng)價(jià)等機(jī)器學(xué)習(xí)功能
  • Sklearn官網(wǎng):index.html

3.2、常用模塊

  • 分類(lèi):Classification
    包括邏輯回歸、K近鄰、決策樹(shù)等
  • 回歸:Regression
    線性回歸
  • 聚類(lèi):Clustering
    K-means
  • 降維:Dimensionality reduction
    主成分分析(PCA)
  • 模型選擇:Model selection
  • 預(yù)處理:Preprocessing

4、Mahout

  • Apache Mahout是Apache Software Foundation(AFS)旗下的一個(gè)開(kāi)源項(xiàng)目,提供了一些經(jīng)典的機(jī)器學(xué)習(xí)的算法
  • Mahout安裝官網(wǎng):
  • 基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的分布式框架,通過(guò)MapReduce模式實(shí)現(xiàn)
  • 封裝了大量數(shù)據(jù)挖掘經(jīng)典算法,包括聚類(lèi)、分類(lèi)等

5、基于Spark的Mllib模塊

5.1、Spark簡(jiǎn)介

  • Spark是專(zhuān)用大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎。具有運(yùn)行速度快。容易使用、通用性強(qiáng)、運(yùn)行模式多樣的特點(diǎn)
  • Spark安裝官網(wǎng):downloads.html
  • Spark 分布式數(shù)據(jù)分析
  • 允許用戶(hù)將數(shù)據(jù)加載至集群內(nèi)存,并多次對(duì)其進(jìn)行查詢(xún),非常適合用于機(jī)器學(xué)習(xí)算法。
  • Spark的一個(gè)最大特點(diǎn)就是它的分布式計(jì)算,即它可以將一個(gè)大任務(wù)分解成很多小人物,交給很多臺(tái)機(jī)器去分別完成,最后匯總,這就是“人多力量大”的道理。

除了數(shù)據(jù)處理性能上的優(yōu)化,Spark還提供了多種特殊環(huán)境下的數(shù)據(jù)分析工具
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_31

5.2、Mllib

  • Mllib是構(gòu)建在Apache Spark之上,一個(gè)專(zhuān)門(mén)針對(duì)大數(shù)據(jù)處理通用的、快速的引擎
  • Mllib是Spark的可以拓展的機(jī)器學(xué)習(xí)庫(kù)
  • 由以下部分組成:
    通用的學(xué)習(xí)算法和工具,包括分類(lèi)、回歸、聚類(lèi)、協(xié)同過(guò)濾、降維、以及調(diào)優(yōu)等。

Mllib提供的工具:

  • 機(jī)器學(xué)習(xí)算法:常用的學(xué)習(xí)算法,如分類(lèi)、回歸、聚類(lèi)
  • 特征:特征提取、選擇及降維
  • 存儲(chǔ):保存和加載算法、模型
  • 實(shí)用工具:線性代數(shù),統(tǒng)計(jì),數(shù)據(jù)處理等
四、使用K近鄰構(gòu)造糖尿病診斷模型(案例)1、前提準(zhǔn)備

此案例的目標(biāo):

  • 根據(jù)歷史數(shù)據(jù)信息,建立糖尿病自動(dòng)診斷模型,預(yù)測(cè)被診斷者是否患有糖尿病
  • 分類(lèi)問(wèn)題
  • 使用K鄰近算法進(jìn)行分類(lèi)

糖尿病的背景介紹:

  • 主要特征:高血糖
  • 檢測(cè)糖尿病大多需要檢查血糖、體重、胰島素水平等

數(shù)據(jù)集特征說(shuō)明:
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_機(jī)器學(xué)習(xí)_32

2、分析過(guò)程

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

  • 載入pandas庫(kù),利用read_csv函數(shù)讀取數(shù)據(jù)
import pandas as pddiabetes = pd.read_csv("./input/india_diabetes.csv")
  • 數(shù)據(jù)查看
# 數(shù)據(jù)查看display(diabetes.head(10))  
  • 導(dǎo)入后的數(shù)據(jù)表格一共9列
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_33
  • Pandas中describe()函數(shù)可查看數(shù)據(jù)集中變量的描述性信息
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_大數(shù)據(jù)_34

2.2、數(shù)據(jù)劃分

  • 在數(shù)據(jù)集劃分之前,將特征和目標(biāo)變量分離
  • 其中X為特征,Y為目標(biāo)變量
X=diabetes.iloc[:,:8]Y=diabetes.iloc[:,8:9]
  • 特征變量中,懷孕次數(shù)(Pregnancies)為離散型特征,其它為連續(xù)型特征
    大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_數(shù)據(jù)_35
  • 另一種切分方法:載入sklearn.model_selection,利用train_test_split()函數(shù)將數(shù)據(jù)集按照一定的比例隨機(jī)劃分為訓(xùn)練集和測(cè)試機(jī)
# 將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集# 通過(guò)控制random_state# 可以保證每次切分的時(shí)候,得到的結(jié)果是一樣的from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=10,stratify=diabetes['Outcome'])

代碼解釋?zhuān)?/strong>

  • 將數(shù)據(jù)集按8:2比例劃分成訓(xùn)練集(train)和測(cè)試集(test)
  • test_size為測(cè)試集比例(0.2表示測(cè)試集占總樣本的比例)
  • 參數(shù)stratify保持測(cè)試集和訓(xùn)練集中Outcome(目標(biāo)變量)類(lèi)別比例不變
  •  

用訓(xùn)練集訓(xùn)練模型

  • 從sklearn.neighbors中載入k近鄰算法KNeighborsClassifier
from sklearn.neighbors import KNeighborsClassifier# 生成模型knn = KNeighborsClassifier(n_neighbors=5)# 訓(xùn)練模型knn.fit(X_train,y_train)

利用測(cè)試集測(cè)試模型:

# 測(cè)試模型y_predict = knn.predict(X_test)# 測(cè)試集上的預(yù)測(cè)結(jié)果y_predict

大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_36

  • 其中"1"表示"是",“0"表示"否”

模型性能評(píng)估

  • sklearn中有可直接得出正確率的函數(shù):accuracy_score()
# 查看模型的正確率from sklearn.metrics import accuracy_scoreaccuracy_score(y_test,y_predict)# 74.5%的數(shù)據(jù)預(yù)測(cè)是正確的

得到的結(jié)果是:0.745

我們也可以通過(guò)混淆矩陣計(jì)算正確率
大數(shù)據(jù)應(yīng)用導(dǎo)論 Chapter04 | 大數(shù)據(jù)分析_聚類(lèi)_37
性能提成

  • 再上述K近鄰模型中,K=5,我們知道,對(duì)于不同的K值,將會(huì)得到不同的模型,所以嘗試取不同的K值,得到最優(yōu)模型。
klist = [3,5,7,9]knn_grid = KNeighborsClassifier(n_neighbors=5)# 搜索參數(shù)knn_grid = GridSearchCV(knn_grid,dict(n_neighbors = klist), cv=10)# GridSearchCV# 訓(xùn)練knn_grid.fit(X_train,y_train)# 獲取最佳y_predict_grid = knn_grid.best_estimator_.predict(X_test)
  • 利用Python自動(dòng)選取最優(yōu)K值
#最優(yōu)K值knn_grid.best_params_{'n_neighbors': 3}
  • 用選取的最優(yōu)K值進(jìn)行預(yù)測(cè)
#利用最優(yōu)k值進(jìn)行預(yù)測(cè)y_predict_grid = knn_grid.best_estimator_.predict(X_test)accuracy_score(y_test,y_predict_grid)# 77.5%

結(jié)果為:0.775

以上就是一個(gè)完整的機(jī)器學(xué)習(xí)流程。

3、完整代碼
# warningimport warningswarnings.filterwarnings('ignore')# 數(shù)據(jù)展示方法from IPython.display import display# 載入pandasimport pandas as pd# matplotlib%matplotlib inline# 載入數(shù)據(jù)diabetes = pd.read_csv("./input/india_diabetes.csv")# 數(shù)據(jù)查看display(diabetes.head(10)) # 查看數(shù)據(jù)維度diabetes.shape# 統(tǒng)計(jì)各列鍵非空數(shù)據(jù)數(shù)量、數(shù)據(jù)類(lèi)型diabetes.info()# 描述性統(tǒng)計(jì)diabetes.describe()# 查看目標(biāo)特征各個(gè)類(lèi)別的數(shù)量diabetes['Outcome'].value_counts()數(shù)據(jù)集劃分# 將目標(biāo)變量和特征分離# 特征和label的分離X=diabetes.iloc[:,:8]Y=diabetes.iloc[:,8:9]# 將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集# 通過(guò)控制random_state# 可以保證每次切分的時(shí)候,得到的結(jié)果是一樣的from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=10,stratify=diabetes['Outcome'])X_train.head()# 查看訓(xùn)練集中目標(biāo)變量類(lèi)別比例y_train['Outcome'].value_counts()# 查看測(cè)試集中目標(biāo)變量類(lèi)別比例y_test['Outcome'].value_counts()學(xué)習(xí)算法——knn# 訓(xùn)練模型# 載入模型from sklearn.neighbors import KNeighborsClassifier# 生成模型knn = KNeighborsClassifier(n_neighbors=5)# 訓(xùn)練模型knn.fit(X_train,y_train)# 測(cè)試模型y_predict = knn.predict(X_test)# 測(cè)試集上的預(yù)測(cè)結(jié)果y_predict# 查看模型的正確率from sklearn.metrics import accuracy_scoreaccuracy_score(y_test,y_predict)# 74.5%的數(shù)據(jù)預(yù)測(cè)是正確的另一種辦法:from sklearn import metricsimport seaborn as snscolorMetrics = metrics.confusion_matrix(y_test,y_predict)sns.heatmap(colorMetrics,annot=True,fmt='d')選取最優(yōu)K值from sklearn.model_selection import GridSearchCVklist = [3,5,7,9]knn_grid = KNeighborsClassifier(n_neighbors=5)# 搜索參數(shù)knn_grid = GridSearchCV(knn_grid,dict(n_neighbors = klist), cv=10)# GridSearchCV# 訓(xùn)練knn_grid.fit(X_train,y_train)# 獲取最佳y_predict_grid = knn_grid.best_estimator_.predict(X_test)#最優(yōu)K值knn_grid.best_params_#利用最優(yōu)k值進(jìn)行預(yù)測(cè)y_predict_grid = knn_grid.best_estimator_.predict(X_test)accuracy_score(y_test,y_predict_grid)# 77.5%