學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽(tīng)課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

【python】四個(gè)行為特征來(lái)判斷是否需要對(duì)該人進(jìn)行核酸檢測(cè)!

來(lái)源:北大青鳥總部 2020年07月08日 13:19

摘要: 【python】四個(gè)行為特征來(lái)判斷是否需要對(duì)該人進(jìn)行核酸檢測(cè)!
“To be,ornot to be:thatis thequestion”(生存還是毀滅:這是一個(gè)問(wèn)題),這是著名的莎士比亞悲劇《哈姆雷特》中的主人公一句非常經(jīng)典的獨(dú)白,也是數(shù)百年來(lái)經(jīng)常困擾人們的選擇問(wèn)題。這段哈姆雷特式問(wèn)題的臺(tái)詞,經(jīng)常用來(lái)形容一個(gè)人在猶豫在思考時(shí)候的兩難情況,用現(xiàn)代人的說(shuō)法就是“選擇困難癥”。人們經(jīng)常糾結(jié)于各種選擇,生怕選錯(cuò)了,就會(huì)陷入“藍(lán)瘦香菇”的困境。
人們?cè)诿媾R選擇難題的時(shí)候經(jīng)常想:如果能未卜先知,那該多好。實(shí)際上,在人工智能領(lǐng)域,就有一種預(yù)測(cè)算法,利用樹(shù)杈的形狀,非常形象地來(lái)解決這種選擇問(wèn)題,這就是決策樹(shù)算法,它是一個(gè)非常廣泛應(yīng)用的算法,其原理是通過(guò)對(duì)一系列問(wèn)題進(jìn)行“是/否”的推導(dǎo),最終實(shí)現(xiàn)決策。在機(jī)器學(xué)習(xí)發(fā)展到如今,決策樹(shù)算法越來(lái)越得到更多的應(yīng)用,我們也可以說(shuō)它是解決“選擇困難癥”的良藥。本文為了讓讀者朋友較好理解該算法,用python編程進(jìn)行一個(gè)實(shí)際應(yīng)用的示范。
新冠檢測(cè)和決策樹(shù)的基本原理
決策樹(shù)算法是一種典型的、逼近離散函數(shù)值的分類方法。主要是先對(duì)數(shù)據(jù)進(jìn)行處理,利用歸納算法生成可讀的規(guī)則和決策樹(shù),然后使用決策對(duì)新數(shù)據(jù)進(jìn)行分析。決策樹(shù)算法應(yīng)用非常廣泛,例如在目前新冠疫情下,由于核酸檢測(cè)條件和資源有限,不能夠?qū)λ腥硕歼M(jìn)行檢測(cè),因此對(duì)有疑似感染人員的一些行為特征進(jìn)行推導(dǎo),最終判斷其是否需要進(jìn)行核酸檢測(cè)來(lái)進(jìn)一步確診,也是很有必要的。比如調(diào)查和征詢病人的近期行為:“去過(guò)醫(yī)院或高危聚集地、防護(hù)措施是否到位、有病患接觸史、是否發(fā)燒咳嗽”,這四個(gè)行為特征來(lái)判斷是否需要對(duì)該人進(jìn)行核酸檢測(cè),從而進(jìn)一步確診。


