使用matlab进行机械学习(1)

机械学习可粗略分为两大类:监督学习(数据有标签)和无监督学习(无标签)。监督学习包括线性回归,逻辑回归,神经网络,SVM等。无监督学习包括聚类算法以及降维算法等(提取目标特征)。这篇文章先从线性回归入手。

Matlab实现线性回归

Matlab基础语法,读取文件和绘图等操作就不再赘述。线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

单变量线性回归

评价拟合好坏可以使用皮尔逊相关系数:

其中:

标准差

r的取值[-1,1],负相关,正相关,绝对值大于等于0.5时又强相关性。

最小二乘法:预测值与实际值的差,即误差的平方和最小。 

Matlab算法实现:

mx = mean(x);
my = mean(y);
n = length(x);
sx = sqrt(sum((x-mx).^2)/(n-1));
sy = sqrt(sum((y-my).^2)/(n-1));
r = 1/(n-1)*sum(((x-mx)/sx).*((y-my)/sy));
a = r*sy/sx;
b = my-a*mx;
predict_y = a*x+b;

鉴于Matlab对于矩阵运算有着良好的支持,这里有另两种更简单给出最小二乘法两个系数的方法:

Y = y';
X = [ones(n,1),x'];
w = X\Y;%左除 第一个为截距,第二个斜率 

或者:

w = inv(X'*X)*X'*Y;

 

Matlab文档对regress函数的说明:

[b,bint,r,rint,stats] = regress(y,X,alpha) 还返回向量 stats,其中包含 R2 统计量、F 统计量及其 p 值,以及误差方差的估计值。矩阵 X 必须包含一个由 1 组成的列,以便软件正确计算模型统计量。

通俗一点讲,b为回归系数,bint表示回归系数的区间估计,r为残差,rint表示置信区间,stats表示用于检验回归模型的统计量,有三个数值:相关系数r^2、F值、与F值对应的概率p,alpha表示显著性水平(缺省时默认为0.05)

另一个有用的函数rcoplot(r,rint)可以用来画出残差及其置信区间。

该函数实例:

clear
X=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]';
X=[ones(16,1) X];
Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]';
[b,bint,r,rint,stats]=regress(Y,X,0.05);
scatter(X(:,2),Y)
hold on
yy = b(1)+b(2)*X(:,2);
plot(X(:,2),yy,'r')
figure
rcoplot(r,rint) 

可以发现存在一个残差在(-1,-5)之间的数据,很有可能是个有问题的点,需要剔除。

多项式回归

[p,S,mu] = polyfit(x,y,n),n为多项式幂次

同样可用regress函数来实现

T=[ones(14,1) t' (t.^2)'];
[b,bint,r,rint,stats]=regress(h',T);
y2 = b(1)+b(2)*t+b(3)*t.^2;

  

 

posted @ 2022-04-13 23:49  BensonLau  阅读(265)  评论(1)    收藏  举报