《機器學習實戰》學習筆記:K-近鄰算法入門及實戰|萬字長文

2021-02-21 量子位
作者:崔家華
東北大學|模式識別與智能系統研究生
量子位 已獲授權編輯發布

在模式識別領域中,K-近鄰算法(KNN算法)是一種用於分類和回歸的非參數統計方法。

在這篇文章中,作者先詳細介紹了K-近鄰算法的基礎知識,接著在Python 3中演示了約會網站配對實戰和sklearn手寫數字識別。形象生動,簡明易懂。

在文章正式開始前,可能你需要這些信息——

Github代碼獲取:

https://github.com/Jack-Cherish/Machine-Learning/

Python版本: Python3.x

運行平臺: Windows

IDE: Sublime text3

想入門的你還不快來上車。

一. 簡單k-近鄰算法

本文將從k-鄰近算法的思想開始講起,使用python3一步一步編寫代碼進行實戰訓練。並且,我也提供了相應的數據集,對代碼進行了詳細的注釋。除此之外,本文也對sklearn實現k-鄰近算法的方法進行了講解。

實戰實例:電影類別分類、約會網站配對效果判定、手寫數字識別。
本文出現的所有代碼和數據集,均可在我的github上下載,歡迎Follow、Star——

下載地址:

https://github.com/Jack-Cherish/Machine-Learning/tree/master/kNN

1.k-近鄰法簡介

k近鄰法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一種基本分類與回歸方法。

它的工作原理是:存在一個樣本數據集合,也稱作為訓練樣本集,並且樣本集中每個數據都存在標籤,即我們知道樣本集中每一個數據與所屬分類的對應關係。

輸入沒有標籤的新數據後,將新的數據的每個特徵與樣本集中數據對應的特徵進行比較,然後算法提取樣本最相似數據(最近鄰)的分類標籤。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是k-近鄰算法中k的出處,通常k是不大於20的整數。

最後,選擇k個最相似數據中出現次數最多的分類,作為新數據的分類。

舉個簡單的例子,我們可以使用k-近鄰算法分類一個電影是愛情片還是動作片。

 表1.1 每部電影的打鬥鏡頭數、接吻鏡頭數以及電影類型

表1.1 就是我們已有的數據集合,也就是訓練樣本集。這個數據集有兩個特徵,即打鬥鏡頭數和接吻鏡頭數。除此之外,我們也知道每個電影的所屬類型,即分類標籤。用肉眼粗略地觀察,接吻鏡頭多的,是愛情片。打鬥鏡頭多的,是動作片。

以我們多年的看片經驗,這個分類還算合理。如果現在給我一部電影,你告訴我這個電影打鬥鏡頭數和接吻鏡頭數。

不告訴我這個電影類型,我可以根據你給我的信息進行判斷,這個電影是屬於愛情片還是動作片。而k-近鄰算法也可以像我們人一樣做到這一點,不同的地方在於,我們的經驗更」牛逼」,而k-鄰近算法是靠已有的數據。

比如,你告訴我這個電影打鬥鏡頭數為2,接吻鏡頭數為102,我的經驗會告訴你這個是愛情片,k-近鄰算法也會告訴你這個是愛情片。

你又告訴我另一個電影打鬥鏡頭數為49,接吻鏡頭數為51,我」邪惡」的經驗可能會告訴你,這有可能是個」愛情動作片」,畫面太美,我不敢想像。 (如果說,你不知道」愛情動作片」是什麼?請評論留言與我聯繫,我需要你這樣像我一樣純潔的朋友。)

但是k-近鄰算法不會告訴你這些,因為在它的眼裡,電影類型只有愛情片和動作片,它會提取樣本集中特徵最相似數據(最鄰近)的分類標籤,得到的結果可能是愛情片,也可能是動作片,但絕不會是」愛情動作片」。當然,這些取決於數據集的大小以及最近鄰的判斷標準等因素。

