機器學習實例應用

K最近鄰算法

K近鄰算法(KNN,k-Nearest Neighbor),每個樣本都可以用它的最接近的K個鄰近值來代表。

算法說明:

①輸入沒有標簽的新數據,將新數據的每個特征與樣本集中數據對應的特征進行比較,然后算法提取樣本集中特征最相似數據(最近鄰)的分類標簽。

②一般來說,只選擇樣本數據集中k個最相似的數據。k一般不大于20,最后選擇k個數據中出現次數最多的分類,作為新數據的分類。

K近鄰算法(KNN,k-Nearest Neighbor),每個樣本都可以用它的最接近的K個鄰近值來代表。

如圖所示,包圍圈上有兩個梨一個蘋果,因此問號的應該為梨。

K近鄰算法(KNN,k-Nearest Neighbor),每個樣本都可以用它的最接近的K個鄰近值來代表。

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

按照距離遞增次序排序

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

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

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

如圖所示K=3時?表示紅三角;當K=5時?表示藍方塊

距離度量

歐式距離

? ?歐式距離也稱歐幾里得距離,是最常見的距離度量,衡量的是多維空間中兩個點之間的絕對距離 。 ? ? ?

? ?在二維和三維空間中的歐式距離的就是兩點之間的距離。 ·

二維空間里的歐氏距離公式:

三維空間里的歐氏距離公式:

n 維空間里的歐氏距離公式:

曼哈頓距離

在平面上,坐標(x1,y1)的i點與坐標(x2,y2)的j點的曼哈頓距離為:d(i,j)=|X1-X2|+|Y1-Y2|。

鳶尾花分類

①鳶尾花特征說明: ?sepal length (cm), sepal width (cm), petal length (cm), petal width (cm)

②基于kNN算法使用sklearn實現鳶尾花分類

加載鳶尾花數據集 ?iris=datasets.load_iris()

分類的標簽 iris.target

特征 ?iris.feature_names

類別 ?iris.target_names

劃分訓練集和測試集

x_train, x_test, y_train, y_test = train_test_split(iris.data,iris.target,test_size=0.3)

訓練模型,創建實例 k=5

knn = KNeighborsClassifier(n_neighbors=5,metric="euclidean")

#n_neighbors近鄰數量

#metric距離標準(euclidean歐式距離)

#訓練 knntrain = knn.fit(x_train, y_train) print("訓練",knntrain)

訓練集得分 ?? ?train_score = knn.score(x_train,y_train)

測試集得分 ?? ?test_score = knn.score(x_test,y_test)

預測y的值 ?? ?y_pred = knn.predict(x_test)

from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import matplotlib.pyplot as plt# 設置隨機種子,保證結果可復現
np.random.seed(0)# 單元格 2:加載鳶尾花數據集并查看
iris = datasets.load_iris()
# 可取消注釋查看數據集內容,包含數據、標簽、特征名、類別名等信息
# iris  
# 查看前 10 條數據
iris.data[:10]  

# 查看數據形狀(樣本數、特征數)
iris.data.shape  
#(150, 4)
# 查看分類標簽
iris.target  

 # 查看預測結果
y_predict  

# 用測試集評估模型準確率(標簽精度),score 方法會返回模型在測試集上的預測準確率
score = knn.score(x_test, y_test)  
score  
#0.9777777777777777
# 單元格 7:選擇最優 k 值(交叉驗證法)
# k 值搜索范圍
k_range = range(1, 31)  
# 用于存儲不同 k 值對應的誤差率
k_error = []  
x = iris.data
y = iris.target
k_sel = 0
min_error = 1  # 初始化最小誤差for k in k_range:knn = KNeighborsClassifier(n_neighbors=k)# 6 折交叉驗證,scoring='accuracy' 表示用準確率評估scores = cross_val_score(knn, x, y, cv=6, scoring='accuracy')  # 計算誤差率(1 - 平均準確率)并添加到列表k_error.append(1 - scores.mean())  if (1 - scores.mean()) < min_error:min_error = 1 - scores.mean()k_sel = k# 輸出最優 k 值和對應的最小誤差
print("k:", k_sel, "min_error:", min_error)  
k: 12 min_error: 0.020000000000000018
# 單元格 8:可視化 k 值與誤差率關系
# 繪制折線圖,x 軸為 k 值,y 軸為誤差率
plt.plot(k_range, k_error)  
plt.xlabel('Value of K for KNN')
plt.ylabel('Error')
plt.show()  