圖中最末端的5個(gè)節(jié)點(diǎn),就是選擇后的判定結(jié)果,也稱為決策樹(shù)的樹(shù)葉。如果樣本的特征特別多、數(shù)據(jù)量大,就需要使用機(jī)器學(xué)習(xí)的辦法來(lái)建立決策樹(shù)的模型進(jìn)行預(yù)測(cè)了。其中,決策樹(shù)算法的最大深度,也就是其max_depth參數(shù),代表了決策樹(shù)的復(fù)雜程度,即上述例子中做出問(wèn)題判斷的數(shù)量,問(wèn)題判斷數(shù)量越多,就代表決策樹(shù)的深度越深,這個(gè)模型的計(jì)算也越復(fù)雜。
在上面的例子中,決策樹(shù)很形象地把新冠疑似人員的幾類行為做了推導(dǎo),如果一個(gè)疑似人員雖然“沒(méi)有去過(guò)醫(yī)院或高危聚集地、但是有病患接觸史”,就要考慮做核酸檢測(cè);如果一個(gè)疑似人員“去過(guò)醫(yī)院或高危聚集地、防護(hù)措施不到位、并且發(fā)燒咳嗽”,說(shuō)明該病人感染可能性較大,就需要做核酸檢測(cè)。通過(guò)決策樹(shù)算法,對(duì)疑似人員進(jìn)行選擇核酸檢測(cè)或不檢測(cè)的判定進(jìn)行預(yù)測(cè),解決了核算檢測(cè)的選擇問(wèn)題。
(注:以上例子僅為了解釋決策樹(shù)算法的模擬描述,不一定代表真實(shí)情況)
決策樹(shù)算法解決選擇困難癥
隨著新冠疫情逐步得到緩解,長(zhǎng)期宅在家中的人們都開(kāi)始考慮去戶外游玩,可是天氣越來(lái)越熱、或者下雨、大風(fēng)等,能不能帶家人一起出去游山玩水還得看老天爺?shù)哪樕?。小明家有一個(gè)剛滿四歲的小孩,疫情期間,“小神獸”在家里都快憋瘋了,天天在家里是上躥下跳的。馬上就是周末了,小明看著家里被折騰的一片狼藉,他必須要做出周末是否能出行游玩的決策。同時(shí)他正好是一個(gè)大數(shù)據(jù)工程師,當(dāng)然可以借助人工智能算法來(lái)預(yù)測(cè)天氣以及出行的可能性,從而做出一個(gè)全家出行游玩的計(jì)劃。本文就通過(guò)決策樹(shù)算法,利用積累了一定時(shí)間的歷史天氣數(shù)據(jù),模擬一下小明的預(yù)測(cè),看看這個(gè)周末他能不能帶全家一起出行游玩。
一、準(zhǔn)備數(shù)據(jù)集
我們采用的數(shù)據(jù)集包含如下特征字段(為簡(jiǎn)略過(guò)程,將數(shù)據(jù)集的各自段值全部轉(zhuǎn)換為數(shù)字):
日期-date、天氣-outlook(0-晴天、1-陰天、2-雨天)、氣溫-temperature(0-炎熱、1-適中、2-寒冷)、濕度-humidity(0-高、1-中、2-低)、大風(fēng)-strongwind(0-有、1-無(wú)),另外還有一個(gè)輸出分類結(jié)果:出行的選擇-choiceof journey(1-是、0-否)。
下面我們使用python導(dǎo)入數(shù)據(jù)集,并進(jìn)行查看
#載入numpy、pandas,
importnumpy as np
importpandas as pd
#使用pandas加載天氣數(shù)據(jù)集
data= pd.read_csv('weather.csv')
#顯示以下數(shù)據(jù)集前10行
data.head(10)
輸出運(yùn)行結(jié)果如下:

將數(shù)據(jù)集不必要的字段裁剪掉。
#把去掉預(yù)測(cè)目標(biāo)Choiceof journey后的數(shù)據(jù)集作為訓(xùn)練數(shù)據(jù)集X
data.drop(['date'],axis = 1, inplace = True)
X= data.drop(['choice of journey'], axis = 1)
#把預(yù)測(cè)目標(biāo)賦值給y
y= data['choice of journey'].values
二、建立決策樹(shù)模型并訓(xùn)練
生成訓(xùn)練集和測(cè)試集、使用決策樹(shù)算法建模并評(píng)估模型分?jǐn)?shù)。
fromsklearn.model_selection import train_test_split
#將數(shù)據(jù)集拆分為訓(xùn)練數(shù)據(jù)集和測(cè)試數(shù)據(jù)集
X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=42)
#導(dǎo)入用于分類的決策樹(shù)模型
fromsklearn import tree
#設(shè)定決策樹(shù)分類器最大深度為5
DT_clf= tree.DecisionTreeClassifier(max_depth=5)
#擬合訓(xùn)練數(shù)據(jù)集
DT_clf.fit(X_train,y_train)
#打印模型的得分
print('決策樹(shù)模型得分:{:.2f}'.format(DT_clf.score(X_test,y_test)))
輸出結(jié)果為:
決策樹(shù)模型得分:0.85
可以看到,基于這個(gè)天氣數(shù)據(jù)集訓(xùn)練的模型得到了0.85的評(píng)分,也就是說(shuō)這個(gè)模型的預(yù)測(cè)準(zhǔn)確率在85%,可以說(shuō)預(yù)測(cè)準(zhǔn)確率還不錯(cuò),應(yīng)該能夠?yàn)樾∶鹘鉀Q出行的選擇問(wèn)題了。
三、顯示決策樹(shù)的決策流程
在這個(gè)過(guò)程中,決策樹(shù)在每一層當(dāng)中都做了哪些事情呢?我們可以在Jupyternotebook中用一個(gè)名叫g(shù)raphviz的庫(kù)(首先需要借助Anaconda安裝這個(gè)庫(kù)),它能將決策樹(shù)的工作流程展示出來(lái)。輸入代碼:
#導(dǎo)入graphviz工具
importgraphviz
#導(dǎo)入決策樹(shù)中輸出graphviz的接口
fromsklearn.tree import export_graphviz
#加載決策樹(shù)分類模型,將工作流程輸出到dot文件
export_graphviz(DT_clf,out_file=" weather.dot", class_names="choice ofjourney",feature_names=["outlook","temperature","humidity","strongwind"], impurity=False, filled=True)
#打開(kāi)這個(gè)dot文件
withopen("weather.dot") as f:
dot_graph= f.read()
#顯示dot文件中的圖形
graphviz.Source(dot_graph)
輸出結(jié)果為:


