决策树
clear;clc;close all
load fisheriris;
X=meas;Y=species;
Mdl=fitctree(X,Y,'MaxNumSplits',8,'CrossVal','on');
view(Mdl.Trained{1},'Mode','graph');
logit回归
[b,dev,stats]=glmfit(x,y,'binomial', 'link', 'logit');
%b系数,dev表示残差
p = glmval(b,x, 'logit');
SVM
生成一个ClassificationSVM 对象
SVMModel = fitcsvm(X,y)
SVMModel.ClassNames%模型中的类名
%模型的支持向量
SVMModel.SupportVectors
%模型的支持向量
SVMModel.IsSupportVector
预测:
label = predict(SVMModel,TBL)
label = predict(SVMModel,X)example
[label,Score] = predict(___)
误差判定:
CVSVMModel = crossval(SVMModel);
classLoss = kfoldLoss(CVSVMModel)
贝叶斯
ObjBayes = NaiveBayes.fit(training,group,'Distribution','kernel')
pre0 = ObjBayes.predict(training);
Mdl = fitcnb(X,Y)
estimates = Mdl.DistributionParameters
完整案例
load fisheriris
X = meas;
Y = species;
classNames = {'setosa','versicolor','virginica'}; % Class order
prior = [0.5 0.2 0.3];
Mdl = fitcnb(X,Y,'ClassNames',classNames,'Prior',prior)
注意:训练过程不适用prior,因此可以在训练后改prior
CVMdl=crossval(Mdl) loss=kfoldLoss(CVMdl)
判别分析
[class,err,POSTERIOR,logp,coeff] = classify(sample,training,group)
回归:
x=[0:30]';
y=x.*rand(size(x))*100;
one1=ones(size(x));
[b,bint,r,rint,stats]=regress(y,[one1,x]);
b,bint,stats
rcoplot(r,rint)
系统聚类
%系统聚类完整步骤
clear
X=rand(100,4)
Y=pdist(X)%距离向量
Z=linkage(Y,'average')%从距离向量创建聚类树矩阵
[H,T]=dendrogram(Z,'colorthreshold','default')%画树形图
cluster(Z,3)%分3类
pdist
squareform%把pdist生成的距离矩阵转化(或逆转化)成向量形式
linkage
dendrogram
cophenet
cluster
cluserdata
inconsistent
模型验证方法
注1:一般情况下,我们把y=1作为class1;然而,matlab 把第一行作为class1,因此,在二分类问题中,需要做这样的变换:[y;1-y],[p;1-p]
注2:注1的情况,是因为confusion函数中,把单行的处理给弄反了!roc函数中,就可以不用这么麻烦,直接用(y,p)就好了
注3:还缺一个C统计量,自带算法没有
注4:plotroc不支持subplot等运算,还是手动分解一下比较好
confusion matrix
[c,cm,ind,per] = confusion([y;1-y],[p;1-p])
c:错误率
cm:计数,cm(i,j)表示y落在class i中,p落在class j中
ind:cm对应的原始数据的序号
per:per(i,1:4)分别对应:FN/total actual negative,…
ROC
几种画ROC图的方法:
- plotroc
plotroc(y,p)
- roc
[tpr,fpr,thresholds] = roc([y;1-y],[p;1-p]); figure plot(fpr{1},tpr{1})
- plot
plot_it_y=[] plot_it_y=[] for i=1:100 p1=p>i/100; [c,cm,ind,per] = confusion([y;1-y],[p1;1-p1]); plot_it_y(i,1)=cm(1,1)/(cm(1,1)+cm(1,2)); plot_it_x(i,1)=cm(2,1)/(cm(2,1)+cm(2,2)); end plot(plot_it_x,plot_it_y)
【鼠标流1】一键22个机器学习模型
【鼠标流】Matlab一键生成22个机器学习模型的方法:
APPS–>Classification Fitting–>New Session–>Start Session
选择数据后自动开始运行模型
【鼠标流2】用鼠标实现4种神经网络
【鼠标流】Matlab一键使用神经网络 命令行敲入:
nnstart
会有4个选择按钮,对应4组神经网络模型
- Fitting(nftool)
- Pattern recongnition and Classification(nprtool)
- Clustering (nctool)
- Dynamic Time series (ntstool)
也可以点击APP按钮调出这4组模型
Fitting
nftool
模型是3层BP神经网络:
- input layer. Matlab不把input layer当成1层,因此显示是Two-layer-forward neural network
- Hidden layer. 用sigmoid函数
- output. 用线性函数
建模过程:
- 导入数据
- 选择Validating,Testing的比例
- 输入Hidden Neurouns数量,推荐值参考我的另一篇博客
- 输入算法算法包括3种
- Levenberg-Marquardt
- Bayesian Regularization
- Scaled conjugate Gradient
- train!
会给出训练图,图上各个部分的意义很容易理解
训练完后后可以画各种图 一些意义:- validation=6, 意思是连续6次,validation效果变差,这时算法停止。
- regression是预测值和真实值的回归
- 回到nftool界面,点Next. 可以保存代码、模型、数据 例如,模型保存为network名为net,下次可以用net(data)命令做预测了 net.b, net.iw, net.Lw
Pattern recongnition and Classification
3层神经网络:
- 第一层input layer
- 第二层sigmoid
- 第三层softmax
操作与regression几乎相同
图多了confusion matrix,ROC
Clustering
用的是SOM神经网络
操作相似
- Size of two-dimension Map
如果设为2,结果分为4类
如果设为n,结果分为$n^2$类
结果分析:
Plots->SOM Neighbor Distances
这个图中,颜色越深,表示距离越远
SOM Sample Hits
分组
调整模型:
生成的代码里,改变神经元数量:
dimension1 = 1;
dimension2 = 3;
这样,就能把样本分为3类了
Dynamic Time series
时间序列,下面有3个模型,各自用途写的比较清晰。
建模过程大致与上面类似,不同点是:
- 要输入滞后阶d
- 图多了个Time-Series Response
PCA
barttest
pcacov
prncomp
pcares
pca