波士頓房價預測

# CRIM、連續型、城鎮人均犯罪率 
# ZN、連續型、住宅用地中占地面積 
# INDUS、連續型、城鎮非零售商用土地占比
# CHAS、離散型、查爾斯河虛擬變量(是否鄰近河流)
# NOX、連續型、一氧化氮 (NO) 濃度
# AGE、連續型、1940年前建成的自住單位比例
# DIS、連續型、距波士頓5個就業中心的加權距離
# RAD、連連續型、徑向高速公路可達性指數
# TAX、每萬美元房產稅率
# PTRATIO、連續型、城鎮師生比例
# LSTAT、連續型、低收入人群占比
#RM、連續型、住宅平均房間數
import numpy as np  # 關鍵修復:導入numpy并簡寫為np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt# 加載數據集(適配新版sklearn)
boston = fetch_openml(name='boston', version=1, as_frame=True)
X = pd.DataFrame(boston.data, columns=boston.feature_names)
y = pd.Series(boston.target, name='MEDV')  # 目標變量:房價中位數(千美元)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑體顯示中文
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題
import seaborn as sns
import matplotlib.pyplot as plt
# 繪制特征相關性熱力圖
corr_matrix = X.join(y).corr()
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap='coolwarm')# annot在單元格內顯示數值
plt.title("特征與房價相關性")
plt.show()

# 將數據轉換為均值為 0、標準差為 1的標準正態分布
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score# 劃分訓練集/測試集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)# 訓練與評估
lr = LinearRegression()
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)print(f"線性回歸性能:")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred)):.2f}")#反映預測值與真實值的絕對偏差
print(f"R2: {r2_score(y_test, y_pred):.4f}") # 衡量模型擬合優度

from sklearn.ensemble import RandomForestRegressor
from sklearn.pipeline import Pipeline# 構建流水線(標準化+模型)
pipeline = Pipeline([('scaler', StandardScaler()),('regressor', RandomForestRegressor(random_state=42))
])# 訓練與評估
pipeline.fit(X_train, y_train)
y_pred_rf = pipeline.predict(X_test)
print(f"隨機森林初始性能:")
print(f"RMSE: {np.sqrt(mean_squared_error(y_test, y_pred_rf)):.2f}")
print(f"R2: {r2_score(y_test, y_pred_rf):.4f}")

plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.6, color='blue') 
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'r--', lw=2)#X軸與Y軸范圍
plt.xlabel('真實價格(千美元)')
plt.ylabel('預測價格(千美元)')
plt.title('真實值 vs 預測值')
plt.grid(True)
plt.show()

residuals = y_test - y_pred
plt.figure(figsize=(10, 6))
plt.scatter(y_pred, residuals, alpha=0.6, color='green')
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('預測值')plt.ylabel('殘差')
plt.title('殘差分布圖')
plt.show()

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

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

相關文章

力扣 hot100 Day77

連做了幾個動態規劃的中等題&#xff0c;還是比較有套路的&#xff0c;這里只簡要分析一下最長遞增子序列&#xff0c;設定dp[i]為以nums[i]結尾的最長子序列&#xff0c;遞推公式就好推了乘積最大子數組&#xff0c;和上面類似&#xff0c;但考慮到負負得正&#xff0c;所以需…

深入解析RabbitMQ與AMQP-CPP:從原理到實戰應用

