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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性判别分析(LDA)详解

發布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性判别分析(LDA)详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

入門小菜鳥,希望像做筆記記錄自己學的東西,也希望能幫助到同樣入門的人,更希望大佬們幫忙糾錯啦~侵權立刪。

目錄

一、LDA簡介

二、數學原理(以二分類為例子)

1、設定

2、每一類的均值和方差

3、目標函數

4、目標函數的求解

5、最終的實踐所求

三、多分類LDA

四、LDA用途與優缺點

1、用途

2、優點

3、缺點

五、LDA的python應用

1、調用函數LinearDiscriminantAnalysis

2、常用參數意義

3、常用返回值

4、利用LDA進行二分類實例


一、LDA簡介

LDA(線性判別分析)是一個經典的二分類算法。

主要思想:以一種基于降維的方式將所有的樣本映射到一維坐標軸上,然后設定一個閾值,將樣本進行區分

如下圖所示,把紅藍兩類的點投影在了一條直線(向量a)上,即二維變一維(本來一個點要用(x,y)來表示,投影到直線后就用一個維度來描述)。


二、數學原理(以二分類為例子)

1、設定

首先我們假設整個樣本空間分為兩個類別,分別是1、-1;N1、N2分別代表1,-1類別樣本的個數;樣本為X。

那么有:;

設定z為映射后的坐標(即投影后的坐標)

2、每一類的均值和方差

將樣本數據X向w向量(設定w的模長為1)做投影,則有:

接下來求出映射后的均值和方差(用來衡量樣本的類間距離和類內距離)

均值:;

方差:;

3、目標函數

想要得到好的分類模型,即要求類內間距小,類間間距大。即:

類內間距小:;兩個類的方差越小,說明樣本越密集
類間間距大:;用兩個類的均值的距離說明兩個類之間的距離

根據這樣的思路構建目標函數:

J(w)越大越好,即我們要求的是:

4、目標函數的求解

化簡目標函數:(將w向量與原數據的運算分隔開)

令類間散度矩陣:;類內散度矩陣:,則有:

方法一:

為了解決,則對J(w)求導:

化簡得到:

又因為,,都是標量,w前面我們已經約定它的模長為1,所以我們不關心它的長度,只關心他的方向,所以把標量都摘掉,得:

方法二:

J(w)的分子分母都是關于w的二次項,因此J(w)的解與w的長度無關,只與它的方向有關。所以這里為例簡單處理也可以令,故求,利用拉格朗日乘子法可得:

又因為方向恒為,所以令,因此有

5、最終的實踐所求

為得到數值解的穩定性,通常對進行奇異值分解(),再由得到。


三、多分類LDA

假定存在N個類,且第i類示例數為。

全局散度矩陣:,其中是所有樣本的均值向量。

類內散度矩陣:

類間散度矩陣:

然后與上面的二分類類似:目標函數為:

類似可得:

所以W的解為的特征向量組成的矩陣。


四、LDA用途與優缺點

1、用途

LDA既可以用來降維(將W視為投影矩陣),又可以用來分類,但主要還是用于降維。

2、優點

與另一個降維算法PCA對比

(1)在降維過程中可以使用類別的先驗知識經驗,而PCA(無監督學習)無法使用類別先驗知識

(2)LDA樣本分類依賴的是均值而不是方差,比PCA算法更優

3、缺點

(1)LDA不適合對非高斯分布的樣本降維

(2)LDA降維最多降到類別數N-1的維數,如果我們降維的維度大于N-1,則不能使用LDA

(3)LDA可能會過度擬合數據


五、LDA的python應用

1、調用函數LinearDiscriminantAnalysis

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

2、常用參數意義

(1)solver:字符串類型,指定求解最優化問題的算法

🌳'svd':奇異值分解。對于有大規模特征的數據,推薦用這種算法

🌳'lsqr':最小平方差,可以結合skrinkage參數

🌳'eigen' :特征分解算法,可以結合shrinkage參數

(2)skrinkage:取值:字符串‘auto’或者浮點數或者None。

該參數通常在訓練樣本數量小于特征數量的場合下使用。

🌳‘auto’:自動決定shrinkage參數的大小

🌳None:不使用shrinkage參數

🌳浮點數(位于0~1之間):自己指定的shrinkage參數

(3)n_components:(整數類型)指定了數組降維后的維度(該值必須小于n_classes-1)

(4)priors:一個數組,數組中的元素依次指定了每個類別的先驗概率。如果為None,則認為每個類的先驗概率都是等可能的

3、常用返回值

coef_:權重向量

intercept:b值

covariance_:一個數組,依次給出了每個類別的協方差矩陣

means_:一個數組,依次給出了每個類別的均值向量

xbar_:給出了整體樣本的均值向量

4、利用LDA進行二分類實例

來個簡單的小栗子

我們使用sklearn里的乳腺癌數據集

from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer()

然后對數據進行一個處理,讓我們看起來舒服點,計算機處理也舒服點

data=cancer["data"] col = cancer['feature_names'] x = pd.DataFrame(data,columns=col)#就是那些個特征 target = cancer.target.astype(int) y = pd.DataFrame(target,columns=['target'])#對應特征組合下的類別標簽

訓練集測試集分分類

from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1)

直接進入訓練

clf = LinearDiscriminantAnalysis(n_components=1) model=clf.fit(x_train,y_train)

訓練出來的模型對test集進行一個預測

y_pred = model.predict(x_test) print(classification_report(y_test, y_pred))

完整代碼

from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn import metrics import matplotlib.pyplot as plt from sklearn.metrics import classification_report import pandas as pd import warnings warnings.filterwarnings('ignore')cancer = load_breast_cancer()data=cancer["data"] col = cancer['feature_names'] x = pd.DataFrame(data,columns=col) target = cancer.target.astype(int) y = pd.DataFrame(target,columns=['target'])x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=1) clf = LinearDiscriminantAnalysis(n_components=1) model=clf.fit(x_train,y_train)y_pred = model.predict(x_test) print(classification_report(y_test, y_pred))

結果


歡迎大家在評論區批評指正,謝謝~

總結

以上是生活随笔為你收集整理的线性判别分析(LDA)详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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