主頁 >  其他 > 機器學習-KNN演算法

機器學習-KNN演算法

2023-05-31 08:37:10 其他

1. 演算法原理(K-Nearest Neighbor)
  • 本質是通過距離判斷兩個樣本是否相似,如果距離夠近就認為他們足夠相似屬于同一類別
  • 找到離其最近的 k 個樣本,并將這些樣本稱之 為「近鄰」(nearest neighbor),
  • 對這 k 個近鄰,查看它們的都屬于何種類別(這些類別我們稱作「標簽」 (labels)),
  • 然后根據“少數服從多數,一點算一票”原則進行判斷,數量最多的的標簽類別就是新樣本的標簽類別,
  • 其中涉及到的原理是“越相近越相似”,這也是KNN的基本假設,
2. 實作程序和距離的確定

1) 實作程序

  • 假設 X_test 待標記的資料樣本,X_train 為已標記的資料集,
    • 遍歷已標記資料集中所有的樣本,計算每個樣本與待標記點的距離,并把距離保存在 Distance 陣列中,
    • 對 Distance 陣列進行排序,取距離最近的 k 個點,記為 X_knn.
    • 在 X_knn 中統計每個類別的個數,即 class0 在 X_knn 中有幾個樣本,class1 在 X_knn 中有幾個樣本等,
    • 待標記樣本的類別,就是在 X_knn 中樣本個數最多的那個類別,

2) 距離的確定

  • 該演算法的「距離」在二維坐標軸就表示兩點之間的距離,計算距離的公式有很多,

  • 我們常用歐拉公式,即“歐氏距離”,(x1、x2、x3為特征)
    $$
    \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2 + (x_3 - y_3)^2+...+(x_n - y_n)^2} =\sqrt{ \sum_{i=1}{n}{(x_i-y_i)2}}
    $$

3. 演算法優缺點

演算法超引數是 k(人為設定的引數為超引數),k 可以理解為標記資料周圍幾個數作為參考物件,引數選擇需要根據資料來決定,(通過學習曲線找最優的k)

  • k 值越大,模型的偏差越大,對噪聲資料越不敏感,
  • k 值很大時,可能造成模型欠擬合,
  • k 值越小,模型的方差就會越大,
  • 但是 k 值太小,容易過擬合
4. 演算法的變種

變種一:默認情況下,在計算距離時,權重都是相同的,但實際上我們可以針對不同的鄰居指定不同的距離權重,比如距離越近權重越高,

  • 這個可以通過指定演算法的 weights 引數來實作,

變種二:使用一定半徑內的點取代距離最近的 k 個點

  • 在 scikit-learn 中,RadiusNeighborsClassifier 實作了這種演算法的變種,
  • 當資料采樣不均勻時,該演算法變種可以取得更好的性能,
5. Python代碼實作KNN
  • 紅酒案例
# 紅酒引數
rowdata = https://www.cnblogs.com/arondeng/archive/2023/05/30/{'顏色深度':[14.13,13.2,13.16,14.27,13.24,12.07,12.43,11.79,12.37,12.04],
'酒精濃度': [5.64,4.28,5.68,4.80,4.22,2.76,3.94,3.1,2.12,2.6],
'品種': [0,0,0,0,0,1,1,1,1,1]}
# 0 代表 “黑皮諾”,1 代表 “赤霞珠”
wine_data = https://www.cnblogs.com/arondeng/archive/2023/05/30/pd.DataFrame(rowdata)
   def KNN(x):  #x是輸入的點  回傳類別
       # 1.把10個訓練資料提取到data中
       data = https://www.cnblogs.com/arondeng/archive/2023/05/30/wine_data.iloc[:,:2].values #將前兩列提取出來----data
   
       # 2. 新資料點與10個一維陣列的歐式距離
       # 資料點第一個特征與10個點的歐式距離
       a = ((x-data) ** 2)[:,0] #第一列抽取出來
       # 資料點第二個特征與10個點的歐式距離
       b = ((x-data) ** 2)[:,1] #第二列抽取出來
       # 得到資料點與10個點的歐氏距離
       Distance = np.sqrt(a+b)
       np.sort(Distance)
       # 3.排序找出最近的K個點   K=3
       K3 = np.argsort(Distance)[:3] #得到開始表的索引值     6 1 4
   
       # 4.判斷類別
       y = wine_data.品種
       # 根據頻數統計判斷屬于哪一類
       return pd.Series([y[i] for i in K3]).value_counts().idxmax()
   KNN([[12.3,4.1]])
   # OUT:0
