17day-人工智能-機器學習-分類算法-KNN

1. 什么是knn算法

knn算法全名叫做k-近鄰算法(K-Nearest Neighbors,簡稱KNN),看到名字是不是能想到是算距離的,第一個k是指超參數的意思,就是可以認為設置的意思,這里是指最近的k個樣本。

2. 為什么有這個算法

如果我們要給一些數據分類,是不是通過它的一些相似的特征或者都有的特征,我們就將它分為一類,那我們怎么判別數據相不相似是不是可以通過算距離的方法,數據特征都是可以量化為數字的。knn算法就是可以干這個的算距離的。

算距離的方式

3. knn的原理

knn處理的數據是帶有標簽的,在使用訓練集訓練模型的時候,前面說了knn是通過算樣本之間的距離的,所有訓練模型的時候其實什么也沒有干就只是保存了數據集,當測試數據的時候才會執行通過算每個樣本和測試數據的特征距離,算好以后再排個序(由小到大),然后這里就需要自己傳入的k值了,排序完后,就選擇前k個數據,k個里面占比最高的類別是什么測試數據就屬于什么。

假如黑色的點歸為M,紅色的點為N,現在有一個a,k為3,那么就找最近的三個點,這里黑色的點有兩個雖有將a劃分為M。

舉個例子:我們這里測試集有1-9條,然后我們需要判斷出10條什么電影類型的,假如k為3,那么前三條最近的就是8,1,9,全是喜劇片所以我們就推斷10也是喜劇片,原理就這么簡單。

4. api實現

KNeighborsClassifier(n_neighbors=5, algorithm='auto')
參數: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
(1)n_neighbors:?
int, default=5, 默認情況下用于kneighbors查詢的近鄰數,就是K
方法:
(1) fit(x, y)?
使用X作為訓練數據和y作為目標數據 ?
(2) predict(X)?? ?預測提供的數據,得到預測數據 ? ??

# 用KNN算法對鳶尾花進行分類
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier# 1)獲取數據
x,y = load_iris(return_X_y=True)
# 2)劃分數據集
x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state=42)
# 3)特征工程:標準化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)# 4)KNN算法預估器, k=7表示找7個鄰近來判斷自身類型.
estimator = KNeighborsClassifier(n_neighbors=7)
estimator.fit(x_train, y_train)#該步驟就是estimator根據訓練特征和訓練目標在自己學習,讓它自己變聰敏
# 5)模型評估  測試一下聰敏的estimator能力# 方法1:直接比對真實值和預測值,
y_predict = estimator.predict(x_test) #y_predict預測的目標結果
print("y_predict:\n", y_predict)
print("直接比對真實值和預測值:\n", y_test == y_predict)# 方法2:計算準確率,
score = estimator.score(x_test, y_test)# 里面會自己預測y值,然后和y_test作比較,相等的個數/總數
print("準確率為:\n", score) #1.0

準確率100了,過度擬合了,這樣反而是不好的,后面會講到的。

5. knn的缺點

對于大規模數據集,計算量大,因為需要計算測試樣本與所有訓練樣本的距離。

我們這里沒什么感覺是應為數據集只有100多條,但是實際開發中的數據都是幾百萬上千萬的數據,那這個都算一遍就哼恐怖了。

對于高維數據,距離度量可能變得不那么有意義,這就是所謂的“維度災難”

就是那種算出來的距離為99999999912,99999999914,這樣的他們的特征也不一樣,但是這么數據太大了比較就有沒有意義了。

需要選擇合適的k值和距離度量,這可能需要一些實驗和調整。

k值過大過小是不是都會影響準確率,k值太大假如接近全部樣本的數量了,是不是根本就不用測我們直接統計誰的種類多就好了。

但是knn在實際應用開發中應用的好少,是應為他是訓練的時候才去預測的,我們訓練時時間花長一點都是沒事的,但預測的時候太長,那客戶使用的時候且不是要等好久才能有一個結果。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/92360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/92360.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/92360.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

