• matlab编写程序，最终实现LDA分析，获得相应数据的结果。
• LDA matlab软件包，标准变分贝叶斯估计
• 线性判别分析的matlab代码，代码有注释
• lda implemented by matlab
• ## LDAmatlab 源代码

热门讨论 2011-03-31 12:51:36
该代码可直接运行，并附有清晰的注释说明，便于读者阅读
• ## LDAmatlab code

千次阅读 2014-02-19 13:39:29
% prophet Mohammed said [ALLAH will help any one helped his/her brother/sister] PBUH %This code to apply LDA (Linear Discriminant Analysis) % for any information please send to engalaatharwat@hotmail
% prophet Mohammed said [ALLAH will help any one helped his/her brother/sister] PBUH
%This code to apply LDA (Linear Discriminant Analysis)
% for any information please send to engalaatharwat@hotmail.com
%Egypt - HICIT - +20106091638

% This example deals with 2 classes
c1=[1 2;2 3;3 3;4 5;5 5]  % the first class 5 observations
c2=[1 0;2 1;3 1;3 2;5 3;6 5] % the second class 6 observations
scatter(c1(:,1),c1(:,2),6,'r'),hold on;
scatter(c2(:,1),c2(:,2),6,'b');

% Number of observations of each class
n1=size(c1,1)
n2=size(c2,1)

%Mean of each class
mu1=mean(c1)
mu2=mean(c2)

% Average of the mean of all classes
mu=(mu1+mu2)/2

% Center the data (data-mean)
d1=c1-repmat(mu1,size(c1,1),1)
d2=c2-repmat(mu2,size(c2,1),1)

% Calculate the within class variance (SW)
s1=d1'*d1
s2=d2'*d2
sw=s1+s2
invsw=inv(sw)

% in case of two classes only use v
% v=invsw*(mu1-mu2)'

% if more than 2 classes calculate between class variance (SB)
sb1=n1*(mu1-mu)'*(mu1-mu)
sb2=n2*(mu2-mu)'*(mu2-mu)
SB=sb1+sb2
v=invsw*SB

% find eigne values and eigen vectors of the (v)
[evec,eval]=eig(v)

% Sort eigen vectors according to eigen values (descending order) and
% neglect eigen vectors according to small eigen values
% v=evec(greater eigen value)
% or use all the eigen vectors

% project the data of the first and second class respectively
y2=c2*v
y1=c1*v
运行结果：

c1 =
1     2
2     3
3     3
4     5
5     5
c2 =
1     0
2     1
3     1
3     2
5     3
6     5
n1 =
5
n2 =
6
mu1 =
3.0000    3.6000
mu2 =
3.3333    2.0000
mu =
3.1667    2.8000
d1 =
-2.0000   -1.6000
-1.0000   -0.6000
0   -0.6000
1.0000    1.4000
2.0000    1.4000
d2 =
-2.3333   -2.0000
-1.3333   -1.0000
-0.3333   -1.0000
-0.3333         0
1.6667    1.0000
2.6667    3.0000
s1 =
10.0000    8.0000
8.0000    7.2000
s2 =
17.3333   16.0000
16.0000   16.0000
sw =
27.3333   24.0000
24.0000   23.2000
invsw =
0.3991   -0.4128
-0.4128    0.4702
sb1 =
0.1389   -0.6667
-0.6667    3.2000
sb2 =
0.1667   -0.8000
-0.8000    3.8400
SB =
0.3056   -1.4667
-1.4667    7.0400
v =
0.7274   -3.4917
-0.8157    3.9156
evec =
-0.9790    0.6656
-0.2040   -0.7463
eval =
0         0
0    4.6430
y2 =
0.7274   -3.4917
0.6391   -3.0679
1.3666   -6.5596
0.5508   -2.6440
1.1900   -5.7119
0.2859   -1.3725
y1 =
-0.9041    4.3394
-0.9924    4.7633
-0.2649    1.2716
-1.1690    5.6110
-0.4415    2.1193

我的理解：
将特征值降序排列，对应的特征向量为：
w1：evec(:,2)
w2：evec(:,1)
z1=c1*evec
z2=c2*evec
z1 =
-1.3869   -0.8271
-2.5698   -0.9079
-3.5488   -0.2424
-4.9357   -1.0695
-5.9147   -0.4040
z2 =
-0.9790    0.6656
-2.1619    0.5848
-3.1409    1.2503
-3.3448    0.5040
-5.5068    1.0887
-6.8937    0.2616
c1*w1>c1*w2,c1属于类别1
c2*w2>c2*w1,c2属于类别2

