《零基礎入門AI:傳統機器學習進階(從擬合概念到K-Means算法)》

一、欠擬合與過擬合

在這里插入圖片描述
在這里插入圖片描述

欠擬合(Underfitting)

欠擬合是指模型在訓練數據上表現不佳,同時在新的未見過的數據上也表現不佳。這通常發生在模型過于簡單,無法捕捉數據中的復雜模式時。欠擬合模型的表現特征如下:

  • 訓練誤差較高。
  • 測試誤差同樣較高。
  • 模型可能過于簡化,不能充分學習訓練數據中的模式。

原因

  • 模型過于簡單(如用線性模型擬合非線性關系)
  • 特征不足
  • 正則化過強

解決方案

  • 增加模型復雜度
  • 添加更多相關特征
  • 減少正則化強度

過擬合(Overfitting)

過擬合是指模型在訓練數據上表現得非常好,但在新的未見過的數據上表現較差。這通常發生在模型過于復雜,以至于它不僅學習了數據中的真實模式,還學習了噪聲和異常值。過擬合模型的表現特征如下:

  • 訓練誤差非常低。

  • 測試誤差較高。

  • 模型可能過于復雜,以至于它對訓練數據進行了過度擬合。

原因

  • 模型過于復雜
  • 訓練數據不足
  • 訓練迭代次數過多

解決方案

  • 增加訓練數據
  • 使用正則化
  • 早停(Early stopping)
  • 簡化模型

正則化(Regularization)

正則化通過在損失函數中添加懲罰項來防止過擬合,同時,增加模型的魯棒性,魯棒是Robust 的音譯,也就是強壯的意思。就像計算機軟件在面臨攻擊、網絡過載等情況下能夠不死機不崩潰,這就是軟件的魯棒性,魯棒性調優就是讓模型擁有更好的魯棒性,也就是讓模型的泛化能力和推廣能力更加的強大。

比如,下面兩個方程描述同一條直線,哪個更好?

y=0.5x1+0.6x2+0.7y=0.5x_1+0.6x_2+0.7y=0.5x1?+0.6x2?+0.7

y=5x1+6x2+7y=5x_1+6x_2+7y=5x1?+6x2?+7

第一個更好,因為下面的公式是上面的十倍,當w越小公式的容錯的能力就越好。我們都知道人工智能中回歸是有誤差的,為了把誤差降低而擬合出來的一個接近真實的公式,比如把一個測試數據[10,20]帶入計算得到的值跟真實值會存在一定的誤差,但是第二個方程會把誤差放大,公式中y=WTxy = W^Txy=WTx,當xxx有一點錯誤,這個錯誤會通過w放大。但是w不能太小,當w太小時(比如都趨近0),模型就沒有意義了,無法應用。想要有一定的容錯率又要保證正確率就要由正則項來發揮作用了!
所以**正則化(魯棒性調優)**的本質就是犧牲模型在訓練集上的正確率來提高推廣、泛化能力,W在數值上越小越好,這樣能抵抗數值的擾動。同時為了保證模型的正確率W又不能極小。因此將原來的損失函數加上一個懲罰項使得計算出來的模型W相對小一些,就是正則化。這里面損失函數就是原來固有的損失函數,比如回歸的話通常是MSE,然后在加上一部分懲罰項來使得計算出來的模型W相對小一些來帶來泛化能力。

L2正則化(Ridge)

J(θ) = MSE(θ) + α∑θ?2

懲罰大參數值,使權重平滑分布

L1正則化(Lasso)

J(θ) = MSE(θ) + α∑|θ?|

可產生稀疏權重矩陣,自動執行特征選擇

二、嶺回歸(Ridge Regression)

概念解析

嶺回歸是線性回歸的L2正則化版本,通過添加權重平方和懲罰項來防止過擬合。

損失函數

J(θ) = ||Xθ - y||2? + α||θ||2?

其中α控制正則化強度,α=0時退化為普通線性回歸。

特點:

  • 嶺回歸不會將權重壓縮到零,這意味著所有特征都會保留在模型中,但它們的權重會被縮小。
  • 適用于特征間存在多重共線性的情況。
  • 嶺回歸產生的模型通常更為平滑,因為它對所有特征都有影響。

圖解

在這里插入圖片描述