2.距離度量

我們已經知道k-近鄰算法根據特徵比較,然後提取樣本集中特徵最相似數據(最鄰近)的分類標籤。那麼,如何進行比較呢?比如,我們還是以表1.1為例,怎麼判斷紅色圓點標記的電影所屬的類別呢? 如圖1.1所示。

 圖1.1 電影分類

我們可以從散點圖大致推斷,這個紅色圓點標記的電影可能屬於動作片,因為距離已知的那兩個動作片的圓點更近。k-近鄰算法用什麼方法進行判斷呢?

沒錯,就是距離度量。這個電影分類的例子有2個特徵,也就是在2維實數向量空間,可以使用我們高中學過的兩點距離公式計算距離,如圖1.2所示。


通過計算,我們可以得到如下結果:

(101,20)->動作片(108,5)的距離約為16.55

(101,20)->動作片(115,8)的距離約為18.44

(101,20)->愛情片(5,89)的距離約為118.22

(101,20)->愛情片(1,101)的距離約為128.69

通過計算可知,紅色圓點標記的電影到動作片 (108,5)的距離最近,為16.55。如果算法直接根據這個結果,判斷該紅色圓點標記的電影為動作片,這個算法就是最近鄰算法,而非k-近鄰算法。那麼k-鄰近算法是什麼呢?k-近鄰算法步驟如下:

計算已知類別數據集中的點與當前點之間的距離;

按照距離遞增次序排序;

選取與當前點距離最小的k個點;

確定前k個點所在類別的出現頻率;

返回前k個點所出現頻率最高的類別作為當前點的預測分類。

比如,現在我這個k值取3,那麼在電影例子中,按距離依次排序的三個點分別是動作片(108,5)、動作片(115,8)、愛情片(5,89)。在這三個點中,動作片出現的頻率為三分之二,愛情片出現的頻率為三分之一,所以該紅色圓點標記的電影為動作片。

這個判別過程就是k-近鄰算法。

3.Python3代碼實現

我們已經知道了k-近鄰算法的原理,那麼接下來就是使用Python3實現該算法,依然以電影分類為例。

(1)準備數據集

對於表1.1中的數據,我們可以使用numpy直接創建,代碼如下:

運行結果,如圖1.3所示:

 圖1.3 運行結果

(2)k-近鄰算法

根據兩點距離公式,計算距離,選擇距離最小的前k個點,並返回分類結果。

運行結果,如圖1.4所示:

 圖1.4 運行結果

可以看到,分類結果根據我們的」經驗」,是正確的,儘管這種分類比較耗時,用時1.4s。

到這裡,也許有人早已經發現,電影例子中的特徵是2維的,這樣的距離度量可以用兩 點距離公式計算,但是如果是更高維的呢?

對,沒錯。我們可以用歐氏距離(也稱歐幾裡德度量),如圖1.5所示。我們高中所學的兩點距離公式就是歐氏距離在二維空間上的公式,也就是歐氏距離的n的值為2的情況。

 圖1.5 歐氏距離公式

看到這裡,有人可能會問:「分類器何種情況下會出錯?」或者「答案是否總是正確的?」答案是否定的,分類器並不會得到百分百正確的結果,我們可以使用多種方法檢測分類器的正確率。此外分類器的性能也會受到多種因素的影響,如分類器設置和數據集等。

不同的算法在不同數據集上的表現可能完全不同。為了測試分類器的效果,我們可以使用已知答案的數據,當然答案不能告訴分類器,檢驗分類器給出的結果是否符合預期結果。

通過大量的測試數據,我們可以得到分類器的錯誤率-分類器給出錯誤結果的次數除以測試執行的總數。

錯誤率是常用的評估方法,主要用於評估分類器在某個數據集上的執行效果。完美分類器的錯誤率為0,最差分類器的錯誤率是1.0。

