在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

從零開始學習機器學習最簡單的 KNN 算法

WpOh_rgznai100 ? 來源:YXQ ? 2019-06-10 14:00 ? 次閱讀

今天開始,我打算寫寫機器學習教程。說實話,相比爬蟲,掌握機器學習更實用競爭力也更強些。

目前網上大多這類教程對新手都不友好,要么直接調用 Sklearn 包,要么滿篇抽象枯燥的算法公式文字,看這些教程你很難入門,而真正適合入門的手寫 Python 代碼教程寥寥無幾。最近看了慕課網 bobo 老師的機器學習課程后,大呼過癮,最好的機器學習教程沒有之一。我打算以他的教程為基礎并結合自己的理解,從零開始更新機器學習系列推文。

第一篇推文先不扯諸如什么是機器學習、機器學習有哪些算法這些總結性的文章,在你沒有真正知道它是什么之前,這些看了也不會有印象反而會增加心理負荷。

所以我將長驅直入直接從一個算法實戰開始,就像以前爬蟲教程一樣,當你真正感受到它的趣味性后,才會有想去學它的欲望。

下面就從一個場景故事開始。

01 場景代入

在一個酒吧里,吧臺上擺著十杯幾乎一樣的紅酒,老板跟你打趣說想不想來玩個游戲,贏了免費喝酒,輸了付 3 倍酒錢,贏的概率有 50%。你是個愛冒險的人,果斷說玩。

老板接著道:你眼前的這十杯紅酒,每杯略不相同,前五杯屬于「赤霞珠」,后五杯屬于「黑皮諾」。現在,我重新倒一杯酒,你只需要根據剛才的十杯正確地告訴我它屬于哪一類。

聽完你有點心虛:根本不懂酒啊,光靠看和嘗根本區分辨不出來,不過想起自己是搞機器學習的,不由多了幾分底氣爽快地答應了老板。

你沒有急著品酒而是問了老板每杯酒的一些具體信息:酒精濃度、顏色深度等,以及一份紙筆。老板一邊倒一杯新酒,你邊瘋狂打草稿。很快,你告訴老板這杯新酒應該是「赤霞珠」。

老板瞪大了眼下巴也差點驚掉,從來沒有人一口酒都不嘗就能答對,無數人都是反復嘗來嘗去,最后以猶豫不定猜錯而結束。你神秘地笑了笑,老板信守承諾讓你開懷暢飲。微醺之時,老板終于忍不住湊向你打探是怎么做到的。

你炫耀道:無他,但機器學習熟爾。

02 kNN 算法介紹

接下來,我們就要從這個故事中開始接觸機器學習了,機器學習給很多人的感覺就是「難」,所以我編了上面這個故事,就是要引出機器學習的一個最簡單算法:kNN 算法(K-Nearest Neighbor),也叫 K 近鄰算法。

別被「算法」二字嚇到,我保證你只要有高中數學加上一點點 Python 基礎就能學會這個算法。

學會 kNN 算法,只需要三步:

了解 kNN 算法思想

掌握它背后的數學原理(別怕,你初中就學過)

最后用簡單的 Python 代碼實現

在說 kNN 算法前說兩個概念:樣本和特征。

上面的每一杯酒稱作一個「樣本」,十杯酒組成一個樣本集。酒精濃度、顏色深度等信息叫作「特征」。這十杯酒分布在一個多維特征空間中。說到空間,我們最多能感知三維空間,為了理解方便,我們假設區分赤霞珠和黑皮諾,只需利用:酒精濃度和顏色深度兩個特征值。這樣就能在二維坐標軸來直觀展示。

橫軸是酒精濃度值,縱軸是顏色深度值。十杯酒在坐標軸上形成十個點,綠色的 5 個點代表五杯赤霞珠,紅色的 5 個點代表五杯黑皮諾。可以看到兩類酒有明顯的界限。老板新倒的一杯酒是圖中黃色的點。

記得我們的問題么?要確定這杯酒是赤霞珠還是黑皮諾,答案顯而易見,通過主觀距離判斷它應該屬于赤霞珠。

這就用到了 K 近鄰算法思想。該算法首先需要取一個參數 K,機器學習中給的經驗取值是 3,我們假設先取 3 ,具體取多少以后再研究。對于每個新來的點,K 近鄰算法做的事情就是在所有樣本點中尋找離這個新點最近的三個點,統計三個點所屬類別然后投票統計,得票數最多的類別就是新點的類別。

上圖有綠色和紅色兩個類別。離黃色最近的 3 個點都是綠點,所以綠色和紅色類別的投票數是 3:0 ,綠色取勝,所以黃色點就屬于綠色,也就是新的一杯就屬于赤霞珠。

