一元线性回归&一元非线性回归
clc,clear ,close all
x=[23.8,27.6,31.6,32.4,33.7,34.9,43.2,52.8,63.8,73.4];
y=[41.4,51.8,61.7,67.9,68.7,77.5,95.9,137.4,155.0,175.0];
%Figure
%先画散点图
plot(x,y,'r*')
%xlabel ylabel
set(gca,'linewidth',2);
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
b1=Lxy/Lxx;
b0=mean(y)-b1*mean(x);
y1=b1*x+b0;
hold on
plot(x,y1,'linewidth',2);
%用linearModel
m2=LinearModel.fit(x,y);
%用regress
Y=y';
X=[ones(size(x,2),1),x'];
[b,bint,r,rint,s]=regress(Y,X);
clc,clear,close all
%一元非线性回归
%读入数据
x=[1.5,4.5,7.5,10.5,13.5,16.5,19.5,22.5,25.5];
y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
plot(x,y,'*','linewidth',2);
set(gca,'linewidth',2);
%x y label
%对数型
m1=@(b,x)b(1)+b(2)*log(x);
nonlinfit1=fitnlm(x,y,m1,[0.01;0.01])
b=nonlinfit1.Coefficients.Estimate;
Y1=b(1,1)+b(2,1)*log(x);
hold on
plot(x,Y1,'--k','linewidth',2)
%指数型
m2='y~b1*x^b2';
nonlinfit2=fitnlm(x,y,m2,[1;1])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r','linewidth',2)
%图例
legend('原始数据','a+b*lnx','a*x^b')
多元回归/逐步回归
多元回归
-
先画散点图,看有没有线性性质,再决定能不能用多元线性回归
-
代数据
-
模型检验
[b,bint,r,rint,s]=regress(Y',X,0.05)
一些参数解释
b:系数估计值
X:要自己加一个ones的列,这样常数项才能有系数
bint
:系数估计值的 95% 置信区间的矩阵
r
:由残差组成的向量
rint
:其中包含可用于诊断离群值的区间
stats
:包含 R2 统计量、F 统计量及其 p 值,以及误差方差的估计值。
一些概念解释
后面我都没贴概念解释了,因为感觉会涉及很多统计学知识,现在都要弄懂的话就会牵扯好多,所以打算先存疑。然后等这学期继续深入学概率论和自己看一些统计学书籍,到时候应该能用人话把这些概念复述出来
置信区间:
(默认95%)‘’我不知道真值是哪个,但我有95%的把握它在置信区间里‘’
F值表示整个拟合方程的显著性,F越大,表示方程越显著,拟合程度也就越好。
P值表示不拒绝原假设的程度。简而言之,P<0.5表示假设更可能是正确的,反之则可能是错误的。
r值是拟合优度指数,用来评价模型的拟合好坏等,取值范围是【-1,1】,越接近正负1越好。R平方=SSR/SST。其中SSR是回归平方和,SST是总离差平方和。

逐步回归
多元线性回归和多元多项式回归的结合:自动使得方程因子设置最合理
X= [7,26,6,60;1,29,15,52;11,56,8,20;11,31,8,47;7,52,6,33;11,55,9,22;3,71,17,6;1,31,22,44;
2,54,18,22;21,47,4,26;1,40,23,34;11,66,9,12];%自变量数据
Y= [78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3]; %因变量数据
stepwise (X, Y, [1,2,3,4],0.05,0.10) ;% in= [1,2,3,4] 表示 X1、X2、X3、X4 均保留在模型中
%进入页面后就是点next step然后导出得到一堆变量
logistic
以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为“是”或“否”,自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。然后通过logistic回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是胃癌的危险因素。同时根据该权值可以根据危险因素预测一个人患癌症的可能性。
Logistic回归模型的适用条件
1 因变量为二分类的分类变量或某事件的发生率,并且是数值型变量。但是需要注意,重复计数现象指标不适用于Logistic回归。
2 残差和因变量都要服从二项分布。二项分布对应的是分类变量,所以不是正态分布,进而不是用最小二乘法,而是最大似然法来解决方程估计和检验问题。
3 自变量和Logistic概率是线性关系
4 各观测对象间相互独立。
%logistic 回归 MATLAB 实现程序
%% 数据准备
clc, clear, close all
x0=xlsread ('logistic_exl. xlsx', 'A2: C21') ;
Y0=xlsread ('logistic_exl. xlsx', 'D2: D21');
X1=xlsread ('logistic_exl. xlsx', 'A2: C26');
%% logistics 函数
GM =fitqlm (X0, Y0, 'Distribution', 'binomial');
Y1= predict (GM, X1);
%% 模型的评估
NO=1: size (Y0,1);
N1=1: size (Y1,1);
plot (NO',Y0, '-kd');
hold on;
scatter (N1', Y1, 'b')
xlabe('数据点编号'); ylabel('输出值');
机器学习
数据量比较大,就有机器学习的用武之地
有监督学习:主要用于决策支持,比如分类和回归
无监督学习:主要用于知识发现,比如聚类
K-近邻分类方法:
初始化距离为最大值
计算未知样本和每个训练样本的距离dist
得到目前k个最邻近样本中的最大值maxdist
若dist小于maxdist,则将该样本作为K-邻近样本
重复上述步骤
统计k个邻近样本中每个类别出现的次数,选择频率最大的类别作为未知样本的类别
还有一种说法
是算距离,升序排列取前k个然后加权平均
最核心:k的选取
经验:直接试
均方根误差
适用于:样本容量比较大的自动分类问题
贝叶斯分类:就是我们学的那个贝叶斯
相关属性会降低朴素贝叶斯分类器的性能,因为对这些属性,条件独立的假设已经不成立
%% 准备环境
clear ,clc,close all
%% 导入数据及数据预处理
load bank.csv
%将分类变量转换成分类数组
names=bank.Properties.Variablenames;
category=varfun (@iscellstr,bank,' Output',' uniform');
for i = find (category)
bank.(names {i}) =categorical (bank. (names {i}));
end
%跟踪分类变量
catered =category (1: end- 1);
%设置默认随机数生成方式,确保该脚本中的结果是可以重现的 \
rng ('default');
%数据探索一数据可视化
figure (1)
gscatter (bank.balance, bank.duration, bank.Y, 'kk','xo')
xlabel('年平均余额/万元', fontsize,12)
ylabel('上次接触时间/秒',fontsize,12)
title('数据可视化效果图',fontsize,12)
set (gca, linewidth, 2);
%设置响应变量和预测变量
X= table2array (varun (double, bank (:,1: end-1)));
%预测变量 Y=bank. Y;响应变量
disp('数据中 Yes&No 的统计结果:')
tabulate(Y)
%将分类数组进一步转换成二进制数组,以便某些算法对分类变量的处理
XNum=[X(:,~catPred) dummyvar(X(:,catPred))];
YNum=double(Y)-1;
%% 设置交叉验证方式
cv= cvpartition (height (bank), holdout,0.40);
%训练集
Xtrain =X (training (cv), :);
Ytrain =Y (training (cv), :);
Xtrainnum =XNUM (training (cv),:);
Ytrainnum =YNUM (training (cv),:);
%测试集
Xtest =X (test (cv), :);
Ytest =Y (test (cv),:);
Xtestnum =XNUM (test (cv),:);
Ytestnum =YNUM (test (cv),:);
disp('训练集:')
tabulate (Ytrain)
disp('测试集:')
tabulate (Ytest)
%% 训练K-NN分类器
knn =ClassificationKNN.fit(Xtrain, Ytrain, 'Distance', 'seuclidean',...
'Numneighbors', 5);
%进行预测
[Y_knn, Yscore_knn]= knn.predict (Xtest);
Yscore_knn=Yscore_knn (:, 2);
%计算混淆矩阵
disp('最近邻方法分类结果:')
C_knn =confusionmat (Ytest, Y_knn);
%% 训练朴素贝叶斯分类器
dist =repmat ({'normal'}, 1, width (bank) -1) ;
dist (catPred) = {'mvmn'};
%训练分类器
Nb= Naivebayes.fit (Xtrain, Ytrain, 'Distribution',dist);
%进行预测
Y_Nb =Nb.predict (Xtest);
Yscore_Nb=Nb. Posterior (Xtest);
Yscore_Nb = Yscore_Nb (:, 2);
%计算混淆矩阵
disp ('贝叶斯方法分类结果:')
C_nb =confusionmat (Ytest, Y_Nb);
SVM p80(没咋看)
K-means 聚类
随机选点,表示聚类中心
不停迭代,直至收敛 《我的第一本算法书》讲的很好
% % k-means 方法的Matlab实现
% % 数据准备和初始化
clc,clear
x= [0 0;1 0;0 1;1 1;2 1;1 2;2 2;3 2;6 6;7 6;8 6;
6 7;7 7;8 7;9 7;7 8;8 8;9 8;8 9;9 9];
z= zeros (2, 2);
z1= zeros (2, 2);
z=x (1:2,1:2);%寻找聚类中心
while 1
count= zeros (2, 1);
allsum= zeros (2, 2);
for i=1:20%对每一个样本,计算到两个聚类中心的距离
temp1=sqrt ((z (1,1) -x (i,1)).^2+ (z (1,2)-x (1,2)).^2);
temp2=sqrt ((z (2,1)-x(i,1)).^2+ (z (2,2) -x (1,2)).^2);
if (temp1 <temp2)
count (1) = count (1) + 1;
allsum (1, 1) =allsum (1, 1) + x (i, 1);
allsum (1,2) =allsum (1,2) +x (i,2);
else
count (2) = count (2) + 1;
al1sum (2,1) = allsum (2,1) +x (i,1);
allsum (2, 2) = allsum (2, 2) +x (i, 2);
end
end
z1 (1,1) = allsum (1,1) / count (1);
Z1 (1,2) =allsum (1,2) / count (1) ;
z1 (2,1) = allsum (2,1)/count(2);
z1 (2,2) =allsum (2,2)/count(2);
if (z==Z1)
break;
else
z=z1;
end
end
% %结果显示
disp (z1);%输出聚类中心
plot (x (:,1), x(:,2),'k*','linewidth',2,'Markersize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.5,0.5,0.5])
hold on
plot (z1 (:,1),z1 (:,2), 'ko','linewidth',2,'Markersize',10,'MarkerEdgeColor','k','MarkerFaceColor',[0.5,0.5,0.5])
set (gca, linewidth, 2) ;
xlabel('特征 x1',' fontsize',12);
ylabel('特征 x2', 'fontsize',12);
title('K- means 分类图', 'fontsize' ,12);
网友评论