【Machine Learning系列】利用PYTHON實現KNN算法

2021-03-02 社會科學中的機器學習

本文結合KNN算法並依據歐幾裡得距離(Euclidean Distance)來尋找與麥可·喬丹(Michael Jordan)最相似的NBA運動員,以及利用KNN算法回歸功能來預測球員得分。

KNN全稱為:K-nearest neighbours,又稱為最近鄰居法、K近鄰算法,是一種用於分類(classifier)和回歸(regressor)的非參統計法。在KNN分類中,輸出結果是分類族群,一個對象歸屬於哪一類是由其鄰居的「多數表決」決定的,如果k=1,則該對象的類別直接由最近一個節點賦予;在KNN回歸中,輸出結果是對象的屬性值,這個值是其k個最近鄰居的值的平均數。算法準則是:尋找接近新數據點的訓練樣本的數目,根據訓練樣本的信息來預測新數據點的某些信息。 訓練樣本的數目可以是自行指定的常數,如KNN;也可以基於數據點密度而來。

 示範案例

#設定工作環境並讀取數據

%cd F:Dropbox\mlearning

import pandas as pd

data = pd.read_excel('nba.xlsx', 'Sheet2')

# 選擇喬丹(Jordan)為基準點,並選擇其他的參數作為判別相似性依據,並將其標準化

Jordan = data[data['Player'] == 'Michael Jordan'].iloc[0]

factors = ['GP', 'MIN', 'PTS', 'FGM', 'FGA', 'FG%', '3PM', '3PA', '3P%', 'FTM', 'FTA', 'FT%', 'OREB', 'DREB', 'REB', 'AST', 'STL', 'BLK', 'TOV', 'eFG%', 'TS%']

numeric = data[factors]

data_normalized = (numeric - numeric.mean()) / numeric.std()

#定義歐式距離計算函數,並計算每位球員與Jordan間的歐氏距離

def euclidean(row):

    initial = 0

    for f in factors:

        initial += (row[f] - Jordan[f]) ** 2

    return sqrt(initial)

distance = data.apply(euclidean, axis = 1)

#尋找近鄰

from scipy.spatial import distance

Jordan_normalized = data_normalized[data['Player'] == 'Michael Jordan']

distance_1 = data_normalized.apply(lambda row: distance.euclidean(row, Jordan_normalized), axis = 1)

frame = pd.DataFrame(data = {'Index': distance_1.index, 'Distance': distance_1})

frame.sort_values(by = 'Distance', inplace = True)

similar = frame.iloc[1]['Index']

similar_player = data.iloc[int(similar)]['Player']

print similar_player

#輸出結果如下:勒布朗詹姆斯(LeBron James)

以上是關於如何尋找近鄰的詳細說明,接下來可以將原數據拆分為訓練集(train set)和測試集(test set)並對測試集進行預測。

#引入程序包,並隨機數據(類似洗牌數據)

from math import floor

from numpy.random import permutation

shuffle = permutation(data.index)

# 設定斷點,確定斷點前的數據都進入測試集,此處將1/3的數據選入測試集

test_point = floor(len(data) / 3)

# 生成測試集與訓練集

test_set = data.loc[shuffle[1 : test_point + 1]]

train_set = data.loc[shuffle[test_point +1 : ]]

# 設定預測所需的自變量,並將鄰居數量指定為5

indepedent = ['GP', 'MIN', 'FGM', 'FGA', 'FG%', '3PM', '3PA', '3P%', 'FTM', 'FTA', 'FT%', 'OREB', 'DREB', 'REB', 'AST', 'STL', 'BLK', 'TOV', 'eFG%', 'TS%']

depedent = ['PTS']

from sklearn.neighbors import KNeighborsRegressor as KNR

KNN = KNR(n_neighbors = 5)

# 用訓練集來擬合模型,並運用模型對測試集數據進行預測,輸出模型預測值

KNN.fit(train_set[indepedent], train_set[depedent])

prediction = KNN.predict(test_set[indepedent])

print prediction

#輸出結果


#利用均方誤差(Mean Squared Error, MSE)作為誤差估測指標,並評估預測準確程度

actual_value = test_set[depedent]

MSE = ((actual_value - prediction) ** 2).sum() / len(test_set) 

print MSE

#輸出結果


原圖文參考來源:計算機傳播網,「利用Python實現KNN算法」,作者:中國傳媒大學新聞學院,羅晨,以及百度百科。本文部分文字進行刪減。原文請點擊左下「閱讀全文」。。