一、RabbitMQ安裝 1.安裝 RabbitMQ sudo apt install rabbitmq-serverRabbitMQ 的簡單使用 # 啟動服務 sudo systemctl start rabbitmq-server.service # 查看服務狀態 sudo systemctl status rabbitmq-server.service # 安裝完成的時候默認有個用戶 guest &#xff0c;但是權限…

(論文速讀)ViDAR:視覺自動駕駛預訓練框架

論文題目&#xff1a;Visual Point Cloud Forecasting enables Scalable Autonomous Driving&#xff08;視覺點云預測實現可擴展的自動駕駛&#xff09; 會議&#xff1a;CVPR2024 摘要&#xff1a;與對通用視覺的廣泛研究相比&#xff0c;可擴展視覺自動駕駛的預訓練很少被探…

《Unity Shader入門精要》學習筆記二

1、基礎光照&#xff08;1&#xff09;看世界的光模擬真實的光照環境來生成一張圖像&#xff0c;需要考慮3種物理現象。光線從光源中被發射出來。光線和場景中的一些物體相交&#xff1a;一些光線被物體吸收了&#xff0c;而另一些光線被散射到其他方向攝像機吸收了一些光&…

Windchill 11.0使用枚舉類型自定義實用程序實現生命周期狀態管理

一、Enumerated Type Customization Utility 枚舉類型自定義實用程序,可用于添加或編輯枚舉類型的值,在Windchill 12.0+中可直接在類型和屬性管理中編輯,如下圖所示,而在Windchill 11.0中只能通過windchill shell啟動程序,下面將詳細介紹Windchill 11.0中啟動并使用枚舉類…

UGUI源碼剖析(10):總結——基于源碼分析的UGUI設計原則與性能優化策略

UGUI源碼剖析&#xff08;第十章&#xff09;&#xff1a;總結——基于源碼分析的UGUI設計原則與性能優化策略 本系列文章對UGUI的核心組件與系統進行了深入的源代碼級分析。本章旨在對前述內容進行系統性總結&#xff0c;提煉出UGUI框架最核心的設計原則&#xff0c;并基于這些…

STM32N6引入NPU,為邊緣AI插上“隱形的翅膀”

2025年的春天格外特別。伴隨著人形機器人、DeepSeek的強勢刷屏&#xff0c;AI成了最有前景的賽道。萬物皆可AI&#xff0c;萬物也在尋覓用上AI或者讓AI“轉正”的“aha moment”。 幫助機器更好地“思考”&#xff0c;讓更多的AI走向邊緣&#xff0c;是AI發展的重要趨勢之一。…

演練:使用VB開發多智能體協作的榮格八維分析器

在大語言模型高速發展的時代&#xff0c;我們面對困難的語義分析任務&#xff0c;通過構建智能體進行處理是一個流行趨勢。本文將介紹如何使用 Visual Basic .NET 開發一個多智能體協作系統&#xff0c;用于分析聊天記錄中特定人物的榮格八維人格類型。 本文使用 CC-BY-NC-SA …

llamafactory使用qlora訓練

llamafactory使用qlora訓練 1.環境搭建 conda create -n qlora python3.10 -y conda activate qlora# 克隆LLaMA-Factory倉庫 git clone https://github.com/hiyouga/LLaMA-Factory.git# 進入倉庫目錄 cd LLaMA-Factory# 切換到0.9.4版本 git checkout v0.9.4pip install -e .2…

模型微調/量化技術整理

一、模型微調技術1.模型微調簡介大模型微調(Fine-tuning)&#xff0c;是指在已經預訓練好的大語言模型基礎上&#xff08;基座模型&#xff09;&#xff0c;使用特定的數據集進行進一步訓練&#xff0c;讓模型適應特定任務或領域。通常LLM的預訓練是無監督的&#xff0c;但微調…

實踐筆記-VSCode與IDE同步問題解決指南;程序總是進入中斷服務程序。

一、VSCode 修改文件后&#xff0c;IDE 未同步如果你在 VSCode 中異步修改了項目文件內容&#xff0c;但 S32DS 或 Keil&#xff08;等集成開發環境&#xff09;中的項目沒有同步更新&#xff0c;有兩個解決方法&#xff1a;檢查文件是否已保存&#xff1a;確保 VSCode 中修改的…

