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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【机器学习】机器学习之线性判别分析(LDA)

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

目錄

  • 一、線性判別分析介紹
  • 二、線性判別分析原理
    • 1. 類內散度矩陣(within-class scatter matrix)
    • 2. 類間散度矩陣(between-class scatter matrix)
    • 3. 廣義瑞利商(generalized Rayleigh quotiet)
  • 三、sklearn庫實現線性判別分析LDA
  • 四、總結
  • 五、參考

一、線性判別分析介紹

??線性判別分析(Linear Discriminant Analysis,簡稱 LDALDALDA)是一種經典的線性學習方法,亦稱"Fisher 判別分析"。

??線性判別分析思想:給定訓練樣本集,設法將樣例投影到一條直線上。使得同類樣例的投影點盡可能接近、異類樣例的投影點盡可能遠;在對新樣本進行分類時,將其投影到該直線上,再根據投影點的位置來確定新樣本的類別。

二、線性判別分析原理

??給定數據集 D={(xi,yi)}i=1m,yi∈{0,1}D= \{(\pmb{x_i} , y_i) \}^m_{i=1},y_i\in\{ 0,1\}D={(xi??xi???xi?,yi?)}i=1m?,yi?{0,1} ,令XiX_iXi?μi\pmb{\mu_i}μi??μi???μi?∑i\pmb{\sum_i}i??i???i? 分別表示 i∈{0,1}i\in\{0,1\}i{0,1} 類示例的集合、均值向量、協方差矩陣。若將數據投影到直線 ω\pmb{\omega}ωωω 上,則兩類樣本的中心在直線上的投影分別為 ωTμ0\pmb{\omega^T\mu_0}ωTμ0??ωTμ0???ωTμ0?ωTμ1\pmb{\omega^T\mu_1}ωTμ1??ωTμ1???ωTμ1? ;若將所有樣本點都投影到直線上,則兩類樣本的協方差分別為 ωT∑0ω\pmb{\omega^T\sum_0\omega}ωT0?ω?ωT0?ω??ωT0?ωωT∑1ω\pmb{\omega^T\sum_1\omega}ωT1?ω?ωT1?ω??ωT1?ω 。由于直線處于一維空間,因此 ωTμ0\pmb{\omega^T\mu_0}ωTμ0??ωTμ0???ωTμ0?ωTμ1\pmb{\omega^T\mu_1}ωTμ1??ωTμ1???ωTμ1?ωT∑0ω\pmb{\omega^T\sum_0\omega}ωT0?ω?ωT0?ω??ωT0?ωωT∑1ω\pmb{\omega^T\sum_1\omega}ωT1?ω?ωT1?ω??ωT1?ω 均為實數。

??要使得同類樣例的投影點盡可能接近,所以應讓同類樣例投影點的協方差盡可能小,即ωT∑0ω+ωT∑1ω\pmb{{\omega^T\sum_0\omega}+{\omega^T\sum_1\omega}}ωT0?ω+ωT1?ω?ωT0?ω+ωT1?ω??ωT0?ω+ωT1?ω 盡可能小。
??要使得異類樣例的投影點盡可能地遠,則讓類中心之間的距離盡可能大,即 ∣∣ωTμ0?ωTμ1∣∣22||\pmb{\omega^T\mu_0}-\pmb{\omega^T\mu_1||_2^2}ωTμ0??ωTμ0???ωTμ0??ωTμ1?22??ωTμ1?22???ωTμ1?22? 盡可能大。同時考慮二者,則需要得到的最大化目標為:
J=∣∣ωTμ0?ωTμ1∣∣22ωT∑0ω+ωT∑1ω=ωT(μ0?μ1)(μ0?μ1)TωωT(∑0+∑1)ω\begin{aligned} \pmb{J} &= \frac{||\omega^T\mu_0 - \omega^T\mu_1||_2^2}{{\omega^T\sum_0\omega}+\omega^T\sum_1\omega}\\ &= \frac{\omega^T(\mu_0 - \mu_1)(\mu_0-\mu_1)^T\omega}{\omega^T(\sum_0+\sum_1)\omega}\\ \end{aligned}JJJ?=ωT0?ω+ωT1?ωωTμ0??ωTμ1?22??=ωT(0?+1?)ωωT(μ0??μ1?)(μ0??μ1?)Tω??