12-netty基礎-手寫rpc-編解碼-04

netty系列文章: 01-netty基礎-socket02-netty基礎-java四種IO模型03-netty基礎-多路復用select、poll、epoll04-netty基礎-Reactor三種模型05-netty基礎-ByteBuf數據結構06-netty基礎-編碼解碼07-netty基礎-自定義編解碼器08-netty基礎-自定義序列化和反序列化09-n…

解決 Windows 下的“幽靈文件”——記一次與帶空格的 .gitignore 文件的艱難斗爭

引言 你是否遇到過這樣的情況:一個文件明明躺在你的文件夾里,ls 或 dir 命令都能清楚地看到它,但無論你用什么方法嘗試刪除,系統都冷酷地告訴你“找不到文件”? 就在今天,我就遇到了這樣一個“幽靈”般的 .…

(易視寶)易視TV is-E4-G-全志A20芯片-安卓4-燒寫卡刷工具及教程

(易視寶)易視TV is-E4-G-全志A20芯片-安卓4-燒寫卡刷工具及教程PhoenixCard_V309燒錄步驟:1、將TF或SD卡插入計算機,打開軟件;2、選擇固件所在目錄;3、燒寫模式選“卡量產”4、點擊“燒錄”開始量產&#x…

(數據結構)順序表實現-增刪查改

1.線性表 線性表(linear list)是n個具有相同特性的數據元素的有限序列。線性表是一種在實際中廣泛使用的數據結構,常見的線性表:順序表、鏈表、棧、隊列、字符串… 線性表在邏輯上是線性結構,也就說是連續的一條直線。但是在物理結構上并不一定是連續的,線性表在物理上存儲時…

【面試八股總結】線程/進程同步問題

一、同步與互斥 在線程并發執行的過程中,進程/線程之間存在協作的關系,例如有互斥、同步的關系。為了實現進程/線程間正確的協作,操作系統必須提供實現進程協作的措施和方法,主要的方法有兩種: 鎖:加鎖、解…

大語言模型提示工程與應用:提示工程入門指南

提示工程入門 學習目標 在本課程中,我們將學習提示工程。 相關知識點 提示工程 學習內容 1 提示工程 提示工程是一門新興學科,專注于設計和優化提示詞以高效利用語言模型完成多樣化任務。掌握提示工程能幫助開發者更深入理解大語言模型(LLM)的能力…

PostgreSQL 多級依賴血緣系統的設計與落地

一、業務背景:三類指標與四種狀態指標類型定義規則依賴關系原子指標單表聚合(SELECT WHERE GROUP)無派生指標在原子/派生指標上加 WHERE、改 GROUP依賴 1~N 個父指標復合指標多個原子/派生指標做加減運算依賴 1~N 個父指標狀態說明已保存草…

阿里云百煉平臺創建智能體-上傳文檔

整體思路是: 1創建ram用戶,授權 2上傳文件獲取FileSession 3調用智能體對話,傳入FileSession 接下來每個步驟的細節: 1官方不推薦使用超級管理員用戶獲得accessKeyId和accessKeySecret,所以登錄超級管理員賬號創建…

剪映里面導入多張照片,p圖后如何再導出多張照片?

剪映普通版本暫時沒發現可以批量導出圖片。這里采用其他方式實現。先整體導出視頻。這里前期要注意設置幀率,一張圖片的時長。 參考一下設置,幀率設置為30,圖片導入時長設置為1s,這樣的話,方便后期把視頻切割為單幀。導…

怎么查看Linux I2C總線掛載了那些設備?

1. 根據系統啟動查看設備樹節點文件&#xff08;系統運行后的&#xff09; 比如&#xff1a;要查看I2C2i2c2: i2cfeaa0000 {compatible "rockchip,rk3588-i2c", "rockchip,rk3399-i2c";reg <0x0 0xfeaa0000 0x0 0x1000>;clocks <&cru CLK_…