展开全文
• # -*- coding: utf-8 -*-# author: Xin Chenimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 多分类通用:# data 的格式应该是DataFrame的格式，其中前几列为特征，最后一列为标签# label从0...
# -*- coding: utf-8 -*-# author: Xin Chenimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt# 多分类通用:# data 的格式应该是DataFrame的格式，其中前几列为特征，最后一列为标签# label从0开始取得数字def calWeights(data, K):labels = np.unique(data['label'])cNum = len(labels)if K >= cNum:print 'K is too large, please input again'exit(0)# Sw 类内散度矩阵dim = np.shape(data)[1]-1  # 减1是因为有labelSw = np.mat(np.zeros((dim, dim)))for i in labels:datai = data.ix[data['label'] == i]Ci = np.mat(datai.drop('label', axis=1))ui = np.mean(Ci, axis=0)Si = (Ci-ui).T * (Ci-ui)Sw += Si# St 全局散度矩阵C = np.mat(data.drop('label', axis=1))u = np.mean(C, axis=0)St = (C-u).T *(C-u)# Sb 类间散度矩阵Sb = St - SwS = Sw.I * SbeigValues, eigVectors = np.linalg.eig(S)      # 用来求特征值和特征向量order= eigValues.argsort()[::-1]select = order[:K]Weights = eigVectors[:, select]return Weightsdef LDAplot(data):# 也要注意这个函数画的是投影点而不是原始的点w = calWeights(data, K=2)if np.shape(w)[1] != 2:print '维度太大，无法画图！'returnlabels = np.unique(data['label'])C = np.mat(data.drop('label', axis=1))CC = C * wcorlist = ['r', 'y', 'g', 'b', 'w']for i in labels:CCi = CC[:, data['label'] == i]plt.scatter(CCi[:, 0], CCi[:, 1], c=corlist[i], marker="o")plt.show()from sklearn import datasetsiris = datasets.load_iris()X = iris.dataY = iris.targetdata = pd.DataFrame(X)data['label'] = YWeights = calWeights(data, K=2)print "opticalweights=", WeightsLDAplot(data)
展开全文
• blei提出的潜在狄利克雷算法的MATLAB实现
• LDA人脸识别matlab程序代码！ LDA人脸识别matlab程序代码！ LDA人脸识别matlab程序代码！ LDA人脸识别matlab程序代码！
• ## LDA，matlab实现