橢圓代表的是等高線(同一個圓上的點的損失是一樣的),圓形代表的是L2(同一個圓上的w12+w22w1^2+w2^2w12+w22是相等的),觀察紅色的點,的w12+w22w1^2+w2^2w12+w22和越小,損失越大;觀察到綠色的點,相同的損失,w12+w22w1^2+w2^2w12+w22也可以優化(變小),這也是可以使用嶺回歸,優化模型參數使得w1、w2變小,來增強模型魯棒性。

API使用

from sklearn.linear_model import Ridgeridge = Ridge(alpha=1.0)  # alpha是正則化強度
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)

示例

假設我們有一組房屋數據,預測房價:

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler# 加載數據
boston = load_boston()
X, y = boston.data, boston.target# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 標準化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 訓練嶺回歸模型
ridge = Ridge(alpha=1.0)
ridge.fit(X_train, y_train)# 評估
print("Train score:", ridge.score(X_train, y_train))
print("Test score:", ridge.score(X_test, y_test))

三、拉索回歸(Lasso Regression)

概念解析

拉索回歸是線性回歸的L1正則化版本,可以產生稀疏模型,自動執行特征選擇。

損失函數

J(θ) = (1/2m)||Xθ - y||2? + α||θ||?

其中||θ||?表示L1范數(絕對值之和)。

特點:

  • 拉索回歸可以將一些權重壓縮到零,從而實現特征選擇。這意味著模型最終可能只包含一部分特征。
  • 適用于特征數量遠大于樣本數量的情況,或者當特征間存在相關性時,可以從中選擇最相關的特征。
  • 拉索回歸產生的模型可能更簡單,因為它會去除一些不重要的特征。

圖解
在這里插入圖片描述

橢圓代表的是等高線(同一個圓上的點的損失是一樣的),菱形代表的是L1(同一個菱形上的w1+w2的絕對值是相同的),觀察紅色的點,w1+w2的絕對值越小,損失越大;觀察到綠色的點,相同的損失,w1+w2的絕對值也可以優化(變小),這也是可以使用拉索回歸,優化模型參數使得w1、w2變小,來達到增強模型的魯棒性。

API使用

from sklearn.linear_model import Lassolasso = Lasso(alpha=0.1)  # alpha是正則化強度
lasso.fit(X_train, y_train)
y_pred = lasso.predict(X_test)

示例

繼續使用波士頓房價數據:

lasso = Lasso(alpha=0.1)
lasso.fit(X_train, y_train)# 查看系數(很多可能為0)
print("Coefficients:", lasso.coef_)# 評估
print("Train score:", lasso.score(X_train, y_train))
print("Test score:", lasso.score(X_test, y_test))

四、邏輯回歸(Logistic Regression)

概念與原理

邏輯回歸雖然名為"回歸",但實際是分類算法,主要用于二分類問題。比如:是好瓜還是壞瓜,健康還是不健康。

核心思想:使用sigmoid函數將線性回歸輸出映射到(0,1)區間,表示概率。

原理

邏輯回歸的輸入是線性回歸的輸出

線性回歸: h(w)=w1x1+w2x2+....+bh(w)=w_1x_1+w_2x_2+....+bh(w)=w1?x1?+w2?x2?+....+b

sigmoid激活函數: f(x)=11+e?h(w)f(x)=\frac{1}{1+e^{-h(w)}}f(x)=1+e?h(w)1?

決策邊界:當 f(x)f(x)f(x) ≥ 0.5時預測1,否則預測0

損失函數(交叉熵損失)

J(θ) = -[y·log(σ(θ?x)) + (1-y)·log(1-σ(θ?x))]

API使用

from sklearn.linear_model import LogisticRegressionlog_reg = LogisticRegression()
log_reg.fit(X_train, y_train)
y_pred = log_reg.predict(X_test)

示例

使用鳶尾花數據集進行二分類:

from sklearn.datasets import load_iris# 只取兩個類別做二分類
iris = load_iris()
X = iris.data[iris.target != 2]
y = iris.target[iris.target != 2]# 分割數據
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 訓練邏輯回歸模型
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)# 評估
print("Accuracy:", log_reg.score(X_test, y_test))

五、無監督學習之K-means算法

無監督學習概念

無監督學習與監督學習不同,它處理沒有標簽的數據,目標是發現數據中的隱藏模式或結構。

主要應用

  • 聚類
  • 降維
  • 異常檢測
  • 關聯規則學習

K-means算法

K-means是最流行的聚類算法之一,將數據劃分為K個簇。

