大數(shù)據(jù)服務(wù)上云的思考">大數(shù)據(jù)服務(wù)上云的思考
759
2022-05-30
大家好,我是不溫卜火,是一名計(jì)算機(jī)學(xué)院大數(shù)據(jù)專業(yè)大二的學(xué)生,昵稱來源于成語—不溫不火,本意是希望自己性情溫和。作為一名互聯(lián)網(wǎng)行業(yè)的小白,博主寫博客一方面是為了記錄自己的學(xué)習(xí)過程,另一方面是總結(jié)自己所犯的錯(cuò)誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水平有限,博客中難免會(huì)有一些錯(cuò)誤出現(xiàn),有紕漏之處懇請(qǐng)各位大佬不吝賜教!暫時(shí)只有csdn這一個(gè)平臺(tái),博客主頁:https://buwenbuhuo.blog.csdn.net/
Chapter04 | 大數(shù)據(jù)分析
一、數(shù)據(jù)分析介紹
1、機(jī)器學(xué)習(xí)發(fā)展歷程
2、機(jī)器學(xué)習(xí)的分類
2.1、有監(jiān)督學(xué)習(xí)(supervised learning)
2.2、無監(jiān)督學(xué)習(xí)(unsupervised learning)
2.3、強(qiáng)化學(xué)習(xí)(reinforcement learning)
3、機(jī)器學(xué)習(xí)的基本概念和流程
3.1、機(jī)器學(xué)習(xí)的基本概念
1、明確目標(biāo)
1、什么是分類
2、什么是回歸
3、什么是聚類
3.2、機(jī)器學(xué)習(xí)的基本流程
1、訓(xùn)練集和測(cè)試集
2、訓(xùn)練模型和測(cè)試模型
1、訓(xùn)練模型
2、測(cè)試模型
3、模型性能評(píng)估
二、機(jī)器學(xué)習(xí)算法模型與算法
1、線性回歸
1.1、公式及圖解
1.2、線性回歸的特點(diǎn):
2、邏輯回歸
2.1、邏輯回歸公式
2.2、邏輯回歸的特點(diǎn)
3、K近鄰(KNN)
3.1、K近鄰算法流程
3.2、K近鄰(KNN)的特點(diǎn)
4、決策樹
4.1、決策樹的基本結(jié)構(gòu)
4.2、決策樹的生成
4.3、決策樹的特點(diǎn)
5、K-means聚類
5.1、K-means算法步驟
5.2、K-means算法的優(yōu)缺點(diǎn)
6、PCA降維
6.1、PCA的基本思想
6.2、步驟
6.3、特點(diǎn)
三、數(shù)據(jù)分析的工具與介紹
1、數(shù)據(jù)分析常用工具
2、常用到的Python模塊
3、Sklearn庫
3.1、Sklearn庫簡(jiǎn)介
3.2、常用模塊
4、Mahout
5、基于Spark的Mllib模塊
5.1、Spark簡(jiǎn)介
5.2、Mllib
四、使用K近鄰構(gòu)造糖尿病診斷模型(案例)
1、前提準(zhǔn)備
2、分析過程
2.1、數(shù)據(jù)導(dǎo)入
2.2、數(shù)據(jù)劃分
3、完整代碼
一、數(shù)據(jù)分析介紹
什么是數(shù)據(jù)分析?
數(shù)據(jù)分析就是利用機(jī)器學(xué)習(xí)等算法分析數(shù)據(jù)、挖掘數(shù)據(jù)信息的一個(gè)過程。
機(jī)器學(xué)習(xí)是大數(shù)據(jù)分析的核心方法
機(jī)器學(xué)習(xí)就是讓計(jì)算機(jī)從大量的數(shù)據(jù)中學(xué)習(xí)相關(guān)的規(guī)律,然后利用學(xué)習(xí)來的規(guī)律對(duì)未知數(shù)據(jù)進(jìn)行預(yù)測(cè)的方法。
1、機(jī)器學(xué)習(xí)發(fā)展歷程
2、機(jī)器學(xué)習(xí)的分類
2.1、有監(jiān)督學(xué)習(xí)(supervised learning)
數(shù)據(jù)集中的樣本帶有標(biāo)簽,有明確目標(biāo)
實(shí)例:信用風(fēng)險(xiǎn)評(píng)估
根據(jù)用戶的歷史還款記錄和信用賬戶賬齡等信息,預(yù)測(cè)用戶未來是否違約。
2.2、無監(jiān)督學(xué)習(xí)(unsupervised learning)
數(shù)據(jù)集中的樣本沒有標(biāo)簽,沒有明確目標(biāo)
實(shí)例:電信用戶聚類
根據(jù)用戶的通信行為數(shù)據(jù)集,將電信用戶劃分為不同的群體
2.3、強(qiáng)化學(xué)習(xí)(reinforcement learning)
智慧決策的過程,通過過程模擬和觀察來不斷學(xué)習(xí)、提高決策能力
實(shí)例:AlphaGo
3、機(jī)器學(xué)習(xí)的基本概念和流程
3.1、機(jī)器學(xué)習(xí)的基本概念
將實(shí)際問題轉(zhuǎn)換為數(shù)學(xué)問題
明確需要的數(shù)據(jù)的形式
明確機(jī)器學(xué)習(xí)的目標(biāo)分類、回歸還是聚類,還是其他
分類就是根據(jù)樣樣本數(shù)據(jù)的特征或?qū)傩裕瑢⑵浞值侥骋灰延械念悇e中
eg:在電子郵箱服務(wù)中,將郵箱劃分為正常郵件或垃圾郵件,這時(shí)比較典型的一個(gè)分類問題。
在日常生活中,我們會(huì)碰到目標(biāo)特征為連續(xù)型的預(yù)測(cè)問題,例如收入預(yù)測(cè)、銷量預(yù)測(cè)和商品預(yù)測(cè)等,這種問題稱為回歸問題。
eg:根據(jù)鉆石的切割、成色、凈度、卡拉重量和價(jià)格等特征,對(duì)鉆石的價(jià)格進(jìn)行預(yù)測(cè)。
聚類就是將數(shù)據(jù)集中類似的樣本進(jìn)行分組的過程,每一個(gè)稱為一個(gè)“簇”
eg:根據(jù)全球各地觀測(cè)到的氣候特征,將全球劃分為不同的氣候區(qū)域
3.2、機(jī)器學(xué)習(xí)的基本流程
下圖為信貸模型完整流程示意:
信貸模型
目標(biāo):根據(jù)借貸人的基本信息如收入、教育程度、婚姻狀態(tài)等,預(yù)測(cè)借貸人未來是否違約
研究的問題“是否違約”稱為目標(biāo)變量
研究的問題是一個(gè)分類問題
特征:
在信貸模型中,我們收集到的數(shù)據(jù)集中的變量有:性別、收入、教育程度、婚姻狀態(tài)等,我們把這些變量稱為特征。
特征不僅僅包括這些可以直接獲得的變量,還包括利用原始信息構(gòu)成的新的變量。
特征的數(shù)據(jù)類型:
在銀行貸款案例中,我們將獲取到的數(shù)據(jù)集分為兩部分,一部分用來學(xué)習(xí)分類、訓(xùn)練模型,稱之為訓(xùn)練集;另一部分用來預(yù)測(cè),即測(cè)試訓(xùn)練好的模型的預(yù)測(cè)能力,稱之為測(cè)試機(jī)
一般按照一定的比例隨機(jī)的將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試機(jī)
用訓(xùn)練集來訓(xùn)練模型,其中每個(gè)訓(xùn)練樣本由特征和目標(biāo)變量組成
銀行借貸案例中,每個(gè)訓(xùn)練樣本有四種特征(性別、收入、教育程度、婚姻狀態(tài)),一個(gè)目標(biāo)變量(是否違約)
當(dāng)完成模型訓(xùn)練后,利用測(cè)試集對(duì)模型進(jìn)行測(cè)試,檢驗(yàn)?zāi)P偷暮脡?/p>
將測(cè)試集輸入訓(xùn)練好的模型,輸出預(yù)測(cè)值
通過性能指標(biāo),比較預(yù)測(cè)的目標(biāo)變量值和實(shí)際目標(biāo)變量值之間的差別,評(píng)價(jià)模型的好壞
在回歸問題上,通常用均方誤差(MSE)來評(píng)價(jià)模型的好壞
在分類問題上,常用正確率和錯(cuò)誤率來評(píng)價(jià)模型的好壞
混淆矩陣(confusion matrix)可以直觀查看分類問題中預(yù)測(cè)分類與真實(shí)分類的情況
①正確率(Accuracy):正確分類(預(yù)測(cè)類別與實(shí)際類別相等)
樣本數(shù)占樣本總數(shù)的比例:
一般情況下,正確率越大,表示模型預(yù)測(cè)效果越好
② 錯(cuò)誤率:錯(cuò)誤分類(預(yù)測(cè)類別與實(shí)際類別不相等)樣本數(shù)占樣本總數(shù)的比例:
一般來說,錯(cuò)誤率越小,表示模型越策效果越好
③召回率(recall)和精度(precision):
④ROC曲線基本概念:
⑤AUC值:
二、機(jī)器學(xué)習(xí)算法模型與算法
不同的模型能達(dá)到不同的效果,如果選擇錯(cuò)模型,就會(huì)無用功。
1、線性回歸
基本思想:
就是尋找一條直線,使得所有樣本盡可能地落在它的附近,即目標(biāo)變量y和特征x之間的關(guān)系近似遵循一條直線
1.1、公式及圖解
一元線性回歸模型為:
1.2、線性回歸的特點(diǎn):
形式簡(jiǎn)單,易于建模
具有很好的可解釋性
2、邏輯回歸
邏輯回歸之所以稱為“回歸”,是因?yàn)樗捎昧嘶貧w分析的思想。然而,它是用來解決分類問題的模型,通常解決的是二分類問題
邏輯回歸是應(yīng)用最為廣泛的模型之一
①金融領(lǐng)域的風(fēng)險(xiǎn)評(píng)估
②互聯(lián)網(wǎng)廣澳點(diǎn)擊預(yù)測(cè)
從線性回歸到邏輯回歸
在線性回歸中,預(yù)測(cè)目標(biāo)y是連續(xù)型,模型如下
假如要解決的是二分類問題,也就是預(yù)測(cè)目標(biāo)y為離散型
這時(shí)線性回歸無法解決該問題
1
為了能夠利用回歸的方法來解決二分類問題,需要對(duì)線性回歸的輸出作改變
1
改變方式—引入Logistic函數(shù)
2.1、邏輯回歸公式
2.2、邏輯回歸的特點(diǎn)
速度快,適合二分類問題
簡(jiǎn)單易于理解,可以直接看到各個(gè)特征的權(quán)重
3、K近鄰(KNN)
K近鄰并沒有學(xué)習(xí)的過程,而是在預(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)練樣本的類別,通過投票的方式來確定測(cè)試樣本的類別
3.2、K近鄰(KNN)的特點(diǎn)
優(yōu)點(diǎn):
簡(jiǎn)單實(shí)用,易于實(shí)現(xiàn)
對(duì)異常數(shù)據(jù)不敏感
缺點(diǎn):
計(jì)算效率不高
4、決策樹
生活中有很多場(chǎng)景需要我們通過一系列問題的診斷結(jié)果來進(jìn)行決策。
4.1、決策樹的基本結(jié)構(gòu)
一個(gè)根節(jié)點(diǎn)(沒有箭頭指向它):圖中的“收入”就是一個(gè)根節(jié)點(diǎn)
內(nèi)部節(jié)點(diǎn)(既有箭頭指向它,它又有箭頭指出):圖中的“教育程度”就是一個(gè)內(nèi)部節(jié)點(diǎn)
葉子節(jié)點(diǎn)(只有箭頭指向它,它沒有箭頭指出):表示一個(gè)類,圖中粉色和綠色方塊就是兩個(gè)葉子節(jié)點(diǎn)
4.2、決策樹的生成
決策樹模型就是基于特征,自動(dòng)生成一顆具有分類能力的樹的過程
從根節(jié)點(diǎn)開始,進(jìn)行特征的選擇(如年齡)
然后選擇該節(jié)點(diǎn)特征的分裂點(diǎn),根據(jù)分裂點(diǎn)分裂節(jié)點(diǎn)(如50)
然后選擇新的特征作為分支節(jié)點(diǎn),繼續(xù)分裂,直至達(dá)到一定條件停止分裂,形成一顆決策樹
4.3、決策樹的特點(diǎn)
原理簡(jiǎn)單、易于理解
具有較強(qiáng)的解釋性
對(duì)缺失值也有很好的處理方式
5、K-means聚類
聚類:“物以類聚,人以群分”
K-means聚類原理:
將n個(gè)樣本劃分到K個(gè)簇中,其中每個(gè)樣本歸屬于距離自己最近的簇
聚類效果:使簇內(nèi)具有較高的相似度,而簇間的相似度較低
5.1、K-means算法步驟
1、隨機(jī)選取K個(gè)樣本作為初始中心
2、重復(fù)迭代如下步驟直至收斂:
①把每個(gè)樣本指派到最近的中心,形成K個(gè)簇 ②重新計(jì)算每個(gè)簇的中心 ③直到中心不在發(fā)生變化
1
2
3
5.2、K-means算法的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
算法實(shí)現(xiàn)簡(jiǎn)單、直觀
支持多種距離計(jì)算
缺點(diǎn):
聚類結(jié)果依賴于初始于K個(gè)中心的選擇
需要指定K值和初始化K個(gè)簇
不易處理非簇狀數(shù)據(jù),且易受離群值的影響
6、PCA降維
高緯數(shù)據(jù)給數(shù)據(jù)分析帶來的一個(gè)嚴(yán)重的挑戰(zhàn)是維度災(zāi)難問題,即模型的復(fù)雜度和計(jì)算量隨著維數(shù)的增加而呈指數(shù)增長(zhǎng)
降維試解決維度災(zāi)難的一種手段
假如我們現(xiàn)在要借助用戶手機(jī)的通信數(shù)據(jù)對(duì)用戶價(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è):用戶忠誠度、消費(fèi)能力、欠費(fèi)指數(shù),這3個(gè)維度能夠更加直觀地對(duì)用戶價(jià)值進(jìn)行刻畫
即將原始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)地綜合特征稱為主成分
6.2、步驟
6.3、特點(diǎn)
優(yōu)點(diǎn):
計(jì)算效率高
便于理解低維數(shù)據(jù)
缺點(diǎn):
構(gòu)建的主成分特征沒有明確的含義
三、數(shù)據(jù)分析的工具與介紹
1、數(shù)據(jù)分析常用工具
基于Python的Scikit-learn庫
基于Hadoop的Mahout
基于Spark的Mllib模塊
2、常用到的Python模塊
Numpy庫:科學(xué)計(jì)算基礎(chǔ)庫
Pandas庫:數(shù)據(jù)處理和分析工具庫
Scipy庫:算法和數(shù)學(xué)工具庫
Matplotlib:繪制數(shù)據(jù)圖表的庫
Scikit-learn(簡(jiǎn)稱Sklearn)庫:機(jī)器學(xué)習(xí)庫
3、Sklearn庫
3.1、Sklearn庫簡(jiǎn)介
Sklearn是Python著名的機(jī)器學(xué)習(xí)庫
封裝了眾多機(jī)器學(xué)習(xí)算法,內(nèi)置了許多公開數(shù)據(jù)集,且擁有完整的文檔
實(shí)現(xiàn)了數(shù)據(jù)預(yù)處理、分類、回歸、降維、特征選擇、特征抽取和模型評(píng)價(jià)等機(jī)器學(xué)習(xí)功能
Sklearn官網(wǎng):http://scikit-learn.org/stable/index.html#
3.2、常用模塊
分類:Classification
包括邏輯回歸、K近鄰、決策樹等
回歸:Regression
線性回歸
聚類:Clustering
K-means
降維:Dimensionality reduction
主成分分析(PCA)
模型選擇:Model selection
預(yù)處理:Preprocessing
4、Mahout
Apache Mahout是Apache Software Foundation(AFS)旗下的一個(gè)開源項(xiàng)目,提供了一些經(jīng)典的機(jī)器學(xué)習(xí)的算法
Mahout安裝官網(wǎng):http://archive.apache.org/dist/mahout/
基于Hadoop的機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的分布式框架,通過MapReduce模式實(shí)現(xiàn)
封裝了大量數(shù)據(jù)挖掘經(jīng)典算法,包括聚類、分類等
5、基于Spark的Mllib模塊
5.1、Spark簡(jiǎn)介
Spark是專用大規(guī)模數(shù)據(jù)處理而設(shè)計(jì)的快速通用的計(jì)算引擎。具有運(yùn)行速度快。容易使用、通用性強(qiáng)、運(yùn)行模式多樣的特點(diǎn)
Spark安裝官網(wǎng):http://spark.apache.org/downloads.html
Spark 分布式數(shù)據(jù)分析
允許用戶將數(shù)據(jù)加載至集群內(nèi)存,并多次對(duì)其進(jì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è)專門針對(duì)大數(shù)據(jù)處理通用的、快速的引擎
Mllib是Spark的可以拓展的機(jī)器學(xué)習(xí)庫
由以下部分組成:
通用的學(xué)習(xí)算法和工具,包括分類、回歸、聚類、協(xié)同過濾、降維、以及調(diào)優(yōu)等。
Mllib提供的工具:
機(jī)器學(xué)習(xí)算法:常用的學(xué)習(xí)算法,如分類、回歸、聚類
特征:特征提取、選擇及降維
存儲(chǔ):保存和加載算法、模型
實(shí)用工具:線性代數(shù),統(tǒng)計(jì),數(shù)據(jù)處理等
四、使用K近鄰構(gòu)造糖尿病診斷模型(案例)
1、前提準(zhǔn)備
此案例的目標(biāo):
根據(jù)歷史數(shù)據(jù)信息,建立糖尿病自動(dòng)診斷模型,預(yù)測(cè)被診斷者是否患有糖尿病
分類問題
使用K鄰近算法進(jìn)行分類
糖尿病的背景介紹:
主要特征:高血糖
檢測(cè)糖尿病大多需要檢查血糖、體重、胰島素水平等
數(shù)據(jù)集特征說明:
2、分析過程
2.1、數(shù)據(jù)導(dǎo)入
載入pandas庫,利用read_csv函數(shù)讀取數(shù)據(jù)
import pandas as pd diabetes = pd.read_csv("./input/india_diabetes.csv")
1
2
數(shù)據(jù)查看
# 數(shù)據(jù)查看 display(diabetes.head(10))
1
2
導(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]
1
2
特征變量中,懷孕次數(shù)(Pregnancies)為離散型特征,其它為連續(xù)型特征
另一種切分方法:載入sklearn.model_selection,利用train_test_split()函數(shù)將數(shù)據(jù)集按照一定的比例隨機(jī)劃分為訓(xùn)練集和測(cè)試機(jī)
# 將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集 # 通過控制random_state # 可以保證每次切分的時(shí)候,得到的結(jié)果是一樣的 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.2,random_state=10,stratify=diabetes['Outcome'])
1
2
3
4
5
代碼解釋:
將數(shù)據(jù)集按8:2比例劃分成訓(xùn)練集(train)和測(cè)試集(test)
test_size為測(cè)試集比例(0.2表示測(cè)試集占總樣本的比例)
參數(shù)stratify保持測(cè)試集和訓(xùn)練集中Outcome(目標(biāo)變量)類別比例不變
用訓(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)
1
2
3
4
5
利用測(cè)試集測(cè)試模型:
# 測(cè)試模型 y_predict = knn.predict(X_test) # 測(cè)試集上的預(yù)測(cè)結(jié)果 y_predict
1
2
3
4
其中"1"表示"是",“0"表示"否”
模型性能評(píng)估
sklearn中有可直接得出正確率的函數(shù):accuracy_score()
# 查看模型的正確率 from sklearn.metrics import accuracy_score accuracy_score(y_test,y_predict) # 74.5%的數(shù)據(jù)預(yù)測(cè)是正確的
1
2
3
4
得到的結(jié)果是:0.745
我們也可以通過混淆矩陣計(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)
1
2
3
4
5
6
7
8
9
利用Python自動(dòng)選取最優(yōu)K值
#最優(yōu)K值 knn_grid.best_params_ {'n_neighbors': 3}
1
2
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%
1
2
3
4
結(jié)果為:0.775
以上就是一個(gè)完整的機(jī)器學(xué)習(xí)流程。
3、完整代碼
# warning import warnings warnings.filterwarnings('ignore') # 數(shù)據(jù)展示方法 from IPython.display import display # 載入pandas import 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ù)類型 diabetes.info() # 描述性統(tǒng)計(jì) diabetes.describe() # 查看目標(biāo)特征各個(gè)類別的數(shù)量 diabetes['Outcome'].value_counts() 數(shù)據(jù)集劃分 # 將目標(biāo)變量和特征分離 # 特征和label的分離 X=diabetes.iloc[:,:8] Y=diabetes.iloc[:,8:9] # 將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集 # 通過控制random_state # 可以保證每次切分的時(shí)候,得到的結(jié)果是一樣的 from sklearn.model_selection import train_test_split X_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)變量類別比例 y_train['Outcome'].value_counts() # 查看測(cè)試集中目標(biāo)變量類別比例 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_score accuracy_score(y_test,y_predict) # 74.5%的數(shù)據(jù)預(yù)測(cè)是正確的 另一種辦法: from sklearn import metrics import seaborn as sns colorMetrics = metrics.confusion_matrix(y_test,y_predict) sns.heatmap(colorMetrics,annot=True,fmt='d') 選取最優(yōu)K值 from sklearn.model_selection import GridSearchCV 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) #最優(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%
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
本次的分享就到這里了,
好書不厭讀百回,熟讀課思子自知。而我想要成為全場(chǎng)最靚的仔,就必須堅(jiān)持通過學(xué)習(xí)來獲取更多知識(shí),用知識(shí)改變命運(yùn),用博客見證成長(zhǎng),用行動(dòng)證明我在努力。
如果我的博客對(duì)你有幫助、如果你喜歡我的博客內(nèi)容,請(qǐng)“” “評(píng)論”“”一鍵三連哦!聽說的人運(yùn)氣不會(huì)太差,每一天都會(huì)元?dú)鉂M滿呦!如果實(shí)在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。
碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力。后不要忘了關(guān)注我哦!
大數(shù)據(jù) 數(shù)據(jù)挖掘 機(jī)器學(xué)習(xí)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。