相關焦點

  • KNN算法原理及代碼實現
    在本例中k=10KNN算法偽碼我們現在設計下KNN偽碼:一. 讀取數據二. 初始化k值三. 為了得到測試數據的預測類別,對訓練集每條數據進行迭代計算測試數據與訓練集中每一條數據的距離。這裡我們選用比較通用的歐幾裡得距離作為距離的實現方法。
  • 小白學數據:教你用Python實現簡單監督學習算法
    用數學表示,即Y = f(X)+ C,其中f表示學生學習時間和考試成績之間的關係X表示輸入(學習小時數)Y表示輸出(考試分數)C表示隨機誤差監督學習算法的終極目標是給出新的輸入X,使得預測結果Y的準確率最大。有很多方法可以實現有監督學習,我們將探討幾種最常用的方法。
  • 詳解線性回歸、樸素貝葉斯、隨機森林在R和Python中的...
    廣義上來說,有3種機器學習算法1. 監督式學習(Supervised Learning)工作機制:該算法由一個目標/結果變量(或因變量)組成,該變量由已知的一系列預測變量(自變量)計算而來。利用這一系列變量,我們生成一個將輸入值映射到所需輸出值的函數。該訓練過程會持續進行,直到模型在訓練數據上達到預期精確度。
  • 如何用i5實現20倍的Python運行速度?
    他對外宣布:在配備四核 i5 的 iMAC 上實現了 20 倍的性能加速!至於他是怎麼做到的,請繼續往下看(含代碼)。James ReindersJames Reinders:利用 Intel Distribution for Python,我實現了 Python 的 20 倍加速,並且可用單個命令關閉/啟用。
  • Python異常值檢測——kNN算法
    異常值檢驗方法有很多,針對不同數據特點,時間序列數據和截面數據的檢測方法不完全相同,其時常要考慮到數據特性,本次主要介紹相關的時序數據異常值檢測算法。 今天介紹kNN算法(k--NearestNeighbor算法),又稱k-近鄰算法。簡單來說就是近朱者赤近墨者黑。
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    本系列文章主要介紹機器學習在實踐中的應用,介紹利用 Python 的生態環境,使用機器學習的算法來解決工程實踐中的問題,而不是介紹算法本身。本系列文章參考了《機器學習Python實踐》,會通過例子一步一步地引導大家使用機器學習來處理和分類與回歸模型相關的問題。
  • 比KNN快380倍!我們有了新選擇
    圖源:Google我們正在經歷一場滅絕性的大事件,頗受歡迎的KNN算法正面臨淘汰,而幾乎每門數據科學課上都會學習這種算法!下列有幾種ANN算法:· Spotify的【ANNOY】· Google的【ScaNN】· Facebook的【Faiss】· 還有個人最愛:分層可導航小世界圖【HNSW】下面我們把焦點從Python的 sklearn中的KNN算法轉向在Python的hnswlib 包中的HNSW圖這一出色的ANN算法。
  • 速度數百倍之差,有人斷言KNN面臨淘汰,更快更強的ANN將取而代之
    解決方案將最近鄰算法擴展至大規模數據的方法是徹底避開暴力距離計算,使用 ANN 算法。近似最近距離算法(ANN)嚴格地講,ANN 是一種在 NN 搜索過程中允許少量誤差的算法。但在實際的 C2C 市場中,真實的鄰居數量比被搜索的 K 近鄰數量要多。
  • 算法系列 | 如何在 S32V 中實現危險駕駛行為檢測
    本篇文章我們就來跟大家如何在 NXP S32V 平臺上危險實現駕駛行為檢測。一、 危險行為行為1.1、概念簡介我們經常遇到這樣的場景:一盞燈變成綠色,你面前的車不走。 另外,在沒有任何意外發生的情況下,前面的車輛突然減速,或者轉彎變道。 等等這些現象,給道路安全帶來了很大的影響。
  • 如何用Python實現iPhone的人臉解鎖功能?
    我對蘋果 FaceID 及其背後的深度學習技術非常感興趣,想知道如何使用深度學習來實現及優化這項技術的每個步驟。在本文中,我將介紹如何使用深度學習框架 Keras 實現一個類似 FaceID 的算法,解釋我所採取的各種架構決策,並使用 Kinect 展示一些最終實驗結果。
  • 利用Opencv中的Houghline方法進行直線檢測---python語言
    Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。
  • python群聊工具實現(上)
    今天要實現的是一個群聊小程序,程序有一個服務端和一個客戶端,客戶端有一個下面如下:當用戶連接上伺服器後,伺服器就會給用戶發送恭喜你已經加入python學習群(後面還會實現在左側顯示用戶的名字),當還有其它用戶繼續加入時,會通知已經加入的用戶,說某個用戶加入python學習群,之後不管哪個用戶發送消息,大家的窗口中都會顯示出消息來
  • 科學家優化預測HLA呈遞抗原的算法
    科學家優化預測HLA呈遞抗原的算法 作者:小柯機器人 發布時間:2019/10/15 14:43:41 美國史丹福大學Ash A. Alizadeh研究組通過整合深度學習方法,預測 II類HLA對抗原的呈遞。
  • 教你用OpenCV實現機器學習最簡單的k-NN算法
    如果可以避免這些房屋而僅僅訪問那些藍隊球迷的家,壓力將會更小,也可以更好地利用時間。由于堅信可以學會預測紅隊球迷居住的地方,我們開始記錄每次的訪問。如果遇到了一個紅隊球迷的家,就在手邊的小鎮地圖上畫一個紅色三角形;否則,就畫一個藍色正方形。一陣子之後,我們就非常了解他們的居住信息了。
  • 神經網絡理論基礎及 Python 實現
    一般意義上將數據分為k份,稱該算法為K-fold cross validation,即每一次選擇k份中的一份作為測試集,剩餘k-1份作為訓練集,重複k次,最終得到平均準確率,是一種比較科學準確的方法。一般情況下可以用兩種函數:(1)tanh(x)函數:tanh(x)=sinh(x)/cosh(x)sinh(x)=(exp(x)-exp(-x))/2cosh(x)=(exp(x)+exp(-x))/2(2)邏輯函數,本文上面用的就是邏輯函數五、BP神經網絡的python
  • 如何利用python實現生命遊戲
    英國數學家約翰·何頓·康威在1970年發明了 the game of life,今天番茄加速就來分享下如何利用python實現生命遊戲,規則如下:每個細胞有兩種狀態 - 存活或死亡每個細胞與以自身為中心的周圍八格細胞產生互動當前細胞為存活狀態時
  • python快速求解不定積分和定積分
    歡迎點擊「算法與編程之美」↑關注我們!