這就是 K 近鄰算法,它的本質就是通過距離判斷兩個樣本是否相似,如果距離夠近就覺得它們相似屬于同一個類別。當然只對比一個樣本是不夠的,誤差會很大,要比較最近的 K 個樣本,看這 K 個 樣本屬于哪個類別最多就認為這個新樣本屬于哪個類別。

是不是很簡單?

再舉一例,老板又倒了杯酒讓你再猜,你可以在坐標軸中畫出它的位置。離它最近的三個點,是兩個紅點和一個綠點。紅綠比例是 2:1,紅色勝出,所以 K 近鄰算法告訴我們這杯酒大概率是黑皮諾。

可以看到 K 近鄰算法就是通過距離來解決分類問題。這里我們解決的二分類問題,事實上 K 近鄰算法天然適合解決多分類問題,除此之外,它也適合解決回歸問題,之后一一細講。

02 數學理論

K 近鄰算法基本思想我們知道了,來看看它背后的數學原理。該算法的「距離」在二維坐標軸中就是兩點之間的距離,計算距離的公式有很多,一般常用歐拉公式,這個我們中學就學過:

解釋下就是:空間中 m 和 n 兩個點,它們的距離等于 x y 兩坐標差的平方和再開根。

如果在三維坐標中,多了個 z 坐標,距離計算公式也相同:

當特征數量有很多個形成多維空間時,再用 x y z 寫就不方便,我們換一個寫法,用 X 加下角標的方式表示特征維度,這樣 n 維 空間兩點之間的距離公式可以寫成:

公式還可以進一步精簡:

這就是 kNN 算法的數學原理,不難吧?

只要計算出新樣本點與樣本集中的每個樣本的坐標距離,然后排序篩選出距離最短的 3 個點,統計這 3 個點所屬類別,數量占多的就是新樣本所屬的酒類。

根據歐拉公式,我們可以用很基礎的 Python 實現。

03 Python 代碼實現

首先隨機設置十個樣本點表示十杯酒,我這里取了 Sklearn 中的葡萄酒數據

集的部分樣本點,這個數據集在之后的算法中會經常用到會慢慢介紹。

1import numpy as np 2X_raw = [[14.23, 5.64], 3 [13.2 , 4.38], 4 [13.16, 5.68], 5 [14.37, 4.80 ], 6 [13.24, 4.32], 7 [12.07, 2.76], 8 [12.43, 3.94], 9 [11.79, 3. ],10 [12.37, 2.12],11 [12.04, 2.6 ]]1213y_raw = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1]

X_raw 的兩列值分別是顏色深度和酒精濃度值,y_raw 中的 0 表示黑皮諾,1 表示赤霞珠。

新的一杯酒信息:

1x_test = np.array([12.8,4.1])

在機器學習中常使用 numpy 的 array 數組而不是列表 list,因為 array 速度快也能執行向量運算,所以在運算之前先把上面的列表轉為數組:

1X_train = np.array(X_raw)2y_train = np.array(y_raw)

有了 X Y 坐標就可以繪制出第一張散點圖:

1import matplotlib.pyplot as plt 2plt.style.use(‘ggplot’) 3plt.figure(figsize=(10,6)) 4 5plt.scatter(X_train[y_train==1,0],X_train[y_train==1,1],s=100,color=color_g,label=‘赤霞珠’) 6plt.scatter(X_train[y_train==0,0],X_train[y_train==0,1],s=100,color=color_r,label=‘黑皮諾’) 7plt.scatter(x_test2[0],x_test2[1],s=100,color=color_y) # x_test 8 9plt.xlabel(‘酒精濃度’)10plt.ylabel(‘顏色深度’)11plt.legend(loc=‘lower right’)1213plt.tight_layout()14plt.savefig(‘葡萄酒樣本.png’)

接著,根據歐拉公式計算黃色的新樣本點到每個樣本點的距離:

1from math import sqrt 2distances = [sqrt(np.sum((x - x_test)**2)) for x in X_train] # 列表推導式 3distances 4 5[out]: 6[1.7658142597679973, 7 1.5558920271021373, 8 2.6135799203391503, 9 1.9784084512557052,10 1.5446682491719705,11 0.540092584655631,12 0.7294518489934753,13 0.4172529209005018,14 1.215113163454334,15 0.7011419257183239]

上面用到了列表生成式,以前的爬蟲教程中經常用到,如果不熟悉可以在公眾號搜索「列表生成式」關鍵字復習。

這樣就計算出了黃色點到每個樣本點的距離,接著找出最近的 3 個點,可以使用 np.argsort 函數返回樣本點的索引位置:

1sort = np.argsort(distances)2sort34[out]:array([7, 5, 9, 6, 8, 4, 1, 0, 3, 2], dtype=int64)

通過這個索引值就能在 y_train 中找到對應酒的類別,再統計出排名前 3 的就行了:

1K = 3 2topK = [y_train[i] for i in sort[:K]]3topK45[out]:[1, 1, 1]

可以看到距離黃色點最近的 3 個點都是綠色的赤霞珠,與剛才肉眼觀測的結果一致。

到這里,距離輸出黃色點所屬類別只剩最后一步,使用 Counter 函數統計返回類別值即可:

1from collections import Counter2votes = Counter(topK)3votes4[out]:Counter({1: 3})56predict_y = votes.most_common(1)[0][0]7predict_y8[out]:1

最后的分類結果是 1 ,也就是新的一杯酒是赤霞珠。

我們使用 Python 手寫完成了一個簡易的 kNN 算法,是不是不難?

如果覺得難,來看一個更簡單的方法:調用 sklearn 庫中的 kNN 算法,俗稱調包,只要 5 行代碼就能得到同樣的結論。

04 sklearn 調包

1from sklearn.neighbors import KNeighborsClassifier 2kNN_classifier = KNeighborsClassifier(n_neighbors=3)3kNN_classifier.fit(X_train,y_train )4x_test = x_test.reshape(1,-1)5kNN_classifier.predict(x_test)[0]67[out]:1

首先從 sklearn 中引入了 kNN 的分類算法函數 KNeighborsClassifier 并建立模型,設置最近的 K 個樣本數量 n_neighbors 為 3。接下來 fit 訓練模型,最后 predict 預測模型得到分類結果 1,和我們剛才手寫的代碼結果一樣的。

你可以看到,sklearn 調包雖然簡單,不過作為初學者最好是懂得它背后的算法原理,然后用 Python 代碼親自實現一遍,這樣入門機器學習才快。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • KNN
    KNN
    +關注

    關注

    0

    文章

    22

    瀏覽量

    10807
  • 機器學習
    +關注

    關注

    66

    文章

    8419

    瀏覽量

    132674

原文標題:Python手寫機器學習最簡單的KNN算法