算法步驟

  1. 隨機選擇K個中心點(質心)
  2. 將每個點分配到最近的質心形成簇
  3. 重新計算每個簇的質心(均值點)
  4. 重復2-3步直到質心不再變化或達到最大迭代次數

數學表達
最小化以下目標函數:

J = ∑∑||x? - μ?||2

其中μ?是第j個簇的質心。

API使用

from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.labels_
centers = kmeans.cluster_centers_

示例

使用鳶尾花數據進行聚類:

from sklearn.datasets import load_irisiris = load_iris()
X = iris.data# 使用肘部法則確定最佳K值(實際應用中)
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)# 查看結果
print("Cluster labels:", kmeans.labels_)
print("Cluster centers:", kmeans.cluster_centers_)

總結

本文詳細介紹了欠擬合與過擬合問題及其解決方案,特別是正則化技術。然后深入講解了兩種正則化線性回歸——嶺回歸和拉索回歸,包括它們的數學原理和實際應用。接著介紹了邏輯回歸這一重要的分類算法,最后探討了無監督學習中的K-means聚類算法。

這些算法構成了傳統機器學習的基礎知識體系,理解它們的原理和適用場景對于構建有效的機器學習模型至關重要。在實際應用中,通常需要根據具體問題和數據特點選擇合適的算法,并通過交叉驗證等方法調優參數。

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

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

相關文章

Datawhale AI夏令營 第三期 task2 稍微改進

在打造基于大語言模型(LLM)文檔檢索的問答系統中,財經研報類文檔是最具挑戰的場景之一。它包含圖文混排、精細定位需求(頁碼、文件名)、問題措辭高度多樣化等一系列復雜性。 下面的內容是大模型輔助整理的:…

LeetCood算法題~水果成籃

水果成籃 你正在探訪一家農場,農場從左到右種植了一排果樹。這些樹用一個整數數組 fruits 表示,其中 fruits[i] 是第 i 棵樹上的水果 種類 。你想要盡可能多地收集水果。然而,農場的主人設定了一些嚴格的規矩,你必須按照要求采摘水…

【Lua】題目小練8

-- 題目 1&#xff1a;定義一個類 Person-- 屬性&#xff1a;name、age&#xff0c;其中 age 默認是 0&#xff0c;不能小于 0。-- 方法&#xff1a;introduce()&#xff0c;輸出 "My name is <name>, I am <age> years old."-- 要求使用封裝思想&#x…

SAP PP CK466

原因 作業價格沒有維護 解決方案 KP26

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘keras’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘keras’問題 摘要 在使用 PyCharm 進行深度學習項目開發時&#xff0c;常常需要通過 pip install keras 來安裝 Keras 庫。但有時即便命令執行成功&#xff0c…

人工智能領域、圖歐科技、IMYAI智能助手2024年全年歷史更新大事件匯總

2024年 2024年12月29日 【通知】 1、主站導出文檔功能優化升級&#xff0c;新增支持了純文本WORD導出功能&#xff0c;支持使用WPS軟件打開 注&#xff1a;原來的富文本WORD不支持使用WPS打開&#xff0c;只支持系統自帶的WORD軟件打開&#xff0c;比如Microsoft Office Word 2…

UWB實操:使用UCI CMD測距;UCI CMD是一串數字,創建測距session,配置測距session,開始測距session。

使用UCI CMD測距; UCI CMD是一串數字,創建測距session,配置測距session,開始測距session。根據 FiRa_UCI_Technical_Specification,我們可以分析并組織測距cmd 例如: Fira2.0 1v1 發起 DSTWR 創建測距session:210000052222222200 配置測距session: 2103001F222…

從AUTOSAR角度理解CAN以及CANFD

一、AUTOSAR對CAN和CAN FD的基礎定位 CAN&#xff1a;基于傳統CAN 2.0B協議&#xff0c;是AUTOSAR早期版本&#xff08;如4.0.3及之前&#xff09;的核心車載通信協議&#xff0c;支持最大8字節 payload&#xff0c;仲裁段波特率通常≤1Mbps&#xff0c;適用于低帶寬、高實時性…

第27章:服務部署與容器化

1. 課程引言 在前面的章節中&#xff0c;我們已經完成了電商項目核心服務的開發。然而&#xff0c;開發完成只是項目生命周期的一部分&#xff0c;如何將這些服務高效、可靠地部署到生產環境&#xff0c;是決定項目成敗的關鍵一步。本章將聚焦于服務的部署&#xff0c;重點介紹…

