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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基于Sklearn实现LDA算法

發(fā)布時間:2023/12/31 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Sklearn实现LDA算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、LDA算法
  • 二、sklearn實現(xiàn)LDA
  • 三、結(jié)果如圖
  • 四、總結(jié)
  • 五、參考

一、LDA算法

1.線性判別分析(Linear Discriminant Analysis, LDA)方法常被用于數(shù)據(jù)預處理中的降維(dimensionality reduction)步驟。LDA在保證良好的類別區(qū)分度的前提下,將數(shù)據(jù)集向更低維空間投影,以求在避免過擬合(“維數(shù)災難”)的同時,減小計算消耗。

2.計算步驟

  • 計算數(shù)據(jù)集中不同類別數(shù)據(jù)的 d 維均值向量。
  • 計算散布矩陣,包括類間、類內(nèi)散布矩陣。
  • 計算散布矩陣的特征向量 e1,e2,…,ed 和對應的特征值 λ1,λ2,…,λd。
  • 將特征向量按特征值大小降序排列,然后選擇前 k 個最大特征值對應的特征向量,組建一個 d×k 維矩陣——即每一列就是一個特征向量。
  • 用這個 d×k-維特征向量矩陣將樣本變換到新的子空間。這一步可以寫作矩陣乘法 Y=X×W 。 X 是 n×d 維矩陣,表示 n 個樣本; y 是變換到子空間后的 n×k 維樣本。
  • 二、sklearn實現(xiàn)LDA

    1.導入包

    from sklearn.linear_model import LogisticRegression from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from matplotlib.colors import ListedColormap import matplotlib.pyplot as plt import pandas as pd import numpy as np

    2.定義可視化函數(shù)用于結(jié)果展示

    #可視化函數(shù) def plot_decision_regions(x, y, classifier, resolution=0.02):markers = ['s', 'x', 'o', '^', 'v']colors = ['r', 'g', 'b', 'gray', 'cyan']cmap = ListedColormap(colors[:len(np.unique(y))])x1_min, x1_max = x[:, 0].min() - 1, x[:, 0].max() + 1x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)z = z.reshape(xx1.shape)plt.contourf(xx1, xx2, z, alpha=0.4, cmap=cmap)for idx, cc in enumerate(np.unique(y)):plt.scatter(x=x[y == cc, 0],y=x[y == cc, 1],alpha=0.6,c=cmap(idx),edgecolor='black',marker=markers[idx],label=cc)

    3.擬合數(shù)據(jù)

    #數(shù)據(jù)集來源 data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)#切割數(shù)據(jù)集 #x數(shù)據(jù) #y標簽 x, y = data.iloc[:, 1:].values, data.iloc[:, 0].values#按照8:2比例劃分訓練集和測試集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y, random_state=0)#標準化單位方差 sc = StandardScaler() x_train_std = sc.fit_transform(x_train) x_test_std = sc.fit_transform(x_test)lda = LDA(n_components=2) lr = LogisticRegression()#訓練 x_train_lda = lda.fit_transform(x_train_std, y_train) #測試 x_test_lda = lda.fit_transform(x_test_std, y_test) #擬合 lr.fit(x_train_lda, y_train)

    4.結(jié)果展示

    # 畫圖高寬,像素 plt.figure(figsize=(6, 7), dpi=100) plot_decision_regions(x_train_lda, y_train, classifier=lr) plt.show()

    三、結(jié)果如圖

    四、總結(jié)

    LDA優(yōu)點:

    • LDA在樣本分類信息依賴均值而不是方差的時候,比PCA分類的算法更優(yōu)
    • 在降維過程中可以使用類別的先驗知識經(jīng)驗,而像PCA這樣的無監(jiān)督學習則無法使用類別先驗知識

    LDA缺點:

    • LDA與PCA都不適合對非高斯分布的樣本進行降維
    • LDA降維最多降到類別數(shù)K-1的維數(shù)
    • LDA在樣本分類信息依賴方差而不是均值的時候降維效果不好
    • LDA可能過度擬合數(shù)據(jù)

    五、參考

    https://blog.csdn.net/Charzous/article/details/108064317

    總結(jié)

    以上是生活随笔為你收集整理的基于Sklearn实现LDA算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。