你相亲成功的几率有多高?机器学习硬核预测
一 序
人工智能(AI)是一個(gè)自從計(jì)算機(jī)被發(fā)明開(kāi)始就存在的一個(gè)技術(shù)領(lǐng)域。從1956年Marvin Minsky、John McCarthy等人在達(dá)特茅斯學(xué)院的會(huì)議中第一次提出人工智能這個(gè)概念開(kāi)始,AI這個(gè)領(lǐng)域的概念、技術(shù)和研究經(jīng)歷了非常長(zhǎng)足的發(fā)展。
其中,機(jī)器學(xué)習(xí)是人工智能領(lǐng)域當(dāng)中最核心也是最廣泛應(yīng)用的一個(gè)子領(lǐng)域,旨在通過(guò)一系列數(shù)學(xué)的方法,如統(tǒng)計(jì)、概率論、線性代數(shù)等方法,設(shè)計(jì)和分析讓計(jì)算機(jī)可以自動(dòng)學(xué)習(xí)的算法。這些算法通過(guò)從大量數(shù)據(jù)中獲取規(guī)律,來(lái)對(duì)未知的的數(shù)據(jù)進(jìn)行預(yù)測(cè)和決策。
機(jī)器學(xué)習(xí)的算法被廣泛地用到計(jì)算機(jī)視覺(jué)、語(yǔ)音、自然語(yǔ)言處理、數(shù)據(jù)挖掘、搜索、廣告、游戲、機(jī)器人、金融等各種行業(yè)。
隨著深度學(xué)習(xí)的興起,產(chǎn)業(yè)界對(duì)于機(jī)器學(xué)習(xí)產(chǎn)生了非常強(qiáng)烈的興趣,也使得機(jī)器學(xué)習(xí)領(lǐng)域開(kāi)始迅速地走向工程化和系統(tǒng)化。
除了機(jī)器學(xué)習(xí)算法本身的不斷創(chuàng)新之外,數(shù)據(jù)和算力的增加也是不可忽視的:大量的數(shù)據(jù),特別是移動(dòng)互聯(lián)網(wǎng)的興起,使機(jī)器學(xué)習(xí)算法得以打破傳統(tǒng)數(shù)據(jù)量的限制;由于GPGPU等高性能處理器開(kāi)始提供大量的算力,又使得我們能夠在可控的時(shí)間內(nèi)(以天為單位甚至更短)進(jìn)行exaflop級(jí)別的算法訓(xùn)練。
在這些的綜合作用下,工業(yè)界開(kāi)始浮現(xiàn)出大量的機(jī)器學(xué)習(xí)系統(tǒng)創(chuàng)新。以2011年Google Brain,即谷歌大腦為代表,機(jī)器學(xué)習(xí)開(kāi)始迅速?gòu)膶?shí)驗(yàn)室轉(zhuǎn)向業(yè)界。
毫無(wú)疑問(wèn),深度學(xué)習(xí)(DeepLearning)是當(dāng)下最熱門(mén)的人工智能技術(shù),在智能推薦、圖像識(shí)別、機(jī)器翻譯、計(jì)算廣告、自動(dòng)駕駛等領(lǐng)域都有突破性的進(jìn)展和應(yīng)用。而深度學(xué)習(xí)的成功很大部分得益于新的計(jì)算框架和異構(gòu)計(jì)算硬件,譬如Tensorflow和NVIDIA GPU。
然而,對(duì)于算法工程師來(lái)說(shuō),要搭建這樣一套學(xué)習(xí)和工作的環(huán)境不是一件容易的事情:需要一個(gè)特定版本的操作系統(tǒng)(最好是Linux),一張或多張GPU卡,安裝GPU驅(qū)動(dòng),安裝深度學(xué)習(xí)計(jì)算框架和其依賴的軟件包等。在調(diào)試深度學(xué)習(xí)算法的過(guò)程中,如果說(shuō)嘗試不同的驅(qū)動(dòng)版本和切換各種版本的軟件庫(kù)還勉強(qiáng)可以接受,那么切換硬件環(huán)境,特別是更換GPU卡就傷筋動(dòng)骨了。
那么,有沒(méi)有能夠一勞永逸解決這些苦惱的方式?阿里云機(jī)器學(xué)習(xí)平臺(tái)PAI出品的一款云端深度學(xué)習(xí)開(kāi)發(fā)環(huán)境:DSW(Data Science Workshop)試圖告訴你,這是個(gè)肯定的答案。
二 云端IDE:阿里巴巴機(jī)器學(xué)習(xí)與PAI-DSW
經(jīng)過(guò)20年的快速發(fā)展,阿里巴巴已經(jīng)組建了一個(gè)龐大的商業(yè)生態(tài)圈,并在支付、云計(jì)算、本地生活服務(wù)等行業(yè)保持互聯(lián)網(wǎng)巨頭地位。其中電商年交易額達(dá)到5.7萬(wàn)億元、占據(jù)中國(guó)網(wǎng)購(gòu)市場(chǎng)超6成份額,阿里云支撐了2019年雙11 期間峰值 54.4 萬(wàn)筆/秒、單日數(shù)據(jù)處理量達(dá)到 970PB 的世界級(jí)的流量洪峰,成為業(yè)界第一個(gè)實(shí)現(xiàn)此壯舉的云計(jì)算公司。
阿里云機(jī)器學(xué)習(xí)平臺(tái)正是伴隨著這樣龐大而復(fù)雜的阿里經(jīng)濟(jì)體業(yè)務(wù)需求成長(zhǎng)起來(lái)的。下面我們將帶著大家掀開(kāi)阿里云機(jī)器學(xué)習(xí)技術(shù)大圖的一角,看看阿里云機(jī)器學(xué)習(xí),特別是機(jī)器學(xué)習(xí)工程上的發(fā)展、沉淀和創(chuàng)新。
阿里機(jī)器學(xué)習(xí)技術(shù)大圖
我們從用戶和技術(shù)的兩個(gè)角度來(lái)梳理機(jī)器學(xué)習(xí)的技術(shù)體系大圖。從用戶的角度來(lái)說(shuō),根據(jù)使用機(jī)器學(xué)習(xí)的深度不同,在云棲大會(huì)上,我們展示了飛天AI平臺(tái)的技術(shù)分層關(guān)系:
從技術(shù)的角度說(shuō),機(jī)器學(xué)習(xí)從算法到底層的硬件,都涉及到不同的技術(shù)方向。下面是我們對(duì)于核心技術(shù)能力上的一個(gè)總體描述:
每個(gè)技術(shù)方向上都形成各自的布局和沉淀,接下來(lái)我們會(huì)重點(diǎn)講述作為機(jī)器學(xué)習(xí)重要組成部分的工程能力體系建設(shè)。
機(jī)器學(xué)習(xí)工程能力體系
阿里云在機(jī)器學(xué)習(xí)工程體系建設(shè)上,也經(jīng)歷了各領(lǐng)域業(yè)務(wù)需求驅(qū)動(dòng)和技術(shù)驅(qū)動(dòng)分階段螺旋式遞進(jìn)上升的過(guò)程。由最初的通過(guò)傳統(tǒng)機(jī)器學(xué)習(xí)算法進(jìn)行數(shù)據(jù)價(jià)值的粗加工,到今天以深度學(xué)習(xí)為主、支撐各類“行業(yè)大腦”解決方案的人工智能工程體系。
阿里云的機(jī)器學(xué)習(xí)工程能力體系建設(shè)始終圍繞著更高效的融合人工智能三要素(算法、數(shù)據(jù)、算力)進(jìn)行展開(kāi),即追求不斷提升整個(gè)工程體系中的計(jì)算效率、數(shù)據(jù)效率以及工程效率,從而能夠更好的支撐阿里經(jīng)濟(jì)體各方面業(yè)務(wù)快速發(fā)展的需求,并通過(guò)阿里云對(duì)外進(jìn)行技術(shù)輸出,推動(dòng)人工智能領(lǐng)域的技術(shù)變革,產(chǎn)生更大的社會(huì)效益,實(shí)現(xiàn)普惠人工智能。
經(jīng)過(guò)多年的發(fā)展創(chuàng)新,阿里云在AI托管平臺(tái)技術(shù)層進(jìn)行了系統(tǒng)性的建設(shè),極大提升了算法研發(fā)、共享、部署、輸出的效率,在此基礎(chǔ)上沉淀出多個(gè)具有用戶粘性和場(chǎng)景差異化的開(kāi)發(fā)平臺(tái),這里我們選取阿里云機(jī)器學(xué)習(xí)PAI(Platform of Artificial Intelligence)作為代表來(lái)著重來(lái)介紹。
PAI是一款覆蓋機(jī)器學(xué)習(xí)全流程的一站式機(jī)器學(xué)習(xí)平臺(tái)產(chǎn)品,集數(shù)據(jù)預(yù)處理、特征工程、自動(dòng)調(diào)參、模型訓(xùn)練、在線預(yù)測(cè)為一體,為用戶提供低門(mén)檻、高性能的云端機(jī)器學(xué)習(xí)服務(wù)。
PAI相關(guān)技術(shù)脫胎于阿里集團(tuán)內(nèi)數(shù)十個(gè)BU的上千個(gè)業(yè)務(wù)體系,沉淀了大量的覆蓋各個(gè)領(lǐng)域的優(yōu)質(zhì)分布式算法、框架、平臺(tái)等,同時(shí)也在不斷完善和擴(kuò)充機(jī)器學(xué)習(xí)生態(tài)。
阿里云機(jī)器學(xué)習(xí)PAI-DSW
作為在AI戰(zhàn)線上辛勤耕耘的算法工作者,你是否也常常遇到下面的情形:
- 算法需要運(yùn)行在GPU上,可是長(zhǎng)時(shí)間申請(qǐng)不到GPU機(jī)器,只能干著急。
- 終于GPU機(jī)器申請(qǐng)到了,安裝GPU驅(qū)動(dòng)和各種依賴,感覺(jué)是在浪費(fèi)時(shí)間。
- 好不容易環(huán)境弄好了,當(dāng)某天更新算法代碼后變得很慢, 排查半天才發(fā)現(xiàn)是GPU驅(qū)動(dòng)需要升級(jí)補(bǔ)丁,很是無(wú)奈。
- 生產(chǎn)環(huán)境機(jī)器網(wǎng)絡(luò)隔離,在線上要debug代碼,只能使用GDB在命令行進(jìn)行,開(kāi)發(fā)效率大大降低。
- 在本地采用PyCharm這樣的IDE開(kāi)發(fā)好代碼,而數(shù)據(jù)在生產(chǎn)環(huán)境,不允許下載,只能把代碼拷貝到線上機(jī)器運(yùn)行,發(fā)現(xiàn)問(wèn)題時(shí),又得回到本地修改調(diào)試后再來(lái)一遍,非常不便。
- PAI Studio采用圖形化拖拽式,像搭積木一樣分分鐘就構(gòu)建一個(gè)完整的工作流,很炫酷。但想要定制發(fā)布自己的組件時(shí),卻不知從何下手。
在長(zhǎng)期與算法工程師同學(xué)溝通合作的過(guò)程中,我們發(fā)現(xiàn)了算法工程師面臨的這些問(wèn)題。提升機(jī)器學(xué)習(xí)工程效率,降低人工智能使用門(mén)檻,急需一個(gè)簡(jiǎn)單、輕量、好用的工具平臺(tái),從而讓算法工程師更加專注于模型設(shè)計(jì)本身。PAI DSW就是PAI團(tuán)隊(duì)為解決算法工程師的以上痛點(diǎn),新推出的一款云端機(jī)器學(xué)習(xí)開(kāi)發(fā)IDE。
PAI-DSW集成了Jupyterlab、WebIDE等多種開(kāi)源項(xiàng)目,在阿里巴巴集團(tuán)內(nèi)上百個(gè)BU和上千名工程師的打磨之下性能和功能上都進(jìn)行了一定的調(diào)優(yōu)。數(shù)據(jù)上打通了ODPS等多個(gè)數(shù)據(jù)源,方便用戶在構(gòu)建模型的時(shí)候免去重新構(gòu)建數(shù)據(jù)管道的工作。
同時(shí),在深度學(xué)習(xí)上,PAI-DSW內(nèi)置了Tensorboard,可以通過(guò)簡(jiǎn)單的拖拽的方式來(lái)幫助深度學(xué)習(xí)的開(kāi)發(fā)者更好的完成深度學(xué)習(xí)場(chǎng)景下神經(jīng)網(wǎng)絡(luò)的建模。下圖展示了DSW在機(jī)器學(xué)習(xí)平臺(tái)PAI產(chǎn)品架構(gòu)中的位置:
簡(jiǎn)單來(lái)說(shuō),PAI-DSW可以實(shí)現(xiàn)多實(shí)例、多環(huán)境,GPU/CPU資源、JupyterLab、WebIDE以及全屏使用Terminal無(wú)干擾工作。目前PAI-DSW已經(jīng)向所有阿里云的用戶免費(fèi)開(kāi)放了探索者版,只需要登陸阿里云然后打開(kāi) https://dsw-dev.data.aliyun.com/#/ 即可開(kāi)始云上數(shù)據(jù)科學(xué)之旅。接下來(lái)將詳細(xì)介紹如何使用PAI-DSW這一簡(jiǎn)單好用的工具。
三 新手上路:PAI-DSW實(shí)驗(yàn)室創(chuàng)建攻略
Step 1 : 創(chuàng)建并打開(kāi)你的DSW實(shí)驗(yàn)室
前往 https://dsw-dev.data.aliyun.com/#/ 即可創(chuàng)建并進(jìn)入你的實(shí)驗(yàn)室。之前需要確保已經(jīng)登陸了阿里云賬號(hào)和天池賬號(hào)。進(jìn)入之后等待幾秒后我們會(huì)看到如下頁(yè)面:
左側(cè)是DSW實(shí)驗(yàn)室的文件區(qū),雙擊文件夾即可進(jìn)入。中間是工作區(qū),右側(cè)是計(jì)算資源區(qū)域,點(diǎn)擊右邊計(jì)算資源區(qū)的箭頭,即可彈出資源詳情,如下圖所示:
這里我們也可以點(diǎn)擊切換按鈕選擇我們需要的資源進(jìn)行切換。
在文件資源管理區(qū)的頂部還有4個(gè)按鈕,從左到右分別對(duì)應(yīng)的是:打開(kāi)DSW Launcher啟動(dòng)器,新建文件夾,上傳文件以及刷新當(dāng)前文件夾。
在文件夾左側(cè)還有一欄Tab,每個(gè)圖標(biāo)從上到下分別代表了:文件資源管理器,案例代碼,正在運(yùn)行的Notebook,命令面板,在工作區(qū)打開(kāi)的Tab,以及天池的數(shù)據(jù)搜索引擎。
然后我們回到DSW Launcher啟動(dòng)器,也就是工作區(qū)默認(rèn)打開(kāi)的界面,然后點(diǎn)擊Notebook區(qū)域中的Python3,如下圖所示:
Step 2 : 創(chuàng)建一個(gè)Notebook
點(diǎn)擊了Python3圖標(biāo)后,DSW會(huì)自動(dòng)創(chuàng)建一個(gè)ipynb notebook文件。如下圖所示:
Step 3 :寫(xiě)下你的第一行代碼并運(yùn)行
用鼠標(biāo)點(diǎn)擊第一個(gè)框框(我們下面以Cell稱呼),我們就可以開(kāi)始從只讀模式進(jìn)入編輯模式開(kāi)始寫(xiě)代碼了。
這里我們可以先輸入一個(gè)簡(jiǎn)單的:
print("歡迎來(lái)到DSW👏👏👏 你可以把這里當(dāng)作一個(gè)自由自在的實(shí)驗(yàn)室😝,做各種你想嘗試的數(shù)據(jù)實(shí)驗(yàn) ")然后我們同時(shí)按下 shift+ enter回車(chē)這兩個(gè)鍵,就可以看到我們的執(zhí)行結(jié)果了,如下圖所示:
圖中標(biāo)紅的數(shù)字1表示這個(gè)Cell是第一個(gè)被執(zhí)行的,藍(lán)色區(qū)域則表示當(dāng)前聚焦(Focus)的Cell。我們可以在Focus的Cell按下 Enter回車(chē)鍵進(jìn)入編輯模式。我們也可以按下 Esc鍵來(lái)退出編輯模式回到只讀模式。在只讀模式中,我們可以通過(guò)方向鍵上下來(lái)切換Focus的Cell。
Step 4 : 計(jì)算一個(gè)斐波那契數(shù)列
很好,現(xiàn)在你已經(jīng)熟悉了DSW最基本的運(yùn)行Cell的方式,接下來(lái)就讓我們編寫(xiě)一個(gè)簡(jiǎn)單的斐波那契數(shù)列計(jì)算的函數(shù)來(lái)計(jì)算這個(gè)數(shù)列的第10項(xiàng)。把下方的代碼拷貝到新生成的Cell中即可:
# 計(jì)算第 N 個(gè)斐波那契數(shù)列 的函數(shù) def Fibonacci(n): if n<0: print("異常輸入,請(qǐng)確認(rèn)輸入一個(gè)正整數(shù)") # 第一個(gè)斐波那契數(shù)是 0 elif n==1: return 0# 第二個(gè)斐波那契數(shù)是 1 elif n==2: return 1else: return Fibonacci(n-1)+Fibonacci(n-2) # 計(jì)算第10個(gè)斐波那契數(shù)并打印出來(lái) print('第10個(gè)斐波那契數(shù)是:',Fibonacci(10))同樣,輸入代碼后,我們按下 shift+ enter回車(chē) 這兩個(gè)鍵,就可以看到我們的執(zhí)行結(jié)果了,如下圖所示:
這樣,你就掌握了DSW最基本的創(chuàng)建Notebook,便攜代碼和運(yùn)行代碼的方式。
四 快速進(jìn)階:PAI-DSW案例實(shí)戰(zhàn)指南
本著理論與實(shí)踐相結(jié)合的方針,本部分將手把手教你從實(shí)戰(zhàn)場(chǎng)景參與進(jìn)來(lái),實(shí)現(xiàn)從入門(mén)到快速進(jìn)階。
案例:大數(shù)據(jù)算命系列之用機(jī)器學(xué)習(xí)評(píng)估你的相親戰(zhàn)斗力
"用姓名測(cè)試愛(ài)情,80%準(zhǔn)確率!俗話說(shuō),名如其人,緣分就是人生的后半生,為了尋找真緣分的大有人在,因此也就有了姓名緣分測(cè)試。您現(xiàn)在是不是也正在心動(dòng)猶豫,也想要一個(gè)屬于自己的名字配對(duì)緣分測(cè)試了呢?那就請(qǐng)您趕緊行動(dòng)吧!" 以上這段話,你一定已經(jīng)在很多個(gè)微信公眾號(hào)、電視節(jié)目,甚至奇奇怪怪的小網(wǎng)站上看到過(guò)。
你一定很好奇,這個(gè)緣分測(cè)試背后到底是不是有科學(xué)依據(jù)支撐的。
今天,雖然不能直接幫你測(cè)試你和某個(gè)特定的人直接的緣分,但是我們可以借助哥倫比亞大學(xué)多年研究相親找對(duì)象的心血,通過(guò)幾個(gè)簡(jiǎn)單的特征來(lái)評(píng)估你的相親戰(zhàn)斗力指數(shù)。
具體模型的測(cè)試頁(yè)面在這里[1]。在正式開(kāi)始實(shí)驗(yàn)之前,我們需要尋找一個(gè)簡(jiǎn)單好用方便上手的工具,這里推薦阿里云的DSW探索者版[2],它對(duì)于個(gè)人開(kāi)發(fā)者是免費(fèi)的,同時(shí)還有免費(fèi)的GPU資源可以使用,同時(shí)實(shí)驗(yàn)的數(shù)據(jù)還會(huì)免費(fèi)保存30天,不需要購(gòu)買(mǎi),只要登陸就可以使用。今天我們就會(huì)通過(guò)這個(gè)工具來(lái)探索人性的奧秘,走進(jìn)兩性關(guān)系的神秘空間嘿嘿嘿。
整個(gè)實(shí)驗(yàn)的數(shù)據(jù)收集于一個(gè)線下快速相親的實(shí)驗(yàn)[3]。在這個(gè)實(shí)驗(yàn)中,參與者被要求參加多輪與異性進(jìn)行的快速相親,每輪相親持續(xù)4分鐘,在4分鐘結(jié)束后,參與者雙方會(huì)被詢問(wèn)是否愿意與他們的對(duì)象再見(jiàn)面。只有當(dāng)雙方都回答了“是”的時(shí)候,這次相親才算是配對(duì)成功。
同時(shí),參與者也會(huì)被要求通過(guò)以量化的方式從外觀吸引力,真誠(chéng)度,智商,風(fēng)趣程度,事業(yè)心,興趣愛(ài)好這六個(gè)方向來(lái)評(píng)估他們的相親對(duì)象。
這個(gè)數(shù)據(jù)集同時(shí)也包含了很多參加快速相親的參與者的其他相關(guān)信息,比如地理位置,喜好,對(duì)于理想對(duì)象的偏好,收入水平,職業(yè)以及教育背景等等。關(guān)于整個(gè)數(shù)據(jù)集的具體特征描述可以參考相關(guān)文件[4]。
本次我們實(shí)驗(yàn)的目的主要是為了找出,當(dāng)一個(gè)人在參加快速相親時(shí),到底會(huì)有多高的幾率能夠遇到自己心動(dòng)的人并成功牽手。
在我們建模分析探索人性的秘密之前,讓我們先讀入數(shù)據(jù),來(lái)看看我們的數(shù)據(jù)集長(zhǎng)什么樣。
import pandas as pd df = pd.read_csv('Speed Dating Data.csv', encoding='gbk') print(df.shape)通過(guò)觀察,我們不難發(fā)現(xiàn),在這短短的兩年中,這個(gè)實(shí)驗(yàn)的小酒館經(jīng)歷了8000多場(chǎng)快速相親的實(shí)驗(yàn)。由此我們可以非常輕易的推斷出,小酒館的老板應(yīng)該賺的盆滿缽滿(大霧)。
然后從數(shù)據(jù)的寬度來(lái)看,我們會(huì)發(fā)現(xiàn)一共有接近200個(gè)特征。關(guān)于每個(gè)特征的具體描述大家可以參考這篇文檔[5]。然后我們?cè)儆^察數(shù)據(jù)的完整度,看看是否有缺失數(shù)據(jù)。
percent_missing = df.isnull().sum() * 100 / len(df) missing_value_df = pd.DataFrame({'column_name': df.columns,'percent_missing': percent_missing }) missing_value_df.sort_values(by='percent_missing')通過(guò)以上代碼,我們不難發(fā)現(xiàn),其實(shí)還有很多的特征是缺失的。這一點(diǎn)在我們后面做分析和建模的時(shí)候,都需要關(guān)注到。因?yàn)橐坏┮粋€(gè)特征缺失的數(shù)據(jù)較多,就會(huì)導(dǎo)致分析誤差變大或者模型過(guò)擬合/精度下降。看完數(shù)據(jù)的完整程度,我們就可以繼續(xù)往下探索了。
然后第一個(gè)問(wèn)題就來(lái)了,在這8000多場(chǎng)的快速相親中,到底有多少場(chǎng)相親成功為參加的雙方找到了合適的伴侶的?帶著這個(gè)問(wèn)題,我們就可以開(kāi)始我們的第一個(gè)探索性數(shù)據(jù)分析。
# 多少人通過(guò)Speed Dating找到了對(duì)象 plt.subplots(figsize=(3,3), dpi=110,) # 構(gòu)造數(shù)據(jù) size_of_groups=df.match.value_counts().valuessingle_percentage = round(size_of_groups[0]/sum(size_of_groups) * 100,2) matched_percentage = round(size_of_groups[1]/sum(size_of_groups)* 100,2) names = ['Single:' + str(single_percentage) + '%','Matched' + str(matched_percentage) + '%']# 創(chuàng)建餅圖 plt.pie(size_of_groups, labels=names, labeldistance=1.2, colors=Pastel1_3.hex_colors ) plt.show()從上邊的餅圖我們可以發(fā)現(xiàn),真正通過(guò)快速相親找到對(duì)象的比率僅有16.47%。
然后我們就迎來(lái)了我們的第二個(gè)問(wèn)題,這個(gè)比率和參加的人的性別是否有關(guān)呢?這里我們也通過(guò)Pandas自帶的filter的方式:
df[df.gender == 0]來(lái)篩選數(shù)據(jù)集中的性別。通過(guò)閱讀數(shù)據(jù)集的文檔,我們知道0代表的是女生,1代表的是男生。然后同理,我們執(zhí)行類似的代碼:
# 多少女生通過(guò)Speed Dating找到了對(duì)象 plt.subplots(figsize=(3,3), dpi=110,) # 構(gòu)造數(shù)據(jù) size_of_groups=df[df.gender == 0].match.value_counts().values # 男生只需要吧0替換成1即可single_percentage = round(size_of_groups[0]/sum(size_of_groups) * 100,2) matched_percentage = round(size_of_groups[1]/sum(size_of_groups)* 100,2) names = ['Single:' + str(single_percentage) + '%','Matched' + str(matched_percentage) + '%']# 創(chuàng)建餅圖 plt.pie(size_of_groups, labels=names, labeldistance=1.2, colors=Pastel1_3.hex_colors ) plt.show()來(lái)找出女生和男生分別在快速相親中找到對(duì)象的幾率的。
女生的幾率:
男生的幾率:
不難發(fā)現(xiàn),在快速相親中,女生相比于男生還是稍微占據(jù)一些優(yōu)勢(shì)的。女生成功匹配的幾率比男生成功匹配的幾率超出了0.04。
然后第二個(gè)問(wèn)題來(lái)了:是什么樣的人在參加快速相親這樣的活動(dòng)呢?真的都是大齡青年(年齡大于30)嘛?這個(gè)時(shí)候我們就可以通過(guò)對(duì)參加人群的年齡分布來(lái)做一個(gè)統(tǒng)計(jì)分析。
# 年齡分布 age = df[np.isfinite(df['age'])]['age'] plt.hist(age,bins=35) plt.xlabel('Age') plt.ylabel('Frequency')不難發(fā)現(xiàn),參加快速相親的人群主要是22~28歲的群體。這點(diǎn)與我們的預(yù)期有些不太符合,因?yàn)橹髁魅巳翰⒉皇谴簖g青年。接下來(lái)的問(wèn)題就是,年齡是否會(huì)影響相親的成功率呢?和性別相比,哪個(gè)對(duì)于成功率的影響更大?這兩個(gè)問(wèn)題在本文就先埋下一個(gè)伏筆,不一一探索了,希望閱讀文章的你能夠自己探索。
但是這里可以給出一個(gè)非常好用的探索相關(guān)性的方式叫做數(shù)據(jù)相關(guān)性分析。通過(guò)閱讀數(shù)據(jù)集的描述,我已經(jīng)為大家選擇好了一些合適的特征去進(jìn)行相關(guān)性分析。這里合適的定義是指:1)數(shù)據(jù)為數(shù)字類型,而不是字符串等無(wú)法量化的值;2)數(shù)據(jù)的缺失比率較低。
date_df = df[['iid', 'gender', 'pid', 'match', 'int_corr', 'samerace', 'age_o','race_o', 'pf_o_att', 'pf_o_sin', 'pf_o_int', 'pf_o_fun', 'pf_o_amb','pf_o_sha', 'dec_o', 'attr_o', 'sinc_o', 'intel_o', 'fun_o', 'like_o','prob_o', 'met_o', 'age', 'race', 'imprace', 'imprelig', 'goal', 'date','go_out', 'career_c', 'sports', 'tvsports', 'exercise', 'dining','museums', 'art', 'hiking', 'gaming', 'clubbing', 'reading', 'tv','theater', 'movies', 'concerts', 'music', 'shopping', 'yoga', 'attr1_1','sinc1_1', 'intel1_1', 'fun1_1', 'amb1_1', 'attr3_1', 'sinc3_1','fun3_1', 'intel3_1', 'dec', 'attr', 'sinc', 'intel', 'fun', 'like','prob', 'met' ]]# heatmap plt.subplots(figsize=(20,15)) ax = plt.axes() ax.set_title("Correlation Heatmap") corr = date_df.corr() sns.heatmap(corr, xticklabels=corr.columns.values,yticklabels=corr.columns.values)通過(guò)上面這張圖這張相關(guān)性分析的熱力圖,我們可以先關(guān)注一些特別亮的和特別暗的點(diǎn)。比如我們可以發(fā)現(xiàn),在pf_o_att這個(gè)表示相親對(duì)象給出的外觀吸引力這個(gè)特征上,和其他相親對(duì)象給出的評(píng)分基本都是嚴(yán)重負(fù)相關(guān)的,除了pf_o_fun這一特征。由此我們可以推斷出兩個(gè)點(diǎn):
- 大家會(huì)認(rèn)為外觀更加吸引人的人在智商,事業(yè)心,真誠(chéng)度上表現(xiàn)會(huì)相對(duì)較差。換句話說(shuō),可能就是顏值越高越浪。
- 幽默風(fēng)趣的人更容易讓人覺(jué)得外觀上有吸引力,比如下面這位幽默風(fēng)趣的男士(大霧):
然后我們?cè)倏纯次覀冏铌P(guān)注的特征 match,和這一個(gè)特征相關(guān)性比較高的特征是哪幾個(gè)呢?不難發(fā)現(xiàn),其實(shí)就是:
'attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o'這幾個(gè)特征,分別是相親對(duì)方給出的關(guān)于外觀,真誠(chéng)度,智商,風(fēng)趣程度,事業(yè)線以及興趣愛(ài)好的打分。接下來(lái)我們就可以根據(jù)這個(gè)來(lái)進(jìn)行建模了。首先我們將我們的特征和結(jié)果列都放到一個(gè)Dataframe中,然后再去除含有空值的紀(jì)錄。最后我們?cè)俜譃閄和Y用來(lái)做訓(xùn)練。當(dāng)然分為X,y之后,由于我們?cè)谧铋_(kāi)始就發(fā)現(xiàn)只有16.47%的參與場(chǎng)次中成功匹配了,所以我們的數(shù)據(jù)有嚴(yán)重的不均衡,這里我們可以用SVMSMOTE[6]來(lái)增加一下我們的數(shù)據(jù)量避免模型出現(xiàn)過(guò)度擬合。
# preparing the data clean_df = df[['attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o','match']] clean_df.dropna(inplace=True) X=clean_df[['attr_o','sinc_o','intel_o','fun_o','amb_o','shar_o',]] y=clean_df['match']oversample = imblearn.over_sampling.SVMSMOTE() X, y = oversample.fit_resample(X, y)# 做訓(xùn)練集和測(cè)試集分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0, stratify=y)數(shù)據(jù)準(zhǔn)備好之后,我們就可以進(jìn)行模型的構(gòu)建和訓(xùn)練了。通過(guò)以下代碼,我們可以構(gòu)建一個(gè)簡(jiǎn)單的邏輯回歸的模型,并在測(cè)試集上來(lái)測(cè)試。
# logistic regression classification model model = LogisticRegression(C=1, random_state=0) lrc = model.fit(X_train, y_train) predict_train_lrc = lrc.predict(X_train) predict_test_lrc = lrc.predict(X_test) print('Training Accuracy:', metrics.accuracy_score(y_train, predict_train_lrc)) print('Validation Accuracy:', metrics.accuracy_score(y_test, predict_test_lrc))我們可以看到結(jié)果為0.83左右,這樣我們就完成了一個(gè)預(yù)測(cè)在快速相親中是否能夠成功配對(duì)的機(jī)器學(xué)習(xí)模型。針對(duì)這個(gè)模型,數(shù)據(jù)科學(xué)老司機(jī)我還專門(mén)制作了一個(gè)小游戲頁(yè)面[7],來(lái)測(cè)試你的相親戰(zhàn)斗力指數(shù)。
相關(guān)鏈接
[1]https://tianchi.aliyun.com/specials/promotion/dsw-hol?referFrom=alijishu
[2]https://dsw-dev.data.aliyun.com/#/
[3]https://faculty.chicagobooth.edu/emir.kamenica/documents/genderDifferences.pdf
[4]https://pai-public-data.oss-cn-beijing.aliyuncs.com/speed_dating/Speed%20Dating%20Data%20Key.doc
[5]https://pai-public-data.oss-cn-beijing.aliyuncs.com/speed_dating/Speed%20Dating%20Data%20Key.doc
[6]https://imbalanced-learn.readthedocs.io/en/stable/generated/imblearn.over_sampling.SVMSMOTE.html
[7]https://tianchi.aliyun.com/specials/promotion/dsw-hol?referFrom=alijishu
原文鏈接:https://developer.aliyun.com/article/771005?
版權(quán)聲明:本文內(nèi)容由阿里云實(shí)名注冊(cè)用戶自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,阿里云開(kāi)發(fā)者社區(qū)不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。具體規(guī)則請(qǐng)查看《阿里云開(kāi)發(fā)者社區(qū)用戶服務(wù)協(xié)議》和《阿里云開(kāi)發(fā)者社區(qū)知識(shí)產(chǎn)權(quán)保護(hù)指引》。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,填寫(xiě)侵權(quán)投訴表單進(jìn)行舉報(bào),一經(jīng)查實(shí),本社區(qū)將立刻刪除涉嫌侵權(quán)內(nèi)容。總結(jié)
以上是生活随笔為你收集整理的你相亲成功的几率有多高?机器学习硬核预测的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一文搞定 Docker 容器技术与常用命
- 下一篇: 如何基于K8s构建下一代DevOps平台