算法集锦

决策树-划分点

function [n,h]=huafendian1(x)
%n返回增益
%h返回划分点
%假设0代表第一类
%假设1代表第二类
%输入x第一列为属性,第二列为用于学习的分类结果[~,m]=sort(x(:,1));%按小到大排序
x=x(m,:);
t=[];
for i=1:size(x,1)-1
t=[t;(x(i,1)+x(i+1,1))/2];%生成划分点
end
%原分类结果信息熵
E1=[];
C1=length(find(x(:,2)==0))/size(x,1);%第一类比例
C2=length(find(x(:,2)==1))/size(x,1);%第二类比例
E1=-[C1*log2(C1),C2*log2(C2)];
E1(find(isnan(E1),1))=0;%0*log2(0)=NaN,这里是将NaN转化为0,如果纯度100%,则信息熵为0
E1=sum(E1);
%候选划分点信息增益
Ent=[];
if E1>0
for i=1:size(t,1)
x1=x(:,1);
%根据划分点将数据列转化成0和1
%这里默认的是数据越小越倾向第一类
b1=find(x1<=t(i,1));
b2=find(x1>t(i,1));
x1(b1)=0;
x1(b2)=1;
x2=[x1,x(:,2)];%【重新划分的数据列,因变量】
c1=length(find(x2(:,1)==0))/size(x2,1);
c2=length(find(x2(:,1)==1))/size(x2,1);
d1=length(find(x2(find(x2(:,1)==0),2)==0))/size(find(x2(:,1)==0),1);
d2=length(find(x2(find(x2(:,1)==0),2)==1))/size(find(x2(:,1)==0),1);
d3=length(find(x2(find(x2(:,1)==1),2)==0))/size(find(x2(:,1)==1),1);
d4=length(find(x2(find(x2(:,1)==1),2)==1))/size(find(x2(:,1)==1),1);
E=[d1*log2(d1),d2*log2(d2);d3*log2(d3),d4*log2(d4)];
E(find(isnan(E),1))=0;%0*log2(0)=NaN,这里是将NaN转化为0,最多有三个NaN,这里预设三个语句即可
E(find(isnan(E),1))=0;
E(find(isnan(E),1))=0;
E=sum(sum(-E.*[c1,c1;c2,c2]));%重新划分后的信息熵
Ent(i,1)=E1-E;%信息增益
end
[n,m]=max(Ent);
h=t(m);else%如果已经达到100%纯度则n和h均返回0
n=0;
h=0;
end

随机森林
RBF神经网络(多维)

clc,clear;
close all;
%% 产生训练样本(训练输入,训练输出)
% ld为样本例数
ld=400;
% 产生2*ld的矩阵
x=rand(2,ld);
% 将x转换到[-1.5 1.5]之间
x=(x-0.5)*1.5*2;
% x的第一行为x1,第二行为x2.
x1=x(1,:);
x2=x(2,:);
% 计算网络输出F值
F=20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
%% 建立RBF神经网络
eg=1e-30;%目标误差
sc=1;%扩展速度
mn=ld;%最大聚类中心数
display=1;%训练展示,如果是1每增加一个隐藏节点,也就是聚类中心,就会展示下训练误差情况,默认间隔50打印出一次训练误差
net = newrb(x,F,eg,sc,mn,display);%RBF网络训练
%% 建立测试样本
interval=0.1;
[i, j]=meshgrid(-1.5:interval:1.5);
row=size(i);
tx1=i(:);
tx1=tx1';
tx2=j(:);
tx2=tx2';
tx=[tx1;tx2];
%% 使用建立的RBF网络进行模拟,得出网络输出
ty=sim(net,tx);
%% 使用图像,画出3维图
% 真正的函数图像
interval=0.1;
[x1, x2]=meshgrid(-1.5:interval:1.5);
F = 20+x1.^2-10*cos(2*pi*x1)+x2.^2-10*cos(2*pi*x2);
figure
subplot(1,3,1)
mesh(x1,x2,F);
zlim([0,60])
title('真正的函数图像')
% 网络得出的函数图像
v=reshape(ty,row);
subplot(1,3,2)
mesh(i,j,v);
zlim([0,60])
title('RBF神经网络结果')
% 误差图像
subplot(1,3,3)
mesh(x1,x2,F-v);
zlim([0,60])
title('误差图像')