同時,我們也不難發現,k-近鄰算法沒有進行數據的訓練,直接使用未知的數據與已知的數據進行比較,得到結果。因此,可以說k-鄰近算法不具有顯式的學習過程。

二.k-近鄰算法實戰之約會網站配對效果判定

上一小結學習了簡單的k-近鄰算法的實現方法,但是這並不是完整的k-近鄰算法流程,k-近鄰算法的一般流程:

收集數據:可以使用爬蟲進行數據的收集,也可以使用第三方提供的免費或收費的數據。一般來講,數據放在txt文本文件中,按照一定的格式進行存儲,便於解析及處理。

準備數據:使用Python解析、預處理數據。

分析數據:可以使用很多方法對數據進行分析,例如使用Matplotlib將數據可視化。

測試算法:計算錯誤率。

使用算法:錯誤率在可接受範圍內,就可以運行k-近鄰算法進行分類。

已經了解了k-近鄰算法的一般流程,下面開始進入實戰內容。

1.實戰背景

海倫女士一直使用在線約會網站尋找適合自己的約會對象。儘管約會網站會推薦不同的任選,但她並不是喜歡每一個人。經過一番總結,她發現自己交往過的人可以進行如下分類:

海倫收集約會數據已經有了一段時間,她把這些數據存放在文本文件datingTestSet.txt中,每個樣本數據佔據一行,總共有1000行。

datingTestSet.txt數據下載:

https://github.com/Jack-Cherish/Machine-Learning/blob/master/kNN/2.%E6%B5%B7%E4%BC%A6%E7%BA%A6%E4%BC%9A/datingTestSet.txt

海倫收集的樣本數據主要包含以下3種特徵:

每年獲得的飛行常客裡程數

玩視頻遊戲所消耗時間百分比

每周消費的冰淇淋公升數

這裡不得不吐槽一句,海倫是個小吃貨啊,冰淇淋公斤數都影響自己擇偶標準。打開txt文本文件,數據格式如圖2.1所示。

 圖2.1 datingTestSet.txt格式

2.準備數據:數據解析

在將上述特徵數據輸入到分類器前,必須將待處理的數據的格式改變為分類器可以接收的格式。分類器接收的數據是什麼格式的?

從上小結已經知道,要將數據分類兩部分,即特徵矩陣和對應的分類標籤向量。在kNN_test02.py文件中創建名為file2matrix的函數,以此來處理輸入格式問題。 將datingTestSet.txt放到與kNN_test02.py相同目錄下,編寫代碼如下:

運行上述代碼,得到的數據解析結果如圖2.2所示。

 圖2.2 數據解析結果

可以看到,我們已經順利導入數據,並對數據進行解析,格式化為分類器需要的數據格式。接著我們需要了解數據的真正含義。可以通過友好、直觀的圖形化的方式觀察數據。

3.分析數據:數據可視化

在kNN_test02.py文件中編寫名為showdatas的函數,用來將數據可視化。編寫代碼如下:

運行上述代碼,得到的數據解析結果如圖2.2所示。

 圖2.2 數據解析結果

可以看到,我們已經順利導入數據,並對數據進行解析,格式化為分類器需要的數據格式。接著我們需要了解數據的真正含義。可以通過友好、直觀的圖形化的方式觀察數據。

3.分析數據:數據可視化

在kNN_test02.py文件中編寫名為showdatas的函數,用來將數據可視化。編寫代碼如下:

運行上述代碼,可以看到可視化結果如圖2.3所示。

 圖2.3 數據可視化結果

通過數據可以很直觀的發現數據的規律,比如以玩遊戲所消耗時間佔比與每年獲得的飛行常客裡程數,只考慮這二維的特徵信息,給我的感覺就是海倫喜歡有生活質量的男人。

為什麼這麼說呢?每年獲得的飛行常客裡程數表明,海倫喜歡能享受飛行常客獎勵計劃的男人,但是不能經常坐飛機,疲於奔波,滿世界飛。

