LDA降維方法實現

2021-09-01 18:38:03 字數 1736 閱讀 5717

lda方法的主要思想是,將空間中的樣本點投影到乙個超平面上,令同一類的樣本點之間距離相對近,不同類的樣本點之間距離相對遠。

需要最大化

解得之後對下式進行特徵值分解

下面上**。採用的是iris資料集。

from sklearn import datasets

import numpy as np

from matplotlib import pyplot as plt

def load_dataset():

iris=datasets.load_iris()

return iris.data,iris.target

def lda(data, target):

# 計算每個類別的均值

mean_vecs=

for label in range(0,2):

# 計算s_w

d=4 # iris資料集中,每行資料有4個feature

s_w=np.zeros((d,d))

for label,u_i in zip(range(0,2),mean_vecs):

s_i=np.zeros((d,d))

for x in data[target==label]:

x=x.reshape(d,1)

u_i=u_i.reshape(d,1)

s_i+=(x-u_i).dot((x-u_i).t)

s_w+=s_i

# 計算s_b

u_2=np.mean(data,axis=0)

s_b=np.zeros((d,d))

for i,u_1 in enumerate(mean_vecs):

n=data[target==i,:].shape[0]

u_1=u_1.reshape(d,1)

u_2=u_2.reshape(d,1)

s_b+=n*(u_1-u_2).dot((u_1-u_2).t)

# 計算w

eig_vals,eig_vecs=np.linalg.eig(np.linalg.inv(s_w).dot(s_b))

eig_pairs=[(np.abs(eig_vals[i]),eig_vecs[:,i])for i in range(len(eig_vals))]

eig_pairs=sorted(eig_pairs,key=lambda k:k[0],reverse=true)

w=np.hstack((eig_pairs[0][1][:,np.newaxis].real,eig_pairs[1][1][:,np.newaxis].real))

# 將w投影

w_proj=data.dot(w)

# 畫圖

plt.scatter(w_proj[target==0,0],w_proj[target==0,1],c='r')

plt.scatter(w_proj[target==1,0],w_proj[target==1,1],c='g')

plt.scatter(w_proj[target==2,0],w_proj[target==2,1],c='b')

plt.xlabel("x")

plt.ylabel("y")

plt.show

執行結果(結果看起來好像不太好丫= =)

用scikit learn進行LDA降維

性判別分析lda原理總結中,我們對lda降維的原理做了總結,這裡我們就對scikit learn中lda的降維使用做乙個總結。在scikit learn中,lda類是sklearn.discriminant analysis.lineardiscriminantanalysis。那既可以用於分類又可...

用scikit learn進行LDA降維

在scikit learn中,lda類是sklearn.discriminant analysis.lineardiscriminantanalysis。那既可以用於分類又可以用於降維。當然,應用場景最多的還是降維。和pca類似,lda降維基本也不用調參,只需要指定降維到的維數即可。我們這裡對lin...

兩種降維方法原理 PCA和LDA

1 pca 主成分分析 一句話 pca將方差最大的方向作為主成分,使用主成分來表示原始資料可以去除冗餘的維度,達到降維的目的。無監督降維技術,利用正交變換把由線性相關變數表示的觀測資料轉換為少數幾個由線性無關變數表示的資料,線性無關的變數稱為主成分。pca選擇的是投影後資料方差最大的方向。因此pca...