C#WPF實戰出真汁04--登錄功能實現

1、登錄功能實現要點對于登錄系統&#xff0c;應該注意幾個要點&#xff1a;用戶認證流程設計&#xff0c;密碼存儲與驗證&#xff0c;會話管理&#xff0c;防暴力破解措施&#xff0c;錯誤處理與提示2、登錄功能的視圖模型首先在xaml文件中必須指定該頁面使用的視圖模型&#…

鴻蒙入門簡化版

第一步&#xff1a; 首先下載DEVStudio https://developer.huawei.com/consumer/cn/deveco-studio/ 第二步&#xff1a; 了解基本的ArkTs語言 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/introduction-to-arkts 第三步 &#xff1a; 教學視頻有兩個途徑&a…

day25|學習前端js

函數聲明&#xff0c;被提升&#xff08;hoisting&#xff09;。函數表達式必須先定義才能用。對象解構&#xff0c;按屬性名數組解構按順序點運算符. 對象.屬性名哪些可迭代&#xff08;可以被for..of循環的東西&#xff09;&#xff1a;array&#xff0c;string&#xff0c;m…

quic協議與應用開發

quic為什么出現&#xff1f;quic主要是為了解決TCP協議的局限性而提出的&#xff0c;具體來說是要解決如下問題&#xff1a;1. 加密連接建立時間長TCP協議是傳輸層協議&#xff0c;而TLS是會話層協議&#xff0c;在Linux等主流操作系統中TCP在內核實現而TLS一般在用戶態實現&am…

【淺學】tflite-micro + ESP32S3 + VScode + ESP-IDF 基于例程快速實現自己的圖像分類模型訓練部署全流程

如果你用Pytorch訓練的模型那么可以參考我的步驟&#xff0c;使用的是Tensorflow的話參考官方文檔即可&#xff0c;但流程都是一樣的&#xff0c;每一步我都會提到部分操作細節及注意事項 官方教程 要詳細學習的話tflite-micro里的微控制器章節下都詳細看&#xff08;頁面左側…

【HarmonyOS】應用設置全屏和安全區域詳解

【HarmonyOS】應用設置全屏和安全區域詳解 一、前言 IDE創建的鴻蒙應用&#xff0c;默認采取組件安全區布局方案。頂部會預留狀態欄區域&#xff0c;底部會預留導航條區域。這就是所謂的安全區域。 如果不處理&#xff0c;界面效果很割裂。所以業內UI交互設計&#xff0c;都會設…

openfeign 只有接口如何創建bean的

OpenFeign 能夠為純接口創建 Spring Bean&#xff0c;其核心機制是通過動態代理和 Spring 的 FactoryBean 機制實現的。以下是詳細的工作原理&#xff1a;1. EnableFeignClients 注解的啟動在 Spring Boot 主類上添加 EnableFeignClients 注解&#xff1a;SpringBootApplicatio…

【展廳多媒體】互動地磚屏怎么提升展廳互動感的?

在數字化展廳設計中&#xff0c;互動地磚屏 正成為提升觀眾參與度的重要工具。這種融合視覺科技與交互體驗的裝置&#xff0c;通過動態影像與即時反饋&#xff0c;讓參觀者從被動觀看轉變為主動探索&#xff0c;從而大幅增強展廳的互動感。 Led地面互動屏的優勢在于其強大的視…

AI賦能電力巡檢:變壓器漏油智能檢測系統全解析

&#x1f525; AI賦能電力巡檢&#xff1a;變壓器漏油智能檢測系統全解析 &#x1f4d6; 前言 在電力系統的日常運維中&#xff0c;變壓器作為核心設備&#xff0c;其安全運行直接關系到整個電網的穩定性。傳統的人工巡檢方式不僅效率低下&#xff0c;還存在安全隱患和漏檢風險…