大數(shù)據(jù)分析
- 一、數(shù)據(jù)分析介紹
- 二、機(jī)器學(xué)習(xí)算法模型與算法
- 三、數(shù)據(jù)分析的工具與介紹
- 四、使用K近鄰構(gòu)造糖尿病診斷模型(案例)
- 1、前提準(zhǔn)備
- 2、分析過(guò)程
- 3、完整代碼
一、數(shù)據(jù)分析介紹
什么是數(shù)據(jù)分析?
-
數(shù)據(jù)分析就是利用機(jī)器學(xué)習(xí)等算法分析數(shù)據(jù)、挖掘數(shù)據(jù)信息的一個(gè)過(guò)程。
-
機(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è)的方法。
1、機(jī)器學(xué)習(xí)發(fā)展歷程
2、機(jī)器學(xué)習(xí)的分類(lèi)
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)是否違約。
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ù)劃分為不同的群體
2.3、強(qiáng)化學(xué)習(xí)(reinforcement learning)
智慧決策的過(guò)程,通過(guò)過(guò)程模擬和觀察來(lái)不斷學(xué)習(xí)、提高決策能力
- 實(shí)例:AlphaGo
3、機(jī)器學(xué)習(xí)的基本概念和流程
3.1、機(jī)器學(xué)習(xí)的基本概念
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ū)域
3.2、機(jī)器學(xué)習(xí)的基本流程
下圖為信貸模型完整流程示意:
信貸模型
- 目標(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)型:
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à)模型的好壞
-
在分類(lèi)問(wèn)題上,常用正確率和錯(cuò)誤率來(lái)評(píng)價(jià)模型的好壞
-
混淆矩陣(confusion matrix)可以直觀查看分類(lèi)問(wèn)題中預(yù)測(cè)分類(lèi)與真實(shí)分類(lèi)的情況
-
①正確率(Accuracy):正確分類(lèi)(預(yù)測(cè)類(lèi)別與實(shí)際類(lèi)別相等)
樣本數(shù)占樣本總數(shù)的比例: -
一般情況下,正確率越大,表示模型預(yù)測(cè)效果越好
-
② 錯(cuò)誤率:錯(cuò)誤分類(lèi)(預(yù)測(cè)類(lèi)別與實(shí)際類(lèi)別不相等)樣本數(shù)占樣本總數(shù)的比例:
-
一般來(lái)說(shuō),錯(cuò)誤率越小,表示模型越策效果越好
-
③召回率(recall)和精度(precision):
-
④ROC曲線基本概念:
-
⑤AUC值:
不同的模型能達(dá)到不同的效果,如果選擇錯(cuò)模型,就會(huì)無(wú)用功。
1、線性回歸
基本思想:
- 就是尋找一條直線,使得所有樣本盡可能地落在它的附近,即目標(biāo)變量y和特征x之間的關(guān)系近似遵循一條直線
1.1、公式及圖解
- 一元線性回歸模型為:
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ù)型,模型如下
- 假如要解決的是二分類(lèi)問(wèn)題,也就是預(yù)測(cè)目標(biāo)y為離散型
-
這時(shí)線性回歸無(wú)法解決該問(wèn)題
-
為了能夠利用回歸的方法來(lái)解決二分類(lèi)問(wèn)題,需要對(duì)線性回歸的輸出作改變
改變方式—引入Logistic函數(shù)
2.1、邏輯回歸公式
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è)
3.1、K近鄰算法流程
- 確定K的大小和相似度的計(jì)算方法
- 從訓(xùn)練樣本中挑選k個(gè)與測(cè)試樣本最相似的樣本
- 根據(jù)k個(gè)訓(xùn)練樣本的類(lèi)別,通過(guò)投票的方式來(lái)確定測(cè)試樣本的類(lèi)別
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)行決策。
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ù)
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ā)生變化
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、步驟
6.3、特點(diǎn)
優(yōu)點(diǎn):
- 計(jì)算效率高
- 便于理解低維數(shù)據(jù)
缺點(diǎn):
- 構(gòu)建的主成分特征沒(méi)有明確的含義
1、數(shù)據(jù)分析常用工具
- 基于Python的Scikit-learn庫(kù)
- 基于Hadoop的Mahout
- 基于Spark的Mllib模塊
2、常用到的Python模塊
- Numpy庫(kù):科學(xué)計(jì)算基礎(chǔ)庫(kù)
- Pandas庫(kù):數(shù)據(jù)處理和分析工具庫(kù)
- Scipy庫(kù):算法和數(shù)學(xué)工具庫(kù)
- Matplotlib:繪制數(shù)據(jù)圖表的庫(kù)
- 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ù)分析工具
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ù)處理等
此案例的目標(biāo):
- 根據(jù)歷史數(shù)據(jù)信息,建立糖尿病自動(dòng)診斷模型,預(yù)測(cè)被診斷者是否患有糖尿病
- 分類(lèi)問(wèn)題
- 使用K鄰近算法進(jìn)行分類(lèi)
糖尿病的背景介紹:
- 主要特征:高血糖
- 檢測(cè)糖尿病大多需要檢查血糖、體重、胰島素水平等
數(shù)據(jù)集特征說(shuō)明:
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列
- Pandas中describe()函數(shù)可查看數(shù)據(jù)集中變量的描述性信息
2.2、數(shù)據(jù)劃分
- 在數(shù)據(jù)集劃分之前,將特征和目標(biāo)變量分離
- 其中X為特征,Y為目標(biāo)變量
X=diabetes.iloc[:,:8]Y=diabetes.iloc[:,8:9]
- 特征變量中,懷孕次數(shù)(Pregnancies)為離散型特征,其它為連續(xù)型特征
- 另一種切分方法:載入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
- 其中"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ì)算正確率
性能提成
- 再上述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%