上圖非常清晰地展現(xiàn)了決策樹(shù)是如何進(jìn)行預(yù)測(cè)的,可以看出,決策樹(shù)模型首先對(duì)濕度進(jìn)行判斷,在濕度小于或等于0.5這個(gè)條件為True的情況下,決策樹(shù)判斷分類為c,如果是False,則判斷為h,到下一層則對(duì)天氣和溫度進(jìn)行判斷,進(jìn)一步對(duì)樣本進(jìn)行分類,以此類推,直到將樣本全部放進(jìn)2個(gè)分類當(dāng)中。
四、預(yù)測(cè)周末是否出行游玩
模型建立好了,小明可以開(kāi)始籌備周末的出行大計(jì)了,剛剛天氣預(yù)告廣播報(bào)道:本周末天氣為——多云、氣溫26度(適中)、濕度65%(稍高)、風(fēng)力3級(jí)(無(wú)大風(fēng))。
按之前對(duì)特征字段設(shè)定的對(duì)應(yīng)關(guān)系,各特征值解釋為數(shù)字是:[1,1,0,1]
我們可以利用上面步驟建立的決策樹(shù)模型來(lái)預(yù)測(cè)一下,看看小明周末能不能帶全家出去游玩。
#輸入本周末的天氣數(shù)據(jù)
weekend=[[1,1,0,1]]
#使用決策樹(shù)模型做出預(yù)測(cè)
pre= DT_clf.predict(weekend)
ifpre == 1:
 print("預(yù)測(cè)結(jié)果:[周末天氣不錯(cuò),可以去游玩!]")
else:
 print("預(yù)測(cè)結(jié)果:[很遺憾,周末天氣不好,別去了]")
輸出結(jié)果如下:
預(yù)測(cè)結(jié)果:[周末天氣不錯(cuò),可以去游玩!]
小明得到以上預(yù)測(cè)結(jié)果也很興奮,馬上開(kāi)始準(zhǔn)備出行計(jì)劃、路線和設(shè)備。周末小明全家人高高興興地踏了一次青,大家反映都很不錯(cuò),小明的父親形象頓時(shí)偉岸起來(lái)?。決策樹(shù)算法解決了小明出行的“選擇困難癥”,小明也算利用他掌握的算法知識(shí)為家里做了一次貢獻(xiàn)。
決策樹(shù)的優(yōu)化算法
決策樹(shù)算法(DecisionTree)在機(jī)器學(xué)習(xí)算法中,算是一個(gè)非?;A(chǔ)的算法,使用和預(yù)測(cè)也比較簡(jiǎn)單。以上的例子是一個(gè)理想狀況的闡述,在機(jī)器學(xué)習(xí)的實(shí)際項(xiàng)目中,決策樹(shù)算法經(jīng)常會(huì)出現(xiàn)過(guò)擬合的問(wèn)題,這會(huì)讓模型的泛化性能大打折扣。為了避免過(guò)擬合的問(wèn)題出現(xiàn),在決策書算法的基礎(chǔ)之上,科學(xué)家們又衍生出隨機(jī)森林(RandomForests)和梯度上升決策樹(shù)(GradientBoosted DecisionTrees,簡(jiǎn)稱GBDT)算法,大大優(yōu)化了決策樹(shù)算法。限于篇幅,本文對(duì)這兩個(gè)算法就不再深入介紹了,有興趣的讀者朋友可以自行學(xué)習(xí)和編程操作。
熱門班型時(shí)間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計(jì)全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開(kāi)發(fā)全能班 爆滿開(kāi)班
網(wǎng)絡(luò)安全運(yùn)營(yíng)班 爆滿開(kāi)班
報(bào)名優(yōu)惠
免費(fèi)試聽(tīng)
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接