1. 類內散度矩陣(within-class scatter matrix)

??類內散度矩陣用來判斷同類樣例的投影點之間的距離。
Sw=∑0+∑1=∑x∈X0(x?μ0)(x?μ0)T+∑x∈X1(x?μ1)(x?μ1)T\begin{aligned} S_w &= \sum_0 + \sum_1 \\ &= \sum_{x\in X_0} (x-\mu_0)(x-\mu_0)^T +\sum_{x\in X_1} (x-\mu_1)(x-\mu_1)^T \end{aligned}Sw??=0?+1?=xX0??(x?μ0?)(x?μ0?)T+xX1??(x?μ1?)(x?μ1?)T?

2. 類間散度矩陣(between-class scatter matrix)

??類間散度矩陣用來判斷異類樣例的投影點之間的距離。
Sb=(μ0?μ1)(μ0?μ1)TS_b = (\mu_0-\mu_1)(\mu_0-\mu_1)^TSb?=(μ0??μ1?)(μ0??μ1?)T

3. 廣義瑞利商(generalized Rayleigh quotiet)

??廣義瑞利商(generalized Rayleigh quotiet)就是 LDALDALDA欲最大化的目標。
??使用類內散度矩陣和類間散度矩陣將最大化目標改寫為:
J=ωTSbωωTSwω\pmb{J} = \frac{\omega^TS_b\omega}{\omega^TS_w\omega}\\ JJJ=ωTSw?ωωTSb?ω?

??LDALDALDA 可從貝葉斯決策理論的角度來闡釋,并可證明,當兩類數據同先驗、滿足高斯分布且協方差相等時,LDALDALDA可達到最優分類。

三、sklearn庫實現線性判別分析LDA

  • 數據生成
  • #生成200個三個維度樣本 import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn.datasets import make_classification x, y = make_classification(n_samples=200, n_features=2, n_redundant=0, n_classes=2, n_informative=2,n_clusters_per_class=2,class_sep =1, random_state =0) fig = plt.figure() plt.scatter(x[:, 0], x[:, 1], c=y)

  • 數據處理
  • #設置分類平滑度 h = .01 #設置X和Y的邊界值 x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1 y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1#使用meshgrid函數返回X和Y兩個坐標向量矩陣 xx, yy = np.meshgrid(np.arange(x_min, x_max,h), np.arange(y_min, y_max,h)) Z = lda.predict(np.c_[xx.ravel(), yy.ravel()])
  • 數據集劃分
  • from sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test = train_test_split(x, y, random_state=33, test_size=0.25)
  • LDA分類
  • #使用LDA進行降維 from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.linear_model import LogisticRegression lda = LinearDiscriminantAnalysis(n_components=1)x_train_lda = lda.fit_transform(x_train, y_train) # LDA是有監督方法,需要用到標簽 x_test_lda = lda.fit_transform(x_test, y_test) # 預測時候特征向量正負問題,乘-1反轉鏡像
  • 繪制訓練集分類圖像
  • #設置colormap顏色 cm_bright = ListedColormap(['#D9E021', '#0D8ECF']) #繪制數據點 plt.scatter(x_train[:, 0], x_train[:, 1], c=y_train, cmap=cm_bright) plt.title('Linear Discriminant Analysis Classifiers') plt.axis('tight') plt.show()

  • 繪制測試集分類圖像
  • plt.title('Linear Discriminant Analysis Classifiers') plt.scatter(x_test[:, 0], x_test[:, 1], c=y_test, cmap=cm_bright) plt.show()

    四、總結

    ?? LDA算法既可以用來降維,也可以用來分類,但是目前來說,主要還是用于降維,和PCA類似,LDA降維基本也不用調參,只需要指定降維到的維數即可。

    五、參考

    Python機器學習筆記:線性判別分析(LDA)算法

    總結

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

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