基于Sklearn实现LDA算法
生活随笔
收集整理的這篇文章主要介紹了
基于Sklearn实现LDA算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、LDA算法
- 二、sklearn實現LDA
- 三、結果如圖
- 四、總結
- 五、參考
一、LDA算法
1.線性判別分析(Linear Discriminant Analysis, LDA)方法常被用于數據預處理中的降維(dimensionality reduction)步驟。LDA在保證良好的類別區分度的前提下,將數據集向更低維空間投影,以求在避免過擬合(“維數災難”)的同時,減小計算消耗。
2.計算步驟
二、sklearn實現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 np2.定義可視化函數用于結果展示
#可視化函數 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.擬合數據
#數據集來源 data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)#切割數據集 #x數據 #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.結果展示
# 畫圖高寬,像素 plt.figure(figsize=(6, 7), dpi=100) plot_decision_regions(x_train_lda, y_train, classifier=lr) plt.show()三、結果如圖
四、總結
LDA優點:
- LDA在樣本分類信息依賴均值而不是方差的時候,比PCA分類的算法更優
- 在降維過程中可以使用類別的先驗知識經驗,而像PCA這樣的無監督學習則無法使用類別先驗知識
LDA缺點:
- LDA與PCA都不適合對非高斯分布的樣本進行降維
- LDA降維最多降到類別數K-1的維數
- LDA在樣本分類信息依賴方差而不是均值的時候降維效果不好
- LDA可能過度擬合數據
五、參考
https://blog.csdn.net/Charzous/article/details/108064317
總結
以上是生活随笔為你收集整理的基于Sklearn实现LDA算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Podfile文件用法详解
- 下一篇: linux九九乘法表,linux she