機器學習 KNN 算法,鳶尾花案例

目錄

一.機器學習概述

二.人工智能的兩大方向

三.KNN算法介紹

1.核心思想:“物以類聚,人以群分”

2.算法步驟

四.KNN算法實現

1.安裝scikit-learn庫

2.導入knn用于分類的類KNeighborsClassifier

3.設置KNeighborsClassifier的相關參數

4.訓練模型

5.進行預測

6.計算準確率

五.鳶尾花案例實現

1.準備訓練集和測試集數據

2.讀取數據

3.劃分訓練集

4.調用KNN,完成訓練過程

5.用訓練集中的數據預測,并計算結果的正確率

6.劃分測試集

7.將測試集中的數據進行預測,計算準確率

8.完整代碼呈現


一.機器學習概述

  • 機器學習是人工智能的核心技術之一,涉及利用數學公式從數據中總結規律。
  • 經典算法(如KNN、線性回歸、決策樹等)是學習重點,掌握后可輕松擴展至衍生算法。
  • 機器學習流程分為三個階段:
    • 數據收集:需大量高質量數據(如GPT訓練數據達45TB)。
    • 模型訓練:通過數學公式求解未知參數(如拋物線公式中的ABC)。
    • 預測:將新數據代入訓練好的模型得出結果。

二.人工智能的兩大方向

  • 回歸:預測連續型數值(如房價、股票價格、溫度)。
  • 分類:劃分離散類別(如人臉識別、指紋識別、動物分類)。

三.KNN算法介紹

1.核心思想:“物以類聚,人以群分”

KNN 分類的核心邏輯是:一個樣本的類別,由它周圍距離最近的 K 個鄰居的類別決定

  • 如果一個樣本周圍的多數鄰居屬于某一類,則該樣本也被判定為該類。
  • 這是一種 “懶惰學習”(Lazy Learning)算法,訓練階段不進行模型擬合,僅存儲所有訓練數據;直到預測時,才通過計算新樣本與訓練樣本的距離來確定類別。

2.算法步驟

  1. 確定參數 K:選擇一個正整數 K(例如 K=3、5、7),表示要參考的 “鄰居數量”。

    • K 值過小:容易受噪聲影響,模型過擬合(泛化能力差)。
    • K 值過大:可能包含過多其他類別的樣本,模型欠擬合(分類模糊)。
  2. 計算距離:對于待預測的新樣本,計算它與所有訓練樣本之間的距離(衡量樣本間的 “相似性”)。 常用距離度量方式:

    • 歐氏距離(最常用,適用于連續特征):
    • 二維空間公式:√[(x?-x?)2 + (y?-y?)2]。
    • 三維空間公式:√[(x?-x?)2 + (y?-y?)2 + (z?-z?)2]。
    • N維空間擴展:對每個維度差值平方求和后開根號。
    • 曼哈頓距離(適用于高維數據,抗噪聲):\(\text{距離} = |x_1-y_1| + |x_2-y_2| + ... + |x_d-y_d|\)
    • 余弦相似度(適用于文本、向量等,衡量方向相似性)。
  3. 篩選 K 個最近鄰:根據距離從小到大排序,選取與新樣本距離最近的 K 個訓練樣本(即 “K 個鄰居”)。

  4. 投票決定類別:統計 K 個鄰居的類別,出現次數最多的類別即為新樣本的預測類別(“少數服從多數”)。

四.KNN算法實現

1.安裝scikit-learn庫

KNN算法已封裝于Scikit-learn(SKL)庫中,無需手動實現距離公式和訓練過程,所以我們要先安裝好scikit-learn庫(可以自己指定版本號),命令如下:

 pip install scikit-learn==1.0.2 -i Https://pypi.tuna.tsinghua.edu.cn/simple 

2.導入knn用于分類的類KNeighborsClassifier

from sklearn.neighbors import KNeighborsClassifier

3.設置KNeighborsClassifier的相關參數