同時,這個男人也要玩視頻遊戲,並且佔一定時間比例。能到處飛,又能經常玩遊戲的男人是什麼樣的男人?很顯然,有生活質量,並且生活悠閒的人。我的分析,僅僅是通過可視化的數據總結的個人看法。我想,每個人的感受應該也是不盡相同。

4.準備數據:數據歸一化

表2.1給出了四組樣本,如果想要計算樣本3和樣本4之間的距離,可以使用歐拉公式計算。

 表2.1 約會網站樣本數據

計算方法如圖2.4所示。

 圖2.4 計算公式

我們很容易發現,上面方程中數字差值最大的屬性對計算結果的影響最大,也就是說,每年獲取的飛行常客裡程數對於計算結果的影響將遠遠大於表2.1中其他兩個特徵-玩視頻遊戲所耗時間佔比和每周消費冰淇淋公斤數的影響。

而產生這種現象的唯一原因,僅僅是因為飛行常客裡程數遠大於其他特徵值。但海倫認為這三種特徵是同等重要的,因此作為三個等權重的特徵之一,飛行常客裡程數並不應該如此嚴重地影響到計算結果。

在處理這種不同取值範圍的特徵值時,我們通常採用的方法是將數值歸一化,如將取值範圍處理為0到1或者-1到1之間。下面的公式可以將任意取值範圍的特徵值轉化為0到1區間內的值:

其中min和max分別是數據集中的最小特徵值和最大特徵值。雖然改變數值取值範圍增加了分類器的複雜度,但為了得到準確結果,我們必須這樣做。在kNN_test02.py文件中編寫名為autoNorm的函數,用該函數自動將數據歸一化。代碼如下:

運行上述代碼,得到結果如圖2.4所示。

 圖2.4 歸一化函數運行結果

從圖2.4的運行結果可以看到,我們已經順利將數據歸一化了,並且求出了數據的取值範圍和數據的最小值,這兩個值是在分類的時候需要用到的,直接先求解出來,也算是對數據預處理了。

5.測試算法:驗證分類器

機器學習算法一個很重要的工作就是評估算法的正確率,通常我們只提供已有數據的90%作為訓練樣本來訓練分類器,而使用其餘的10%數據去測試分類器,檢測分類器的正確率。

需要注意的是,10%的測試數據應該是隨機選擇的,由於海倫提供的數據並沒有按照特定目的來排序,所以我麼你可以隨意選擇10%數據而不影響其隨機性。

為了測試分類器效果,在kNN_test02.py文件中創建函數datingClassTest,編寫代碼如下:

運行上述代碼,得到結果如圖2.5所示。

 圖2.5 驗證分類器結果

從圖2.5驗證分類器結果中可以看出,錯誤率是3%,這是一個想當不錯的結果。我們可以改變函數datingClassTest內變量hoRatio和分類器k的值,檢測錯誤率是否隨著變量值的變化而增加。依賴於分類算法、數據集和程序設置,分類器的輸出結果可能有很大的不同。

6.使用算法:構建完整可用系統

我們可以給海倫一個小段程序,通過該程序海倫會在約會網站上找到某個人並輸入他的信息。程序會給出她對男方喜歡程度的預測值。

在kNN_test02.py文件中創建函數classifyPerson,代碼如下:

在cmd中,運行程序,並輸入數據(12,44000,0.5),預測結果是」你可能有些喜歡這個人」,也就是這個人魅力一般。一共有三個檔次:討厭、有些喜歡、非常喜歡,對應著不喜歡的人、魅力一般的人、極具魅力的人。結果如圖2.6所示。

 圖2.6 預測結果

三、k-近鄰算法實戰之sklearn手寫數字識別1.實戰背景

對於需要識別的數字已經使用圖形處理軟體,處理成具有相同的色彩和大小:寬高是32像素x32像素。儘管採用本文格式存儲圖像不能有效地利用內存空間,但是為了方便理解,我們將圖片轉換為文本格式,數字的文本格式如圖3.1所示。

 圖3.1 數字的文本格式