主成分分析


X=[124.3000 134.7000 193.3000 118.6000 94.9000 123.80002.4200 2.5000 2.5600 2.5200 2.6000 2.650025.9800 21.0000 29.2600 31.1900 28.5600 28.120019.0000 19.2500 19.3100 19.3600 19.4500 19.62003.1000 3.3400 3.4500 3.5700 3.3900 3.580079.0000 84.0000 92.0000 105.0000 108.0000 108.000054.1000 53.7000 54.0000 53.9000 53.6000 53.30006.1400 6.7400 7.1800 8.2000 8.3400 8.51003.5700 3.5500 3.4000 3.2700 3.2000 3.100064.0000 64.9600 65.6500 67.0100 65.3400 66.9900]';
mapping.mean = mean(X, 1);
X = X - repmat(mapping.mean, [size(X, 1) 1]);%去均值
C = cov(X);%协方差矩阵
C(isnan(C)) = 0;
C(isinf(C)) = 0;
[M, lambda] = eig(C);%求C矩阵特征向量及特征值
[lambda, ind] = sort(diag(lambda), 'descend');%排序
lambda=lambda./sum(lambda);
lambda=cumsum(lambda);
mapping.lambda = lambda;
k=find(lambda>0.95);
M = M(:,ind(1:k(1)));%%取前k列
mappedX = X * M;%降维后的X
mapping.M = M;%映射的基

方差分析

A=[31.9   24.8   22.127.9   25.7   23.631.8   26.8   27.328.4   27.9   24.935.9   26.2   25.8]; %原始数据输入
[p,anovatab,stats]=anova1(A);%单因素方差分析
fa=finv(0.95,anovatab{2,3},anovatab{3,3});%计算fa
F=anovatab{2,5};%F值
if p<=0.01 && F>fadisp('非常显著')
elseif p<=0.05 && F>fadisp('显著')
elsedisp('不显著')
end

logistic回归