bat腳本實現獲取非微軟官方服務列表

Get-CimInstance -ClassName Win32_Service |Where-Object { $_.State -eq Running -and $_.StartMode -ne Disabled } | ForEach-Object {$isMicrosoft $false$signerInfo 無可執行路徑if ($_.PathName) {# 提取可執行文件路徑&#xff08;處理帶引號/參數的路徑&#xff09…

小程序難調的組件

背景。做小程序用到了自定義表單。前后端都是分開寫的&#xff0c;沒有使用web-view。所以要做到功能對稱時間選擇器。需要區分datetime, year, day等類型使用uview組件較方便 <template><view class"u-date-picker" v-if"visible"><view c…

從零構建TransformerP2-新聞分類Demo

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄引言1 一個完整的Transformer模型2 需要準備的“工…

qt qml實現電話簿 通訊錄

qml實現電話簿&#xff0c;基于github上開源代碼修改而來&#xff0c;增加了搜索和展開&#xff0c;效果如下 代碼如下 #include <QGuiApplication> #include <QQmlApplicationEngine>int main(int argc, char *argv[]) {QCoreApplication::setAttribute(Qt::AA_…

順序表——C語言

順序表實現代碼解析與學習筆記一、順序表基礎概念順序表是線性表的一種順序存儲結構&#xff0c;它使用一段連續的內存空間&#xff08;數組&#xff09;存儲數據元素&#xff0c;通過下標直接訪問元素&#xff0c;具有隨機訪問的特性。其核心特點是&#xff1a;元素在內存中連…

【Oracle篇】Oracle Data Pump遠程備份技術:直接從遠端數據庫備份至本地環境

&#x1f4ab;《博主主頁》&#xff1a;    &#x1f50e; CSDN主頁__奈斯DB    &#x1f50e; IF Club社區主頁__奈斯、 &#x1f525;《擅長領域》&#xff1a;擅長阿里云AnalyticDB for MySQL(分布式數據倉庫)、Oracle、MySQL、Linux、prometheus監控&#xff1b;并對…

Linux系統--文件系統

大家好&#xff0c;我們今天繼續來學習Linux系統部分。上一次我們學習了內存級的文件&#xff0c;下面我們來學習磁盤級的文件。那么話不多說&#xff0c;我們開始今天的學習&#xff1a; 目錄 Ext系列?件系統 1. 理解硬件 1-1 磁盤、服務器、機柜、機房 1-2 磁盤物理結構…

KUKA庫卡焊接機器人氬氣節氣設備

在焊接生產過程中&#xff0c;氬氣作為一種重要的保護氣體被廣泛應用于KUKA庫卡焊接機器人的焊接操作中。氬氣的消耗往往是企業生產成本的一個重要組成部分&#xff0c;因此實現庫卡焊接機器人節氣具有重要的經濟和環保意義。WGFACS節氣裝置的出現為解決這一問題提供了有效的方…

遠程連接----ubuntu ,rocky 等Linux系統,WindTerm_2.7.0

新一代開源免費的終端工具-WindTerm github 27.5k? https://github.com/kingToolbox/WindTerm/releases/download/2.7.0/WindTerm_2.7.0_Windows_Portable_x86_64.zip 主機填寫你自己要連接的主機ip 端口默認 22 改成你ssh文件配置的端口 輸入遠程的 用戶名 與密碼 成功連接…

筆試——Day32

文章目錄第一題題目思路代碼第二題題目&#xff1a;思路代碼第三題題目&#xff1a;思路代碼第一題 題目 素數回文 思路 模擬 構建新的數字&#xff0c;判斷該數是否為素數 代碼 第二題 題目&#xff1a; 活動安排 思路 區間問題的貪?&#xff1a;排序&#xff0c;然…