與此同時,這些文本格式存儲的數字的文件命名也很有特點,格式為:數字的值_該數字的樣本序號,如圖3.2所示。

 圖3.2 文本數字的存儲格式

對於這樣已經整理好的文本,我們可以直接使用Python處理,進行數字預測。數據集分為訓練集和測試集,使用上小結的方法,自己設計k-近鄰算法分類器,可以實現分類。數據集和實現

代碼下載地址:

https://github.com/Jack-Cherish/Machine-Learning/tree/master/kNN/3.%E6%95%B0%E5%AD%97%E8%AF%86%E5%88%AB

這裡不再講解自己用Python寫的k-鄰域分類器的方法,因為這不是本小節的重點。接下來,我們將使用強大的第三方Python科學計算庫Sklearn構建手寫數字系統。

2.sklearn簡介

使用sklearn可以很方便地讓我們實現一個機器學習算法。一個複雜度算法的實現,使用sklearn可能只需要調用幾行API即可。所以學習sklearn,可以有效減少我們特定任務的實現周期。

3.sklearn安裝

在安裝sklearn之前,需要安裝兩個庫,即numpy+mkl和scipy。不要使用pip3直接進行安裝,因為pip3默安裝的是numpy,而不是numpy+mkl。

第三方庫下載地址:
http://www.lfd.uci.edu/~gohlke/pythonlibs/

這個網站的使用方法,我在之前的文章裡有講過:
http://blog.csdn.net/c406495762/article/details/60156205

找到對應python版本的numpy+mkl和scipy,下載安裝即可,如圖3.3和圖3.4所示。

 圖3.3 numpy+mkl

 圖3.4 scipy

使用pip3安裝好這兩個whl文件後,使用如下指令安裝sklearn。

4.sklearn實現k-近鄰算法簡介

官網英文文檔:

http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

sklearn.neighbors模塊實現了k-近鄰算法,內容如圖3.5所示。

 圖3.5 sklearn.neighbors

我們使用sklearn.neighbors.KNeighborsClassifier就可以是實現上小結,我們實現的k-近鄰算法。KNeighborsClassifier函數一共有8個參數,如圖3.6所示。

 圖3.6 KNeighborsClassifier

KNneighborsClassifier參數說明:

n_neighbors:默認為5,就是k-NN的k的值,選取最近的k個點。

weights:默認是uniform,參數可以是uniform、distance,也可以是用戶自己定義的函數。uniform是均等的權重,就說所有的鄰近點的權重都是相等的。distance是不均等的權重,距離近的點比距離遠的點的影響大。用戶自定義的函數,接收距離的數組,返回一組維數相同的權重。

algorithm:快速k近鄰搜索算法,默認參數為auto,可以理解為算法自己決定合適的搜索算法。除此之外,用戶也可以自己指定搜索算法ball_tree、kd_tree、brute方法進行搜索,brute是蠻力搜索,也就是線性掃描,當訓練集很大時,計算非常耗時。

kd_tree,構造kd樹存儲數據以便對其進行快速檢索的樹形數據結構,kd樹也就是數據結構中的二叉樹。以中值切分構造的樹,每個結點是一個超矩形,在維數小於20時效率高。

ball tree是為了克服kd樹高緯失效而發明的,其構造過程是以質心C和半徑r分割樣本空間,每個節點是一個超球體。

leaf_size:默認是30,這個是構造的kd樹和ball樹的大小。這個值的設置會影響樹構建的速度和搜索速度,同樣也影響著存儲樹所需的內存大小。需要根據問題的性質選擇最優的大小。

metric:用於距離度量,默認度量是minkowski,也就是p=2的歐氏距離(歐幾裡德度量)。