clc,clear;
close all;
shuju = [0.8+0.2*rand(20,2),ones(20,1)0.7+0.2*rand(20,2),zeros(20,1)];
X=shuju;
a1=find(X(:,end)==0);
a2=find(X(:,end)==1);
figure
hold on
plot(shuju(a1,1),shuju(a1,2),'r*')
plot(shuju(a2,1),shuju(a2,2),'b*')Y=X(:,end);
X(:,end)=[];
X=[ones(size(X,1),1) X];%新增一列常数项
[m,n]=size(X);
%数据归一化处理
X=mapminmax(X',0,1)';%设定学习率为0.01
delta=0.1;
%初始化参数
f=@(a,x)1./(1+exp(-(a(1).*x(1,:)+a(2).*x(2,:)+a(3).*x(3,:))));
a=lsqcurvefit(f,[1 1 1],X',Y');
theta1=a;%%训练模型
%正则化后的梯度下降算法θ的更新公式
num=100000;
while num>0tmp=X*theta1';h=1./(1+exp(-tmp));theta1=theta1-delta*mean((h-Y));num =num-1;
end%测试算法准确率
cc=0;
tmp=X*theta1';
Y1=1./(1+exp(-tmp));
for i=1:mif Y1(i)>=0.5Y1(i)=1;elseY1(i)=0;end
end
1-sum(abs(Y1-Y))/size(Y,1)
a1=find(Y1==0);
a2=find(Y1==1);
hold on
plot(shuju(a1,1),shuju(a1,2),'ro')
plot(shuju(a2,1),shuju(a2,2),'bo')
legend({'第1类','第2类','logistic第1类','logistic第2类'},'Location','northwest','NumColumns',1)

非线性最小二乘

clc,clear;
close all;
shuju=[1.54  1.61 1.62 1.66 1.71 1.72 1.73 1.86 1.92  2 2.21 2.29  2.34 2.38 2.42 2.44  2.57 2.64 2.71 2.85  2.93 3.01 3.14 3.22  3.34 3.49 3.55 3.79  3.99 4.1220.1 20.1 20.3 20.4 20.4 20.5 20.6 20.7 20.9 21.1 21.3 21.5 21.7 21.9 22 22.2 22.4 22.5 22.7 22.7 22.8 22.9 23.4 23.7 24.4 24.9 25.3 27.4 28.4 29.15.17 5.14 5.13 5.10  5.08 5.03 5.01 4.99  4.93 4.91 4.89 4.81  4.77 4.75 4.62 4.56  4.5  4.48 4.46 4.31 4.28  4.19 4.12 3.99 3.91  3.84 3.75 3.64 3.51  3.5];
x1=shuju(1,:);%x1、x2为自变量
x2=shuju(2,:);
c=shuju(3,:);%c为因变量
x0=[1 1 1 1];%四个参数的初始值
d=length(x0);
f=@(a,x)0.08*(ones(1,30)-(x(1,:)./7).*(ones(1,30)-a(1)*(ones(1,30)-((x(1,:)./7).^a(2))).*exp(a(3)*sqrt((x(2,:))./2982))))+ones(1,30)*a(4);
a=lsqcurvefit(f,x0,[x1;x2],c)
%%作图
B=0.08*(ones(1,30)-(x1./7).*(ones(1,30)-a(1)*(ones(1,30)-((x1./7).^a(2))).*exp(a(3)*sqrt((x2)./2982))))+a(4)*ones(1,30);
figure
plot3(x1,x2,c,'*')
hold on
plot3(x1,x2,B)
legend('原数据','拟合数据')figure
plot(c-B)

词云图

figure
wordcloud(ZZ,cs);
title('词云')

数据包络评价

数据包络分析(Data envelopment
analysis,DEA)是运筹学和研究经济生产边界的一种方法。该方法一般被用来测量一些决策部门的生产效率。

clc,clear;
close all;
format long
data=[14.40 0.65 31.30 3621.00 0.00
16.90 0.72 32.20 3943.00 0.09
15.53 0.72 31.87 4086.67 0.07
15.40 0.76 32.23 4904.67 0.13
14.17 0.76 32.40 6311.67 0.37
13.33 0.69 30.77 8173.33 0.59
12.83 0.61 29.23 10236.00 0.51
13.00 0.63 28.20 12094.33 0.44
13.40 0.75 28.80 13603.33 0.58
14.00 0.84 29.10 14841.00 1.00]';X=data([1:3],:);%X为输入变量
Y=data([4:5],:);%Y为输出变量
[m,n]=size(X);
s=size(Y,1);
A=[-X' Y'];%由于目标函数求最小,这里的-X就转化成了求最大
b=zeros(n,1);
LB=zeros(m+s,1);UB=[];
for i=1:nf=[zeros(1,m) -Y(:,i)'];Aeq=[X(:,i)',zeros(1,s)];beq=1;w(:,i)=linprog(f,A,b,Aeq,beq,LB,UB);%前3列为投入系数,后2列为产出系数E(i,i)=Y(:,i)'*w(m+1:m+s,i);%产出值*产出系数
end
theta=diag(E)';
fprintf('用DEA方法对此的相对评价结果为:\n');
disp(theta);

协同推荐算法
FCM聚类
K-means聚类

clc,clear;
close all;
data=rand(50,2);
K=3
[Idx,C,sumD,D]=kmeans(data,K,'dist','sqEuclidean','rep',4);
%K: 表示将X划分为几类,为整数
%Idx: N*1的向量,存储的是每个点的聚类标号
%C: K*P的矩阵,存储的是K个聚类质心位置
%sumD: 1*K的和向量,存储的是类间所有点与该类质心点距离之和
%D: N*K的矩阵,存储的是每个点与所有质心的距离%'dist’(距离测度)
%'sqEuclidean' 欧式距离(默认时,采用此距离方式)
%'cityblock' 绝度误差和,又称:L1
%'cosine' 针对向量
%'correlation'  针对有时序关系的值
%'Hamming' 只针对二进制数据%'Start'(初始质心位置选择方法)
%'sample' 从X中随机选取K个质心点
%'uniform' 根据X的分布范围均匀的随机生成K个质心%kmeans函数详情请edit调出函数文件查看%绘制散点图
gscatter(data(:,1),data(:,2),Idx)

KNN分类算法

邻近算法,或者说K最近邻(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法就是将数据集合中每一个记录进行分类的方法

%在Matlab中利用kNN进行最近邻查询
X=[0.5.*rand(50,1);0.3+0.5.*rand(50,1)];%产生X
Y=[0.5.*rand(50,1);0.3+0.5.*rand(50,1)];%产生Y
Z=[ones(50,1);2.*ones(50,1)];%产生类别
figure
gscatter(X,Y,Z)  %点图,颜色根据Z中类别区分
legend('Location','best')  %自动生成图列
newpoint = [0.8*rand 0.8*rand];  %待分类的点
line(newpoint(1),newpoint(2),'marker','x','color','k','markersize',10,'linewidth',2)  %绘制待分类的点
Mdl = KDTreeSearcher([X,Y])  ;%创建K树,默认采用欧式距离
%也可以替换距离公式,例如
%Mdl.Distance='cityblock' 曼哈顿距离
%Mdl.Distance='chebychev' 契比雪夫距离
%Mdl.Distance='minkowski' 闵可夫斯基距离
K=10; %邻近点数
[n,d] = knnsearch(Mdl,newpoint,'k',K);  %执行KNN(K近邻)搜索,n返回这K个点的编号,d返回的是距离
line(X(n,1),Y(n,1),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',10) %绘制周围K个邻近点
tabulate(Z(n));%统计K个邻近点中各类别点的比例,该点归为比例高的一类

PCA图像压缩
缺失数据预测问题(粒子滤波算法)

DBSCAN(Density-Based Spatial Clustering of Applications with
Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。

组合评价模型—模糊Borda
BP神经网络
熵权法

clc,clear;
X=[124.3000    2.4200   25.9800   19.0000    3.1000   79.0000   54.1000    6.1400    3.5700   64.0000134.7000    2.5000   21.0000   19.2500    3.3400   84.0000   53.7000    6.7400    3.5500   64.9600193.3000    2.5600   29.2600   19.3100    3.4500   92.0000   54.0000    7.1800    3.4000   65.6500118.6000    2.5200   31.1900   19.3600    3.5700  105.0000   53.9000    8.2000    3.2700   67.010094.9000    2.6000   28.5600   19.4500    3.3900  108.0000   53.6000    8.3400    3.2000   65.3400123.8000    2.6500   28.1200   19.6200    3.5800  108.0000   53.3000    8.5100    3.1000   66.9900];
[n,m]=size(X);
for i=1:nfor j=1:mp(i,j)=X(i,j)/sum(X(:,j));end
end
%% 计算第 j 个指标的熵值 e(j)
k=1/log(n);
for j=1:me(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d./sum(d) % 求权值 w

层次聚类
LOF异常数据点检测算法
Pearson相关系数,Kendall相关系数和Spearman相关系数
GRNN神经网络
广义回归神经网络general regression neural network(GRNN)
概率神经网络(Probabilistic Neural Network)
秩和比综合评价法

matlab 算法集锦相关推荐

  1. 直扩 单音干扰抑制 matlab,数学计算软件MATLAB资料集锦分享

    数学计算软件MATLAB资料集锦分享 (2014-08-20 17:07:08) 标签: matlab 数学建模 仿真模拟 整理了一些有关MATLAB资料如下: 1.H型可逆PWM变换器的控制方式解析 ...

  2. MATLAB算法(函数)编译为C++动态库遇到的问题

    MATLAB算法(函数)编译为C++动态库遇到的问题 今天在编译MATLAB函数为C++的动态链接库时遇到了几个问题,在网上搜索了很多资料都没有解决我遇到的问题,特此分享出来供大家参考. 环境: Wi ...

  3. 数据结构常见算法集锦

    数据结构经典算法集锦 第2章 线性表 KMP算法 //获得next数组 void GetNext(char *t, int next[MAX]) {int i = 1, j = 0;next[1] = ...

  4. 数据结构经典算法集锦

    数据结构经典算法集锦 第2章 线性表 KMP算法 //获得next数组 void GetNext(char *t, int next[MAX]) {int i = 1, j = 0;next[1] = ...

  5. STL经典算法集锦之排列(next_permutation/prev_permutation

    STL经典算法集锦之排列(next_permutation/prev_permutation) 来自:CSDN博客推荐文章 | 时间:2012-05-07 14:54:09 原文链接: http:// ...

  6. 图像锐化处理算法matlab,图像锐化matlab算法

    <图像锐化matlab算法>由会员分享,可在线阅读,更多相关<图像锐化matlab算法(2页珍藏版)>请在读根文库上搜索. 1.%常用图像锐化算法clcclearclose a ...

  7. LQR轨迹跟踪算法Python/Matlab算法实现_代码(2)

    本文根据LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导(2)使用代码实现,进行仿真: clc clear allKp = 1.0 ; dt =0.1 ;% [s] L = ...

  8. LQR轨迹跟踪算法Python/Matlab算法实现2

    这里对上一篇LQR轨迹跟踪算法Python/Matlab算法实现进行勘误: clc clear allKp = 1.0 ; dt = 0.1 ;% [s] L = 2.9 ;% [m] wheel b ...

  9. LQR轨迹跟踪算法Python/Matlab算法实现_LQRmatrix推导

    对于文章 LQR轨迹跟踪算法Python/Matlab算法实现中的LQR推导的问题,我简单写了一下手稿,不高兴做成公式了:

最新文章

  1. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)
  2. Spring Cloud 2020: Hystrix不生效怪我咯
  3. ORACLE 绑定变量用法总结
  4. JavaScript基于对象编程
  5. ppt修复无法读取_移动硬盘故障分析以及建议修复方法
  6. 如何在Python中建立和训练K最近邻和K-Means集群ML模型
  7. 怎么在电脑安装php文件夹在哪个文件夹,php进行文件上传时找不到临时文件夹怎么办,电脑自动保存的文件在哪里...
  8. python编程多行输入_python多行输入的方法有哪些
  9. PAT1003. 我要通过!
  10. windows Service 之调试过程
  11. Android开源项目推荐之「网络请求哪家强」
  12. Atitit 技术管理项目管理的职责列表attilax总结 v2 r74 brch4com.docx
  13. greenplum客户端工具_GreenPlum数据加载工具gpload | 信春哥,系统稳,闭眼上线不回滚!...
  14. Quartus II 13.0安装和破解教程
  15. python连接cx_oracle时报错DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded:
  16. 表头顺序不一样的表格如何合并_表头一样的几个excel表怎么合并在一起?
  17. cppc文件无法正常输出汉字,将文件修改为UTF-8格式
  18. mysql MERGE 错误(differently defined or of non-MyISAM type)
  19. android适配器
  20. Android 沉浸式Dialog弹框

热门文章

  1. flatbuffers 和netty的结合使用
  2. sql server修改索引名称_【索引潜规则】覆盖索引、ICP、MRR详解
  3. 60进制时间计算器_不止加减乘除,Windows 自带计算器还有这些隐藏技巧
  4. vue input文本框中文字整体添加整体删除_揭秘神奇的PPT文本框,高手都喜欢这样的招数...
  5. linux nfs acl 特定ip,技术|RHCSA 系列(七): 使用 ACL(访问控制列表) 和挂载 Samba/NFS 共享...
  6. php功能与特性,PHP 6将实现的8个特性和功能
  7. MOSFET驱动器汇总 : 单个N-CHANNEL,半桥,全桥,3项桥
  8. 第十五届全国大学生智能车东北赛区成绩
  9. cnn 反向传播推导_深度学习中的参数梯度推导(三)下篇
  10. mysql数据集_Mysql 数据库-我的测试环境