文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    傳統機器學習方法和應用指導

    在上一篇文章中,我們介紹了機器學習的關鍵概念術語。在本文中,我們會介紹傳統機器學習的基礎知識和多種算法特征,供各位老師選擇。 01 傳統
    的頭像 發表于 12-30 09:16 ?112次閱讀
    傳統<b class='flag-5'>機器</b><b class='flag-5'>學習</b>方法和應用指導

    NPU與機器學習算法的關系

    在人工智能領域,機器學習算法是實現智能系統的核心。隨著數據量的激增和算法復雜度的提升,對計算資源的需求也在不斷增長。NPU作為一種專門為深度學習
    的頭像 發表于 11-15 09:19 ?468次閱讀

    【每天學點AI】KNN算法簡單有效的機器學習分類器

    過程,其實就是一個簡單的分類問題,而KNN(K-NearestNeighbors)算法正是模仿這種人類決策過程的機器學習
    的頭像 發表于 10-31 14:09 ?331次閱讀
    【每天學點AI】<b class='flag-5'>KNN</b><b class='flag-5'>算法</b>:<b class='flag-5'>簡單</b>有效的<b class='flag-5'>機器</b><b class='flag-5'>學習</b>分類器

    人工智能、機器學習和深度學習存在什么區別

    人工智能指的是在某種程度上顯示出類似人類智能的設備。AI有很多技術,但其中一個很大的子集是機器學習——讓算法從數據中學習
    發表于 10-24 17:22 ?2491次閱讀
    人工智能、<b class='flag-5'>機器</b><b class='flag-5'>學習</b>和深度<b class='flag-5'>學習</b>存在什么區別

    合肥湯誠音頻功放芯片XA9812B早教機套裝兒童智能學習機應用解決方案

    、智能學習機和在線學習平臺等,幫助家長為孩子提供更好的學習環境。 早教機智能學習機是一種先進的教育設備,結合了現代科技和兒童教育理念,旨在為嬰幼兒提供多樣化的
    的頭像 發表于 09-25 17:22 ?456次閱讀
    合肥湯誠音頻功放芯片XA9812B早教機套裝兒童智能<b class='flag-5'>學習機</b>應用解決方案

    【「時間序列與機器學習」閱讀體驗】+ 簡單建議

    這本書以其系統性的框架和深入淺出的講解,為讀者繪制了一幅時間序列分析與機器學習融合應用的宏偉藍圖。作者不僅扎實地構建了時間序列分析的基礎知識,更巧妙地展示了機器學習如何在這一領域發揮巨
    發表于 08-12 11:21

    BP神經網絡的學習機

    BP神經網絡(Backpropagation Neural Network),即反向傳播神經網絡,是一種基于梯度下降算法的多層前饋神經網絡,其學習機制的核心在于通過反向傳播算法
    的頭像 發表于 07-10 15:49 ?610次閱讀

    機器學習算法原理詳解

    機器學習作為人工智能的一個重要分支,其目標是通過讓計算機自動從數據中學習并改進其性能,而無需進行明確的編程。本文將深入解讀幾種常見的機器學習
    的頭像 發表于 07-02 11:25 ?1070次閱讀

    機器學習的經典算法與應用

    關于數據機器學習就是喂入算法和數據,讓算法從數據中尋找一種相應的關系。Iris鳶尾花數據集是一個經典數據集,在統計學習
    的頭像 發表于 06-27 08:27 ?1665次閱讀
    <b class='flag-5'>機器</b><b class='flag-5'>學習</b>的經典<b class='flag-5'>算法</b>與應用

    小度發布首款百度文心大模型學習機

    近日,小度科技推出了一款基于文心大模型的學習機——小度學習機Z30。這款學習機針對學習計劃、診斷、練習、學習、預習、育兒、答疑七大環節進行了
    的頭像 發表于 05-29 09:10 ?832次閱讀

    全球首款基于文心大模型的學習機—小度學習機Z30重磅發布

    AI時代,大模型成為推動智能教育升維發展的新質生產力。5月27日小度科技召開新品發布會,全球首款基于文心大模型的學習機——小度學習機Z30重磅發布,
    的頭像 發表于 05-28 09:30 ?660次閱讀

    AI大模型落地學習機,大模型應用成學習機創新方向

    電子發燒友網報道(文/李彎彎)大模型在終端產品上的落地,除了智能手機、PC之外,還有學習機。過去一段時間,隨著大模型的火熱,互聯網、教育公司都已經紛紛披露大模型在教育領域的最新動態,并發布搭載AI
    的頭像 發表于 02-23 01:19 ?3866次閱讀

    大牛談如何學習機器視覺?

    國內外機器視覺發展的不同。我本人認為,只有先搞清了兩邊的不一樣,才便于說清如何下手學習。國外機器視覺發展到今天,已經從“一包到底”式的工作程序,發展到了細致分工的階段了。
    發表于 01-15 11:02 ?447次閱讀
    大牛談如何<b class='flag-5'>學習機器</b>視覺?

    如何從零開始構建深度學習項目?(如何啟動一個深度學習項目)

    性能重大提升的背后往往是模型設計的改變。不過有些時候對模型進行微調也可以提升機器學習的性能。最終的判斷可能會取決于你對相應任務的基準測試結果。
    發表于 01-11 10:49 ?306次閱讀
    如何<b class='flag-5'>從零開始</b>構建深度<b class='flag-5'>學習</b>項目?(如何啟動一個深度<b class='flag-5'>學習</b>項目)

    如何使用TensorFlow構建機器學習模型

    在這篇文章中,我將逐步講解如何使用 TensorFlow 創建一個簡單機器學習模型。
    的頭像 發表于 01-08 09:25 ?995次閱讀
    如何使用TensorFlow構建<b class='flag-5'>機器</b><b class='flag-5'>學習</b>模型
    主站蜘蛛池模板: 成人午夜大片免费视频77777 | 四虎网址最新| 在线天堂中文在线资源网| 色偷偷男人天堂| 色噜噜狠狠狠综合曰曰曰| 99热免费| 在线观看免费av网| 精品国产一二三区| 成 人 免费 黄 色 视频| 欧美一级看片a免费观看| 人人爽人人澡| 免费观看影院| 国产情侣草莓视频在线| 爽天天天天天天天| 免费无毒片在线观看| 天天都色| 午夜视频免费国产在线| 男人操女人在线观看| 午夜网站视频| 亚洲乱码一二三四区| xxx性xxx| 日韩毛片免费| 在线观看日本免费视频大片一区| 污污视频网址| 亚洲涩综合| 亚洲大成色www永久网| 日韩欧美一级| 国产精品不卡片视频免费观看| 黄视频福利| 2022第二三四天堂网| 久久国产影视| 91大神免费视频| 一区二区三区免费在线| 成 人网站免费| 美女隐私黄www视频| 四虎国产在线观看| 狠狠综合| 丁香五六月婷婷| 1000部啪啪勿入十八免费| 免费在线观看a视频| 亚洲性一区|