p:距離度量公式。在上小結,我們使用歐氏距離公式進行距離度量。除此之外,還有其他的度量方法,例如曼哈頓距離。這個參數默認為2,也就是默認使用歐式距離公式進行距離度量。也可以設置為1,使用曼哈頓距離公式進行距離度量。

metric_params:距離公式的其他關鍵參數,這個可以不管,使用默認的None即可。

n_jobs:並行處理設置。默認為1,臨近點搜索並行工作數。如果為-1,那麼CPU的所有cores都用於並行工作。

KNeighborsClassifier提供了以一些方法供我們使用,如圖3.7所示。

 圖3.5 KNeighborsClassifier的方法

由於篇幅原因,每個函數的怎麼用,就不具體講解了。官方手冊已經講解的很詳細了,各位可以查看這個手冊進行學習,我們直接講手寫數字識別系統的實現。

5.sklearn小試牛刀

我們知道數字圖片是32x32的二進位圖像,為了方便計算,我們可以將32x32的二進位圖像轉換為1x1024的向量。

對於sklearn的KNeighborsClassifier輸入可以是矩陣,不用一定轉換為向量,不過為了跟自己寫的k-近鄰算法分類器對應上,這裡也做了向量化處理。然後構建kNN分類器,利用分類器做預測。創建kNN_test04.py文件,編寫代碼如下:

運行上述代碼,得到如圖3.8所示的結果。

 圖3.8 sklearn運行結果

上述代碼使用的algorithm參數是auto,更改algorithm參數為brute,使用暴力搜索,你會發現,運行時間變長了,變為10s+。更改n_neighbors參數,你會發現,不同的值,檢測精度也是不同的。自己可以嘗試更改這些參數的設置,加深對其函數的理解。

四、總結1.kNN算法的優缺點

簡單好用,容易理解,精度高,理論成熟,既可以用來做分類也可以用來做回歸;

可用於數值型數據和離散型數據;

訓練時間複雜度為O(n);無數據輸入假定;

對異常值不敏感

計算複雜性高;空間複雜性高;

樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);

一般數值很大的時候不用這個,計算量太大。但是單個樣本又不能太少,否則容易發生誤分。

最大的缺點是無法給出數據的內在含義。

2.其他

關於algorithm參數kd_tree的原理,可以查看《統計學方法 李航》書中的講解;

關於距離度量的方法還有切比雪夫距離、馬氏距離、巴氏距離等;

下篇文章將講解決策樹,歡迎各位的捧場!

如有問題,請留言。如有錯誤,還望指正,謝謝!

五.參考說明

本文中提到的電影類別分類、約會網站配對效果判定、手寫數字識別實例和數據集,均來自於《機器學習實戰》的第二章k-近鄰算法。

本文的理論部分,參考自《統計學習方法 李航》的第三章k近鄰法以及《機器學習實戰》的第二章k-鄰近算法。

點擊左下角「閱讀原文」處,可以進入作者的知乎專欄,可以查看高清完整版代碼

還能解鎖更多優質文章~

量子位AI社群7群開始招募啦,歡迎對AI感興趣的同學,加小助手微信qbitbot2入群;

此外,量子位專業細分群(自動駕駛、CV、NLP、機器學習等)正在招募,面向正在從事相關領域的工程師及研究人員。

進群請加小助手微信號qbitbot2,並務必備註相應群的關鍵詞~通過審核後我們將邀請進群。(專業群審核較嚴,敬請諒解)

量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復「招聘」兩個字。

