<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          利用 SQL 實(shí)現(xiàn) KNN 算法

          共 2261字,需瀏覽 5分鐘

           ·

          2021-11-09 10:26

          作為一名數(shù)據(jù)從業(yè)者,大家應(yīng)該對(duì)SQL都不太陌生,對(duì)KNN算法也不是很陌生,但是把這兩個(gè)放在一起很多人估計(jì)就沒(méi)見(jiàn)過(guò)了。今天給大家分享如何利用SQL實(shí)現(xiàn)KNN算法。


          在 2008 年尾的時(shí)候,讀到一本非常有趣的書(shū),叫做《Data Mining With SQL Server 2008》. 在遇到《Inside Sql Server》系列前夕,此時(shí)正值讀書(shū)的空檔期。


          為什么會(huì)對(duì)這本書(shū)感興趣呢,畢竟是作為農(nóng)學(xué)畢業(yè)的我,八竿子也打不到 Data Mining 的領(lǐng)域去,主要還是對(duì)于前途的擔(dān)憂。這話題說(shuō)來(lái),估計(jì)長(zhǎng)的可以寫(xiě)篇小說(shuō)了。


          咱們不賣(mài)焦慮,所以簡(jiǎn)而言之:做了兩年 C/S 的開(kāi)發(fā)之后,深深感到數(shù)據(jù)才是靈魂,而這靈魂的操盤(pán)手,普天之下,Data Mining 穩(wěn)穩(wěn)得排在江湖兵器譜第一位!


          在堅(jiān)持了兩個(gè)月的研究之后,(為什么這么久,只有英語(yǔ)六級(jí)水平的人,看純英文版還是很吃力,當(dāng)時(shí)這本書(shū)還沒(méi)中文本),搗鼓了一點(diǎn)彩票數(shù)據(jù)進(jìn) SQL Server Cube ,以為靠著深?yuàn)W萬(wàn)能的模型,從此可以財(cái)富自由,一時(shí)間豪氣四射,信心倍增,連蛋餅都加 2 個(gè)蛋的,后來(lái)才知其實(shí)那只是黃粱一夢(mèng)。


          在萬(wàn)惡的資本思想驅(qū)使下,一遍遍修煉決策樹(shù),聚類(lèi),神經(jīng)網(wǎng)絡(luò),貝葉斯模型, 每一遍都用真金白銀去豪賭(2 塊錢(qián)一注,當(dāng)時(shí)月薪 1200 吧,所以真是豪賭),收獲的卻是一遍遍的失望,那時(shí)的心,就像 911 下的五角大樓一樣,崩塌在即。直到把聚類(lèi)的模型統(tǒng)統(tǒng)走完,一次都沒(méi)中!從此,Data Mining 與我是路人。


          十年過(guò)來(lái)了,如今大火的數(shù)據(jù)挖掘,又加上了新玩法,美其名曰機(jī)器學(xué)習(xí),人工智能,深度學(xué)習(xí)等。再和朋友們談?wù)摰臅r(shí)候,閉口不談大數(shù)據(jù),AI, ML, 大家都會(huì)帶著異樣的眼光看著你,“你丫也是在 IT 圈混的?”... 所以重新拾起來(lái)看看,與時(shí)俱進(jìn)。其實(shí)內(nèi)心的回答是,“08 年小哥我開(kāi)始玩 Weka 的時(shí)候,你們連 Oracle 都不會(huì)玩吧,還談大數(shù)據(jù),AI”


          言歸正傳,今天的主題是 kNN ( top k nearest ) 最近鄰算法。參考的書(shū)目是兩本《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》(Peter 著)與《機(jī)器學(xué)習(xí)》(周志華著).


          這兩本書(shū)各有其優(yōu)點(diǎn),《實(shí)戰(zhàn)》這本書(shū)對(duì)于 Python 代碼實(shí)現(xiàn)算法講的比較多,讓你很容易就寫(xiě)出一個(gè)模型來(lái)完成一次實(shí)戰(zhàn),跟玩王者一樣的,反饋很及時(shí),而周志華教授的這本《機(jī)器學(xué)習(xí)》則是講的比較細(xì)致了,用的是挑西瓜的例子,很有趣味。


          當(dāng)然 Peter 這本書(shū)用的還是 Python 2.0 , 我費(fèi)了很大的勁兒,才轉(zhuǎn)成 Python 3.0 的語(yǔ)法,以下的例子會(huì)有注解, 而周教授的這本書(shū),則是沒(méi)有數(shù)學(xué)底子根本看不懂在講啥,碰到 kNN , 會(huì)跟你詳細(xì)解釋權(quán)重,概率,線性矩陣,有多少種求解最短距離的算法等,很開(kāi)眼界,讓我瞬間覺(jué)得我活著都是在浪費(fèi)社會(huì)資源。


          用一幅圖來(lái)講解 kNN, 可以讓你瞬間秒懂:



          圖中的五角星,就是我們待分類(lèi)的數(shù)據(jù)。與他最近的 k 個(gè)圓點(diǎn)所代表的類(lèi)別,比重最大的就是預(yù)測(cè)數(shù)據(jù)的類(lèi)別。求解方式很簡(jiǎn)單,在 2 個(gè)屬性下,就是求解直三角形斜邊的長(zhǎng)度,勾股定理一算就出來(lái)了。如果在多個(gè)屬性下,也就是將各自之差的平方相加,再求根,就得到最短距離


          Peter 書(shū)中采用了婚戀網(wǎng)的匹配推薦項(xiàng)目來(lái)演示 kNN。采用的特征分別是:


          1 每年的飛行里程

          2 每天玩視頻游戲所占的時(shí)間份額

          3 每周吃掉的冰激凌分量


          根據(jù)這三個(gè)特征,收集了近1000個(gè)打分結(jié)果,來(lái)判斷約會(huì)雙方對(duì)彼此的影響,是不喜歡,喜歡還是極度渴望約會(huì)。


          求解 kNN 的核心代碼的代碼,經(jīng)過(guò) Python 3.0 修改 之后,如下:



          模型做出來(lái)了,我們就用劃分為測(cè)試用例的數(shù)據(jù)做預(yù)測(cè),觀察其正確率:



          最后得到的誤差是4%,模型可以用來(lái)預(yù)測(cè)分類(lèi)。只要拿到一個(gè)對(duì)象的這三個(gè)特征,就能得到他/她是否能得到大家的喜歡,而這個(gè)結(jié)果有 96% 的準(zhǔn)確性。


          為了更好的了解這個(gè)功能,用 MatPlotLib 做了一個(gè)圖,圖中面積最大的那些點(diǎn),就是最受喜歡的那群人,他們的特征在某些方面具有奇高的重疊



          氣泡圖在 Python 的 MatPlotLib 下實(shí)現(xiàn)也非常容易:



          那么如何用 SQL 實(shí)現(xiàn)呢,kNN 的算法是所有算法中最簡(jiǎn)單的一個(gè),只要對(duì)原理掌握了,不過(guò)是把 Python 換成了 SQL。當(dāng)然這兩者在如今的數(shù)據(jù)量環(huán)境下,都不是好的實(shí)現(xiàn)語(yǔ)言,必須與 Spark , Hadoop 等分布式存儲(chǔ)于計(jì)算環(huán)境結(jié)合起來(lái),方能全量無(wú)死角的洞悉信息。


          以下是兩張數(shù)據(jù)表,第一張 datingSampleDataSet 就是收集好的數(shù)據(jù)其中的900條,第二張 datingTestingDataSet 是從收集好的數(shù)據(jù)中取出來(lái)的 100 條,因這份數(shù)據(jù)已經(jīng)有喜好的分類(lèi)了,因此可以作為誤差的計(jì)算.?


          select *? ?

          from dbo.datingSampleDataSet?


          select *?

          from dbo.datingTestingDataSet?


          在 SQL 的實(shí)現(xiàn)過(guò)程中,我們用一個(gè)函數(shù)來(lái)求解預(yù)測(cè)值的分類(lèi),再來(lái)判斷函數(shù)的誤差。最后得到的誤差和 Python 實(shí)現(xiàn)的一樣,都是 4%。




          對(duì)比Excel系列新書(shū)上市一周銷(xiāo)量持續(xù)新書(shū)榜第一,感興趣的同學(xué)可以點(diǎn)擊下方鏈接進(jìn)行購(gòu)買(mǎi):
          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91做| 日韩无码三级片 | 色欲影视淫色淫香 | 91精品久久久久久久不卡 | 国产性爱精品 |