源碼如下:

class KNeighborsClassifier(KNeighborsMixin, ClassifierMixin, NeighborsBase):"""Classifier implementing the k-nearest neighbors vote.def __init__(self,n_neighbors=5,*,weights="uniform",algorithm="auto",leaf_size=30,p=2,metric="minkowski",metric_params=None,n_jobs=None,):super().__init__(n_neighbors=n_neighbors,algorithm=algorithm,leaf_size=leaf_size,metric=metric,p=p,metric_params=metric_params,n_jobs=n_jobs,)self.weights = weights
  • 關鍵參數:
    • n_neighborsK值,默認5):控制鄰居數量。
    • weights(權重):可調整不同類別的優先級(如偏好紅色數據)。
    • algorithm(計算算法):優化排序速度(如暴力搜索、KD樹、球樹或自動選擇)。

4.訓練模型

KNeighborsClassifier中已經封裝過fit()方法,所以我們只用調用方法即可完成訓練過程

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)

train_x為訓練集中的特征數據

train_y為根據特征而得到的分類類別數據

5.進行預測

可以直接通過KNeighborsClassifier中的predict()方法完成對數據的預測

train_predicted = knn.predict(要預測的數據)

6.計算準確率

可以直接通過KNeighborsClassifier中的score()方法完成對預測數據結果的準確率的計算

train_score = knn.score(train_x,train_y)

五.鳶尾花案例實現

1.準備訓練集和測試集數據

鳶尾花訓練數據.xlsx 如下:

鳶尾花測試數據.xlsx 如下:

2.讀取數據

train_data=pd.read_excel('鳶尾花訓練數據.xlsx')
test_data=pd.read_excel('鳶尾花測試數據.xlsx')

3.劃分訓練集

將訓練集的特征列劃分到train_x數據,分類類型則劃分到train_y中

train_x=train_data[['萼片長(cm)','萼片寬(cm)','花瓣長(cm)','花瓣寬(cm)']]
train_y=train_data['類型_num']

4.調用KNN,完成訓練過程

knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)

5.用訓練集中的數據預測,并計算結果的正確率

train_predicted = knn.predict(train_x)
train_score = knn.score(train_x,train_y)
print('train_score={}'.format(train_score))train_score=0.9696969696969697

可以看到,即使使用訓練集中的數據進行預測,也達不到百分百的正確率

6.劃分測試集

test_x=test_data[['萼片長(cm)','萼片寬(cm)','花瓣長(cm)','花瓣寬(cm)']]
test_y=test_data['類型_num']

7.將測試集中的數據進行預測,計算準確率

test_predicted=knn.predict(test_x)
test_score = knn.score(test_x,test_y)
print('test_score={}'.format(test_score))test_score=1.0

由于測試集中數據比較少,所以正確率達到了百分百

8.完整代碼呈現

from  sklearn.neighbors import KNeighborsClassifier
import pandas as pd
train_data=pd.read_excel('鳶尾花訓練數據.xlsx')
test_data=pd.read_excel('鳶尾花測試數據.xlsx')train_x=train_data[['萼片長(cm)','萼片寬(cm)','花瓣長(cm)','花瓣寬(cm)']]
train_y=train_data['類型_num']knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)
train_predicted = knn.predict(train_x)
train_score = knn.score(train_x,train_y)
print('train_score={}'.format(train_score))test_x=test_data[['萼片長(cm)','萼片寬(cm)','花瓣長(cm)','花瓣寬(cm)']]
test_y=test_data['類型_num']
test_predicted=knn.predict(test_x)
test_score = knn.score(test_x,test_y)
print('test_score={}'.format(test_score))

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

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

相關文章

強化學習(第三課第三周)

文章目錄強化學習(第三課第三周)一、以火星探測器為例說明強化學習的形式化表示二、強化學習中的回報三、強化學習算法的目標(一)馬爾可夫決策過程(二)狀態動作價值函數(四)使用Bell…

星痕共鳴數據分析2

今天實驗內容是攻擊力部分 1.思路 由于昨天數據分析出了一個函數 這個函數可以把奇怪的字節變成正常的數字 int parse_varint(unsigned const char* data, int count) {int value 0;int shift 0;for (int i 0; i < count; i) {unsigned char byte data[i];value | ((byt…

強化學習新發現:僅需更新5%參數的稀疏子網絡可達到全模型更新效果

摘要&#xff1a;強化學習&#xff08;RL&#xff09;已成為大語言模型&#xff08;LLM&#xff09;在完成預訓練后與復雜任務及人類偏好對齊的關鍵步驟。人們通常認為&#xff0c;要通過 RL 微調獲得新的行為&#xff0c;就必須更新模型的大部分參數。本研究對這一假設提出了挑…

electron 使用記錄

目錄 代理設置以打包成功 參考文檔 代理設置以打包成功 參考文檔 使用 JavaScript、HTML 和 CSS 構建跨平臺桌面應用 |電子 --- Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron

Spring boot Grafana優秀的監控模板

JVM (Micrometer) | Grafana Labs 1 SLS JVM監控大盤 | Grafana Labs Spring Boot 2.1 Statistics | Grafana Labs springboot granfana 監控接口指定接口響應的 在Spring Boot應用中&#xff0c;使用Grafana進行監控通常涉及以下幾個步驟&#xff1a; 設置Prometheus作…

LeetCode11~30題解

LeetCode11.盛水最多的容器&#xff1a; 題目描述&#xff1a; 給定一個長度為 n 的整數數組 height 。有 n 條垂線&#xff0c;第 i 條線的兩個端點是 (i, 0) 和 (i, height[i]) 。 找出其中的兩條線&#xff0c;使得它們與 x 軸共同構成的容器可以容納最多的水。 返回容器…

計算機結構-邏輯門、存儲器、內存、加法器、鎖存器、程序計數器

邏輯門 邏輯門簡單地理解即通過特定的條件實現與、或、非、異或等相關邏輯二極管 這些最基礎的邏輯門都是通過電路元器件進行搭建的&#xff0c;即半導體材料搭建的二極管二極管有個特點&#xff0c;一定條件下才可以導通&#xff0c;即得接對正負極&#xff0c;具體的原理可以…

連鎖店鋪巡查二維碼的應用

在連鎖店鋪的運營管理中&#xff0c;巡查工作是保障各門店規范運作、提升服務質量的關鍵環節。巡查二維碼的出現&#xff0c;為這一環節帶來了高效、便捷且規范的解決方案&#xff0c;其應用場景廣泛&#xff0c;優勢顯著。在如今的繁雜且效果參差不齊電子二維碼市場中&#xf…

各種前端框架界面

前端技術更新迭代很快&#xff0c;已經有不少新的前端框架問世&#xff0c;而且像geeker-admin風格的界面設計也挺不錯的。 今天去面試了前端開發崗位&#xff0c;感覺希望不大。畢竟中間空了一段時間沒接觸&#xff0c;得趕緊把新的知識點補上&#xff0c;這樣哪怕是居家辦公也…

DApp 開發者 學習路線和規劃

目錄 ?? 一、學習路線圖 階段 1:基礎知識(1~2 周) 階段 2:智能合約開發(3~4 周) 階段 3:前端與區塊鏈交互(2~3 周) 階段 4:進階與生態系統(持續學習) ?? 二、學習規劃建議(3~4 個月) ?? 三、工具推薦 ?? 四、附加建議 ?? 一、學習路線圖 階段 …

數據結構 二叉樹(3)---層序遍歷二叉樹

在上篇文章中我們主要講了關于實現二叉樹的內容&#xff0c;包括遍歷二叉樹&#xff0c;以及統計二叉樹等內容。而在這篇文章中我們將詳細講解一下利用隊列的知識實現層序遍歷二叉樹。那么層序遍歷是什么&#xff1f;以及利用隊列遍歷二叉樹又是怎么遍歷的&#xff1f;下面讓我…

【橘子分布式】gRPC(番外篇-攔截器)

一、簡介 我們之前其實已經完成了關于grpc的一些基礎用法&#xff0c;實際上還有一些比較相對進階的使用方式。比如&#xff1a; 攔截器&#xff1a;包括客戶端和服務端的攔截器&#xff0c;進而在每一端都可以劃分為流式的攔截器和非流式的攔截器。和以前我們在spring web中的…

深入探索嵌入式仿真教學:以酒精測試儀實驗為例的高效學習實踐

引言&#xff1a;嵌入式技術普及下的教學革新 嵌入式系統作為現代科技的核心驅動力&#xff0c;其教學重要性日益凸顯。然而&#xff0c;傳統硬件實驗面臨設備成本高、維護難、時空受限等挑戰。如何突破這些瓶頸&#xff0c;實現高效、靈活、專業的嵌入式教學&#xff1f;本文將…

三種深度學習模型(GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU)對北半球光伏數據進行時間序列預測

代碼功能 該代碼實現了一個光伏發電量預測系統&#xff0c;采用三種深度學習模型&#xff08;GRU、CNN-GRU、貝葉斯優化的CNN-GRU/BO-CNN-GRU&#xff09;對北半球光伏數據進行時間序列預測對北半球光伏數據進行時間序列預測&#xff0c;并通過多維度評估指標和可視化對比模型性…

PostgreSQL對象權限管理

本文記述在postgreSQL中對用戶/角色操作庫、模式、表、序列、函數、存儲過程的權限管理針對數據庫的授權 授權&#xff1a;grant 權限 on database 數據庫 to 用戶/角色; 撤權&#xff1a;revoke 權限 on database 數據庫 from 用戶/角色; 針對模式的授權 授權&#xff1a;gran…

Wordpress主題配置

一、下載主題 主題下載地址&#xff1a;https://www.iztwp.com/tag/blog-theme 二、主題安裝 三、上傳主題安裝即可 四、安裝完成啟動主題

lock 和 synchronized 區別

1. 引言 在多線程編程中&#xff0c;我們經常需要確保某些代碼在同一時刻只由一個線程執行。這種機制通常叫做“互斥鎖”或“同步”。Java 提供了兩種主要的同步機制&#xff1a;synchronized 關鍵字和 Lock 接口。盡管它們的作用相似&#xff0c;都用于實現線程的同步&#xf…

Tkinter - Python圖形界面開發指南

作者&#xff1a;唐叔在學習 專欄&#xff1a;唐叔學python 標簽&#xff1a;Python GUI編程 Tkinter教程 圖形界面開發 Python實戰 界面設計 事件監聽 Python入門 唐叔Python 編程學習 軟件開發 文章目錄一、Tkinter是什么&#xff1f;為什么選擇它&#xff1f;二、Tkinter基礎…

Java基礎day15

目錄 一、Java集合簡介 1.什么是集合&#xff1f; 2.集合接口 3.小結 二、List集合 1.List集合簡介 三、ArrayList容器類 1.初始化 1.1無參初始化 1.2有參初始化 2.數據結構 3.常用方法 3.1增加元素 3.2查找元素 3.3 修改元素 3.4 刪除元素 3.5 其他方法 4.擴…

React Three Fiber 實現晝夜循環:從光照過渡到日月聯動的技術拆解

在 3D 場景中用 React Three Fiber 實現自然的晝夜循環&#xff0c;核心難點在于光照的平滑過渡、日月運動的聯動邏輯、晝夜狀態下的光影差異處理&#xff0c;以及性能與視覺效果的平衡。本文以一個 ReactThree.js 的實現為例&#xff0c;詳細解析如何通過三角函數計算日月位置…