力扣148:排序鏈表

力扣148:排序鏈表題目思路代碼題目 給你鏈表的頭結點 head &#xff0c;請將其按 升序 排列并返回 排序后的鏈表 。 思路 當我們第一眼看見這道題時心中其實是有思路的&#xff0c;我們不想這是個鏈表就當它是一個整型數組。那么自然而然就會想到各種各樣的排序方法&#xf…

基于k8s環境下的pulsar常用命令(下)

#作者&#xff1a;Unstopabler 文章目錄permissionSchemapermission pulsar的權限控制是在namespace級別的 kubectl exec pulsar-toolset-0 -n pulsar – bin/pulsar-admin namespaces grant-permission mytenant/mynamespace –actions produce,consume –role admin10 注…

2.4 組件通信

Props 和 Events&#xff08;父子組件通信&#xff09;Props&#xff1a;父組件向子組件傳遞數據使用 props。子組件通過聲明 props 來接收來自父組件的數據。<!-- 父組件 --> <template><ChildComponent :message"parentMessage" /> </templat…

PCL學習之路-基礎知識-(一)

文章目錄1.西門子S7系列PLC類型劃分(1).大型PLC&#xff1a;S7-400(2).中型PLC&#xff1a;S7-300(3).小型PLC&#xff1a;S7-200系列2.西門子S7外形結構(1).總覽&#xff1a;PLC的“器官”分工邏輯3.輸出電路(1).小型繼電器輸出形式(2).大功率晶體管/場效應管輸出形式(3).雙向…

leetcode654:最大二叉樹(遞歸與單調棧雙解法)

文章目錄一、 題目描述二、 核心思路&#xff1a;分而治之與遞歸構造三、代碼實現與深度解析四、 關鍵點與復雜度分析五、拓展解法單調棧解法兩種解法對比LeetCode 654. 最大二叉樹&#xff0c;【難度&#xff1a;中等&#xff1b;通過率&#xff1a;82.6%】&#xff0c;這道題…

Python 循環語法詳解

在編程中&#xff0c;循環是一種非常常見的控制結構。很多時候&#xff0c;我們需要重復做一些事情&#xff0c;比如遍歷列表、處理數據、嘗試直到成功等。這時候&#xff0c;就離不開循環了。Python 提供了兩種主要的循環結構&#xff1a;for 循環 和 while 循環。本篇文章會從…

一個小巧神奇的 USB數據線檢測儀

一個小巧的數據線檢測儀&#xff0c;檢測各種USB數據線是否損壞、通斷&#xff0c;TYPE_C、MICRO_B、蘋果線、燒錄線、網線都可檢測。嵌入式開發者的稱手工具。 這個是我個人制作的&#xff0c;SMT和連接器比較貴&#xff0c;特別是24PIN的C口連接器&#xff0c;我掛在黃色小魚…

37.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--擴展功能--增加Github Action

在第二部分&#xff08;微服務基礎工具與技術&#xff09;中我們講解了GitHub Action的相關知識&#xff0c;那么在這一節中&#xff0c;我們將為已有的微服務增加GitHub Action的支持。 一、什么是GitHub Action 雖然前面已經介紹過GitHub Action的相關知識&#xff0c;但這里…

ROS2 通過 命令行 發布速度控制指令 控制 麥克娜姆輪

在 ROS2 中&#xff0c;要通過命令行發布速度控制指令來控制麥克娜姆輪機器人&#xff0c;你需要知道機器人所使用的速度控制話題和消息類型。通常麥克娜姆輪機器人使用geometry_msgs/Twist消息類型來接收速度指令。 以下是通過命令行發布速度控制指令的方法&#xff1a; 首先確…

多層Model更新多層ListView

一、總體架構QML (三層 ListView)└─ C 單例 DataCenter (QQmlContext 注冊)├─ L1Model (一級節點)│ └─ 內部持有 QList<L2Model*>│ └─ L2Model (二級節點)│ └─ 內部持有 QList<L3Model*>│ └─ L3Model (三級節…

Git基礎操作教程

本文目的是掌握Git基礎操作教程一、Git簡介Git&#xff1a;分布式版本控制系統&#xff0c;使用倉庫(Repository)來記錄文件的變化最流行的版本控制系統有兩種&#xff1a;集中式&#xff08;SVN&#xff09;、分布式&#xff08;Git&#xff09;二、Git操作1.創建倉庫倉庫(Rep…