日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【机器学习基础】数学推导+纯Python实现机器学习算法27:LDA线性判别分析

發布時間:2025/3/8 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习基础】数学推导+纯Python实现机器学习算法27:LDA线性判别分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python機器學習算法實現

Author:louwill

Machine Learning Lab

? ? ?

? ? 線性判別分析(Linear Discriminant Analysis,LDA)是一種經典的線性分類方法。注意機器學習中還有一種用于NLP主題模型建模的潛在狄利克雷分布(Latent Dirichlet Allocation)也簡稱為LDA,大家在學習的時候注意區分。不同于上一講談到的PCA降維使用最大化方差的思想,LDA的基本思想是將數據投影到低維空間后,使得同一類數據盡可能接近,不同類數據盡可能疏遠。所以,LDA是一種有監督的線性分類算法。

LDA原理與推導

下圖描述了PCA和LDA直觀上的區別。

我們來看LDA的基本原理推導。給定數據集,其中、、分別表示為第類數據的集合、均值向量和協方差矩陣。假設將上述數據投影到直線上,則兩類樣本的中心投射到直線上的投影分別為和,考慮所有樣本投射情況下,兩類樣本的協方差分別為和。由于直線為一維空間,上述值均為實數。

現在我們的優化目標是使同類樣本的投影點盡可能相近,異類樣本投影點盡可能遠離。要讓同類樣本的投影點盡可能相近,我們可以使同類樣本投影點的協方差盡可能的小,即盡可能小。異類樣本投影點盡可能遠離,可以使得類中心點之間的距離盡可能大,即盡可能大。同時考慮這兩個優化目標的情況下,我們可以定義最大化目標函數:

定義類內散度矩陣:定義類間散度矩陣:

則上述優化目標可改寫為:

上式即為LDA最終要優化的目標。現在問題在于我們要如何求出。這里可以令,則上述優化式可表示為:

?
?

根據條件約束優化求解的拉格朗日乘子法,上式等于:


并代入到可得:

考慮到矩陣數值解的穩定性,我們可以對其進行奇異值分解,即:

最后求其逆即可得到。

根據上述推導,我們可以整理LDA完整的算法流程為:

  • 對數據按類別分組

  • 分別計算每組樣本的均值和協方差

  • 計算類間散度矩陣

  • 計算均值差

  • SVD方法計算類間散度矩陣的逆

  • 根據計算。

  • 計算投影后的數據點

讀者還可以自行考慮將LDA推廣到多分類情況,這里不再展開推導。

LDA基本實現

? ?按照前述LDA算法流程,我們可以給基于numpy來實現一個簡單的LDA模型。基本關? ? ?鍵點包括計算分組均值與協方差、類間散度矩陣和SVD分解等。具體實現過程如下代? ? ?碼所示:

import numpy as npclass LDA():def __init__(self):self.w = Nonedef calculate_covariance_matrix(self, X, Y=None):# 計算協方差矩陣m = X.shape[0]X = X - np.mean(X, axis=0)Y = X if Y == None else Y - np.mean(Y, axis=0)return 1 / m * np.matmul(X.T, Y)# 對數據進行向量轉換def transform(self, X, y):self.fit(X, y)X_transform = X.dot(self.w)return X_transform# LDA擬合過程def fit(self, X, y):# 按類劃分X0 = X[y == 0]X1 = X[y == 1]# 分別計算兩類數據自變量的協方差矩陣sigma0 = self.calculate_covariance_matrix(X0)sigma1 = self.calculate_covariance_matrix(X1)# 計算類內散度矩陣Sw = sigma0 + sigma1# 分別計算兩類數據自變量的均值和差u0, u1 = X1.mean(0), X2.mean(0)mean_diff = np.atleast_1d(u0 - u1)# 對類內散度矩陣進行奇異值分解U, S, V = np.linalg.svd(Sw)# 計算類內散度矩陣的逆Sw_ = np.dot(np.dot(V.T, np.linalg.pinv(S)), U.T)# 計算wself.w = Sw_.dot(mean_diff)# LDA分類預測def predict(self, X):y_pred = []for sample in X:h = sample.dot(self.w)y = 1 * (h < 0)y_pred.append(y)return y_pred

本文只給出二分類的LDA的推導和基本實現,讀者可自行將其推廣到多分類的情形,這里不做過多展開。sklearn中為LDA算法提供了sklearn.lda.LDA接口可供調用,實際應用時直接調用該接口即可。

參考資料:

周志華 機器學習?

往期精彩:

數學推導+純Python實現機器學習算法19:PCA降維

數學推導+純Python實現機器學習算法18:奇異值分解SVD

數學推導+純Python實現機器學習算法17:XGBoost

數學推導+純Python實現機器學習算法16:Adaboost

數學推導+純Python實現機器學習算法15:GBDT

數學推導+純Python實現機器學習算法14:Ridge嶺回歸

數學推導+純Python實現機器學習算法13:Lasso回歸

數學推導+純Python實現機器學習算法12:貝葉斯網絡

數學推導+純Python實現機器學習算法11:樸素貝葉斯

數學推導+純Python實現機器學習算法10:線性不可分支持向量機

數學推導+純Python實現機器學習算法8-9:線性可分支持向量機和線性支持向量機

數學推導+純Python實現機器學習算法7:神經網絡

數學推導+純Python實現機器學習算法6:感知機

數學推導+純Python實現機器學習算法5:決策樹之CART算法

數學推導+純Python實現機器學習算法4:決策樹之ID3算法

數學推導+純Python實現機器學習算法3:k近鄰

數學推導+純Python實現機器學習算法2:邏輯回歸

數學推導+純Python實現機器學習算法1:線性回歸

往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群請掃碼進群:

總結

以上是生活随笔為你收集整理的【机器学习基础】数学推导+纯Python实现机器学习算法27:LDA线性判别分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。