相關焦點

  • Python機器學習實戰 —— KNN算法詳解
    這個系列按照機器學習實戰的章節來寫,由於市面上已經有很多同類的文章,一般以介紹算法,貼代碼,舉例子為主,個人讀下來,覺得對於實現的代碼還是不能有很好的理解,所有有了這個系列。鄰近算法,或者說K最近鄰(kNN,k-NearestNeighbor)分類算法是數據挖掘分類技術中最簡單的方法之一。所謂K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。平常生活中我們都會下意識的運用到我們的判斷中,比如富人區和窮人區,判斷一個人是富人還是窮人根據他的朋友的判斷,就是運用了kNN的思想。
  • 機器學習實戰之KNN算法
    》的讀書筆記。首先,講講寫本系列教程的原因:第一,《機器學習實戰》的代碼由Python2編寫,有些代碼在Python3上運行已會報錯,本教程基於Python3進行代碼的修訂;第二:之前看了一些機器學習的書籍,沒有進行記錄,很快就忘記掉了,通過編寫教程也是一種複習的過程;第三,機器學習相對於爬蟲和數據分析而言,學習難度更大,希望通過本系列文字教程,讓讀者在學習機器學習的路上少走彎路。
  • 【下載】《機器學習》+《機器學習實戰》
    簡介:機器學習是計算機科學與人工智慧的重要分支領域。 本書作為該領域的入門教材,在內容上儘可能涵蓋機器學習基礎知識的各方面。2.機器學習實戰本書第一部分主要介紹機器學習基礎,以及如何利用算法進行分類,並逐步介紹了多種經典的監督學習算法,如k近鄰算法、樸素貝葉斯算法、Logistic回歸算法、支持向量機、AdaBoost集成方法、基於樹的回歸算法和分類回歸樹(CART)算法等。第三部分則重點介紹無監督學習及其一些主要算法:k均值聚類算法、Apriori算法、FP-Growth算法。第四部分介紹了機器學習算法的一些附屬工具。
  • 機器學習實戰 中英文版 PDF 高清電子書
    讀者可從中學到一些核心的機器學習算法,並將其運用於某些策略性任務中,如分類、預測及推薦等。《機器學習實戰》面向日常任務的高效實戰內容,介紹並實現機器學習的主流算法。《機器學習實戰》沒有從理論角度來揭示機器學習算法背後的數學原理,而是通過「原理簡述+問題實例+實際代碼+運行效果」來介紹每一個算法。學習計算機的人都知道,計算機是一門實踐學科,沒有真正實現運行,很難真正理解算法的精髓。
  • 機器學習實戰(15.2):Apriori算法示例
    在前一章我們了解了Apriori算法。它可以通過尋找物品的不同組合,找到頻繁項以及頻繁項之間的關聯,今天為大家帶來的是Apriori算法的實際應用示例。我們會通過一個從毒蘑菇中尋找相似特徵的示例來看Apriori算法是如何發現頻繁項以及找到他們的關聯關係的。
  • 《機器學習實戰》中英文電子書、源碼分享
    有朋友留言要求分享一下以Python 為基礎的機器學習實戰編程書籍:《Machine Learning In Action》,也就是中文版廣為流傳的《機器學習實戰》,小湯本著一直堅持的「好資源大家一起分享,共同學習,共同進步」的初衷,於是便去找了資料,而且還是中英文兩個版本都有,分享給有需要的小夥伴
  • 機器學習筆記——機器學習實戰之準備(一)
    機器學習的主要任務就分類。機器學習關鍵術語:分類;訓練集;樣本集;訓練樣本;目標樣本;知識表示訓練集是用於機器學習算法的數據樣本集合1.3 機器學習的主要任務機器學習的主要如何解決分類問題,主要任務是將實例數據劃分到合適的分類中。機器學習的另一項任務就是回歸。
  • 機器學習實戰
    想快速入門機器學習領域的童鞋還等什麼?!看小編介紹的這個課程就可以啦!!
  • 【白話機器學習】算法理論+實戰之AdaBoost算法
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 機器學習算法推導&實現——k近鄰和kd樹實現
    我們知道k近鄰法(k-nearest neighbor, KNN)是一種基本的機器學習算法,早在1968年就被提出。
  • 機器學習入門
    機器學習理論主要是設計和分析一些讓計算機可以自動「學習」的算法。機器學習算法是一類從數據中自動分析獲得規律,並利用規律對未知數據進行預測的算法。因為學習算法中涉及了大量的統計學理論,機器學習與統計推斷學聯繫尤為密切,也被稱為統計學習理論。算法設計方面,機器學習理論關注可以實現的,行之有效的學習算法。
  • 【機器學習基礎】數學推導+純Python實現機器學習算法3:k近鄰
    ,k 近鄰在眾多有監督機器學習算法中算是一種比較獨特的方法。說它獨特,是因為 k 近鄰不像其他模型有損失函數、有優化算法、有訓練過程。對於給定的實例數據和實例數據對應所屬類別,當要對新的實例進行分類時,根據這個實例最近的 k 個實例所屬的類別來決定其屬於哪一類。所以相對於其它機器學習模型和算法,k 近鄰總體上而言是一種非常簡單的方法。
  • Weka機器學習使用介紹(數據+算法+實戰)
    Weka機器學習使用介紹(數據+算法+實戰)Weka是懷卡託智能分析環境(Waikato Environment
  • 分類算法之K近鄰算法(KNN)
    算法思路K最近鄰(k-Nearest Neighbor)算法是比較簡單的機器學習算法。它採用測量不同特徵值之間的距離方法進行分類。思路: 如果一個樣本在特徵空間中的k個最近鄰(最相似)的樣本中的大多數都屬於某一個類別,則該樣本也屬於這個類別。算法分析這裡我以javaml庫為例分析算法實現步驟。
  • 人工智慧之K近鄰算法(KNN)
    前言:人工智慧機器學習有關算法內容,請參見公眾號「科技優化生活」之前相關文章。人工智慧之機器學習主要有三大類:1)分類;2)回歸;3)聚類。今天我們重點探討一下K近鄰(KNN)算法。^_^本文引用地址:http://www.eepw.com.cn/article/201806/381808.htm  K近鄰KNN(k-Nearest Neighbor)算法,也叫K最近鄰算法,1968年由 Cover 和 Hart 提出,是機器學習算法中比較成熟的算法之一。K近鄰算法使用的模型實際上對應於對特徵空間的劃分。
  • 推薦:《機器學習實戰:基於Scikit-Learn和TensorFlow》中文翻譯和代碼下載
    本文提供機器學習入門的好書《機器學習實戰:基於Scikit-Learn和TensorFlow》的中文翻譯文件和原始碼下載。一、前言推薦一本機器學習入門的好書:《機器學習實戰:基於Scikit-Learn和TensorFlow》。
  • Python:機器學習-k-近鄰算法之影片分類器
    本次將介紹一個機器學習算法:k-近鄰算法,它非常有效而易於握。我們將探討如使用距離測量的方法分類。k-近鄰算法優點:精度高、對異常值不敏感、無數據輸入假定。創建一個數組以及對應的標籤classifier()方法:inX: 用於分類的輸入數組dataSet: 輸入訓練集labels: 標籤數組k:
  • 【白話機器學習】算法理論+實戰之PageRank算法
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 《PyTorch 機器學習從入門到實戰》國內最懂「小扎」的技術團隊...
    這些影響深遠、大放異彩的光鮮技術背後就是深度學習,這個名詞也成了大多數人心中前沿科技的代名詞。然而,我們必須要認識到的是,這一切奇妙的人工智慧應用,都是建立在優秀的深度學習框架之上的。近日,由校寶在線CTO孫琳,攜校寶研究院技術專家項斌、蔣陽波、汪建成共同撰寫的國內首款介紹PyTorch 深度學習框架在教育信息化領域實戰操作書籍《PyTorch 機器學習從入門到實戰》 正式出版了。
  • 《DEEP LEARNING》《機器學習-周志華》《統計學習方法-李航》《機器學習實戰》《利用Python進行數據分析》
    以下每一本書,都是引領你從入門到精通機器學習的重要武器。