6. SCIKIT-LEARN演算法庫實作KNN(見WineSortKNN.ipynb)
  • scikit-learn,簡稱 sklearn, 支持了包括分類回歸降維聚類四大機器學習演算法,以及特征提取資料預處理模型評估三大模塊,

  • 主要設計原則:
    1) 一致性

    ? 所有物件共享一個簡單一致的界面(介面),

    • 估算器:fit()方法,基于資料估算引數的任意物件,使用的引數是一個資料集(對應 X, 有監督演算法
      還需要一個 y),引導估算程序的任意其他引數稱為超引數,必須被設定為實體變數,
    • 轉換器:transform()方法,使用估算器轉換資料集,轉換程序依賴于學習引數,可以使用便捷方
      式: fit_transform(),相當于先 fit()再 transform(),(fit_transform 有時被優化過,速度更快)
    • 預測器:predict()方法,使用估算器預測新資料,回傳包含預測結果的資料,還有score()方法:用
      于度量給定測驗集的預測效果的好壞,(連續 y 使用 R 方,分類 y 使用準確率 accuracy)

    2)監控

    • 檢查所有引數,所有估算器的超引數可以通過公共實體變數訪問,所有估算器的學習引數都可以通過有下劃線后綴的公共實體變數訪問,

    3)防止類擴散

    • 物件型別固定,資料集被表示為 Numpy 陣列或 Scipy 稀疏矩陣,超參是普通的 Python 字符或數字,

    4) 合成

    • 現有的構件盡可能重用,可以輕松創建一個流水線 Pipeline,

    5)合理默認值

    • 大多數引數提供合理默認值,可以輕松搭建一個基本的作業系統

    6)SKlearn KNN 實作

    class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, *, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)[source]
    