热门讨论 2012-07-16 14:30:19
LDA（ Linear Discriminant Analysis），很不错
• 用于铜浮选工况识别的，多类训练集的线性判别分析源代码（matlab
• 2D-LDAmatlab 源代码 可运行，有一定的参考价值。可作为实验对比用，也可进一步修改算法。
• 此为LDA(线性判别分系的matlab代码)有兴趣的可以下，共同学习啊。还是免费的好，大家可以交流一下。
• LDA（Linear discriminate analysis） 分类器 。写成了MATLAB函数，效果还不错。
• 主题模型（Topic Model）LDA详解及其Matlab代码
• Matlab关于LDA人脸识别-lda.m 请问谁有一些关于 LDA 人脸识别的源程序！谢谢大家了！
• 老外写的matlab写的LDA程序，初学者好用！
• LDA人脸识别 Matlab code 。。。。。。。。。。。
• 这是一个LDA算法，有实例分析，并给出数据进行验证预测。对于初学者很有帮助。
• LDA算法对于两类问题的LDA(Matlab实现)1 function [ W] = FisherLDA(w1,w2)2 %W最大特征值对应的特征向量3 %w1 第一类样本4 %w2 第二类样本56 %第一步：计算样本均值向量7 m1=mean(w1);%第一类样本均值8 m2=mean(w2)...
LDA算法对于两类问题的LDA(Matlab实现)1 function [ W] = FisherLDA(w1,w2)2 %W最大特征值对应的特征向量3 %w1 第一类样本4 %w2 第二类样本56 %第一步：计算样本均值向量7 m1=mean(w1);%第一类样本均值8 m2=mean(w2);%第二类样本均值9 m=mean([w1;w2]);%总样本均值1011 %第二步：计算类内离散度矩阵Sw12 n1=size(w1,1);%第一类样本数13 n2=size(w2,1);%第二类样本数14 %求第一类样本的散列矩阵s115 s1=0;16 for i=1:n117 s1=s1+(w1(i,:)-m1)‘*(w1(i,:)-m1);18 end19 %求第二类样本的散列矩阵s220 s2=0;21 for i=1:n222 s2=s2+(w2(i,:)-m2)‘*(w2(i,:)-m2);23 end24 Sw=(n1*s1+n2*s2)/(n1+n2);25 %第三步：计算类间离散度矩阵Sb26 Sb=(n1*(m-m1)‘*(m-m1)+n2*(m-m2)‘*(m-m2))/(n1+n2);27 %第四步：求最大特征值和特征向量28 %[V,D]=eig(inv(Sw)*Sb);%特征向量V，特征值D29 A = repmat(0.1,[1,size(Sw,1)]);30 B = diag(A);31 [V,D]=eig(inv(Sw + B)*Sb);32 [a,b]=max(max(D));33 W=V(:,b);%最大特征值对应的特征向量34 end测试：cls1_data=[2.95 6.63;2.53 7.79;3.57 5.65;3.16 5.47];cls2_data=[2.58 4.46;2.16 6.22;3.27 3.52];%样本投影前plot(cls1_data(:,1),cls1_data(:,2),‘.r‘);hold on;plot(cls2_data(:,1),cls2_data(:,2),‘*b‘);hold on;W=FisherLDA(cls1_data,cls2_data);%样本投影后new1=cls1_data*W;new2=cls2_data*W;k=W(2)/W(1);plot([0,6],[0,6*k],‘-k‘);axis([2 6 0 11]);hold on;%画出样本投影到子空间点for i=1:4temp=cls1_data(i,:);newx=(temp(1)+k*temp(2))/(k*k+1);newy=k*newx;plot(newx,newy,‘*r‘);end;for i=1:3temp=cls2_data(i,:);newx=(temp(1)+k*temp(2))/(k*k+1);newy=k*newx;plot(newx,newy,‘ob‘);end;结果：原文：http://www.cnblogs.com/simon-c/p/4961942.html
展开全文
• ## LDA算法(MATLAB实现)

热门讨论 2012-11-06 16:02:33
matlab写的LDA代码，比较好用！
• 线性判别式分析(Linear Discriminant Analysis, LDA)算法，利用MATLAB实现。附实例原始代码以及结果图
• 1、关于SVD分解 [U1,D1,V1] = svd(Ht,0); % Ht = U1 D1 V1' 如果Ht是10*5维，那么上行代码得到的结果为：U1 10*5, D1 5*5, V1 5*5; 否则[U1,D1,V1] = svd(Ht); % Ht = U1 D1 V1' 得到的结果为 U1 10*10, D1 10*5,...

1、关于SVD分解
[U1,D1,V1] = svd(Ht,0);     % Ht = U1 D1 V1'
如果Ht是10*5维，那么上行代码得到的结果为：U1 10*5, D1 5*5, V1 5*5;
否则[U1,D1,V1] = svd(Ht);     % Ht = U1 D1 V1' 得到的结果为 U1 10*10, D1 10*5, V1 5*5;

转载于:https://www.cnblogs.com/Jerry-PR/articles/5264435.html
展开全文
• Latent Dirichlet Allocation的matlab版本。具有很高的参考价值。
• 实用文案 LDA 人脸识别的 matlab 程序 以下是 LDA 的 m 文件函数 你稍稍改改就能用了 function [eigvector, eigvalue, elapse] = LDA(gnd,options,data) % LDA: Linear Discriminant Analysis % % [eigvector, ...
• 本文使用LDA作为分类器在matlab下做实验。其中投影转换矩阵W按照LDA的经典理论生成，如下的LDA函数，并返回各个类的投影后的(ｋ－１)维的类均值。LDA.m代码如下：按 Ctrl+C 复制代码function [W,centers]=LDA(Input,...
• 比较好用的LDA的代码，一个外国人编写的，有8个输入参数可以去调，可以互相学习！！

...

matlab 订阅