引數名 形式 意義
n_neighbors int, default=5 近鄰 個數
weights {‘uniform’, ‘distance’}, callable or None, default=’uniform’ ? 'uniform':默認引數,不管遠近權重都一樣,就是最普通的 KNN 演算法的形式,
? 'distance':權重和距離成反比,距離預測目標越近具有越高的權重,
? 自定義函式:自定義一個函式,根據輸入的坐標值回傳對應的權重,達到自定義權重的目的,
algorithm {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’ ?'brute' :蠻力實作
? 'kd_tree':KD 樹實作 KNN
? 'ball_tree':球樹實作 KNN
? 'auto': 默認引數,自動選擇合適的方法構建模型
leaf_size int, default=30 當使用KD樹或球樹,它就是是停止建子樹的葉子節點數量的閾值
p int, default=2 p=1為曼哈頓距離
p=2為歐式距離
metric str or callable, default=’minkowski‘ ? 'euclidean' :歐式距離
? 'manhattan':曼哈頓距離
? 'chebyshev':切比雪夫距離
? 'minkowski': 閔可夫斯基距離,默認引數
n_jobs int, default=None 指定多少個CPU進行運算,-1表示全部都算
  • 紅酒案例
from sklearn.neighbors import KNeighborsClassifier

clf = KNeighborsClassifier(n_neighbors=3)
clf = clf.fit(wine_data.iloc[:,0:2].values,wine_data.iloc[:,-1].values)
#測驗單個點
clf.predict([[12.3,4.1]])

# OUT: array([0]) 屬于“黑皮諾”紅酒

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553866.html

標籤:其他

上一篇:【智能軟體安全】上海道寧為您帶來智能軟體安全平臺——?Veracode,幫助您全面地保護您構建和管理地應用程式

下一篇:返回列表

標籤雲
其他(160030) Python(38189) JavaScript(25464) Java(18161) C(15234) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7217) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4579) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1927) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 機器學習-KNN演算法

    ##### 1. 演算法原理(K-Nearest Neighbor) - 本質是通過距離判斷兩個樣本是否相似,如果距離夠近就認為他們足夠相似屬于同一類別 - 找到離其最近的 k 個樣本,并將這些樣本稱之 為「**近鄰**」(nearest neighbor)。 - 對這 k 個近鄰,查看它們的都屬于何 ......

    uj5u.com 2023-05-31 08:37:10 more
  • 【智能軟體安全】上海道寧為您帶來智能軟體安全平臺——?Veracod

    Veracode可以全面地 保護您構建和管理地應用程式 在現代軟體 開發生命周期的 每個階段不斷發現并修復缺陷 Veracode通過 建立一種在安全和開發團隊之間 架起橋梁并授權 開發人員成為 安全倡導者的積極文化 從一開始就防止常見的安全漏洞 開發商介紹 Veracode成立于2006年,起初是一 ......

    uj5u.com 2023-05-31 08:36:56 more
  • 百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 基于 Padd

    [toc] [百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 預測部署簡介與總覽](https://www.cnblogs.com/vipsoft/p/17439619.html) [百度飛槳(PaddlePaddle) - PP-OCRv3 文字檢測識別系統 Padd ......

    uj5u.com 2023-05-31 08:36:42 more
  • 牛客小白月賽73

    # A.最小的數字 ### 題目: ![](https://img2023.cnblogs.com/blog/2960080/202305/2960080-20230526220648535-777334559.png) ### 分析: 簡單列舉一下,找到第一個大于等于n的且是3的倍數的數 ### ......

    uj5u.com 2023-05-31 08:36:21 more
  • 詳解RocketMQ 順序消費機制

    摘要:順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先出(FIFO)的原則進行訊息發布和消費,即先發布的訊息先消費,后發布的訊息后消費。 本文分享自華為云社區《RocketMQ 順序消費機制》,作者: 勇哥java實戰分享 。 順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先 ......

    uj5u.com 2023-05-31 08:35:55 more
  • 隱私合規相關法律法規合集

    01中華人民共和國網路安全法(全文)201611.pdf 02資訊安全技術 個人資訊安全規范GB:T 35273—2017.pdf 03開展App違法違規收集使用個人資訊專項治理-中共中央網路安全和資訊化委員會辦公室201901.pdf 04App違法違規收集使用個人資訊自評估指南201903.pd ......

    uj5u.com 2023-05-31 08:35:46 more
  • 5年測驗工程師經歷,下一步轉開發還是繼續測驗?

    測驗五年,沒有積累編程腳本能力和自動化經驗,找作業時都要求語言能力,自動化框架。
    感覺開發同事積累的經歷容易找作業。
    下一步,想辦法轉開發崗還是繼續測驗???
    正常情況下,有了四年的測驗工程師經歷,應該可以達到中級測驗工程師的水平了。作為一個初中級測驗工程師下一步是轉開發還是繼續做測驗,個人建議是做... ......

    uj5u.com 2023-05-31 08:35:29 more
  • NTP網路校時服務器 (GPS+北斗+恒溫晶振)雙系統設計與研究

    NTP網路校時服務器 (GPS+北斗+恒溫晶振)雙系統設計與研究 NTP網路校時服務器 (GPS+北斗+恒溫晶振)雙系統設計與研究 京準電子科技官微——ahjzsz 一、 概述 NTP網路時間服務器是一款針對計算機網路系統時間同步而設計的高科技產品。產品自主設計開發,在當今計算機網路系統日益盛行的年 ......

    uj5u.com 2023-05-31 08:35:10 more
  • 基于ZigBee3.0技術的數傳電臺功能使用詳解

    一、ZigBee3.0數傳電臺功能簡介 1、4G DTU數傳電臺LINK燈詳解 基于zigbee3.0通信技術的4G DTU數傳電臺LINK燈用于指示模塊當前網路狀態,設備入網成功后LINK燈常亮,當設備沒有網路時LINK燈熄滅;在協調器模式下,該引腳指示zigbee模塊是否正常建立網路,協調器和路 ......

    uj5u.com 2023-05-31 08:35:00 more
  • 提高生產力的最佳免費開源終端:WindTerm

    WindTerm是一個免費的開源終端工具,旨在提高開發人員和系統管理員的生產力。它為使用命令列的用戶帶來了更好的終端體驗,使其能夠更快速、高效地完成操作。

    相比傳統終端,WindTerm具有多個優勢,如支持多標簽頁、自定義主題、自動補全等功能,這些功能都可以顯著提高開發人員的作業效率。此外,Win... ......

    uj5u.com 2023-05-31 08:34:44 more