最近在研究正则化方法,发现吉洪诺夫正则化就是统计里的岭回归,正好之前上课的时候遇到过鲍鱼年龄预测的问题,那就再跑跑代码吧
鲍鱼的年龄可以通过鲍鱼壳的“环数”来判断,但是获取这个“环数”是十分耗时的,需要锯开壳,然后在显微镜下观察得到。
可以通过鲍鱼的其他特征比如性别、长度、直径、高度、整体重量、去壳后重量、脏器重量、壳的重量等,通过机器学习的方法来预测其环数,从而得到年龄,具有很大的应用价值。
现有一份鲍鱼的数据集abalone.csv,该数据集有4177个数据样本,每个样本有9个特征,具体信息如下:
属性 数据类型 单位 内容描述
性别(Sex) 标称 M, F,I(infant)
长度(Length) 连续 毫米
直径(Diameter) 连续 毫米
高度(Height) 连续 毫米
整体重量(Whole weight) 连续 克
去壳后重量(Shucked weight) 连续 克
脏器重量(Viscera weight) 连续 克
壳的重量(Shell weight) 连续 克
环数(Rings) 连续
利用Matlab平台实现鲍鱼年龄的预测,主要分为数据导入、预处理、回归等步骤,直接上代码吧:
clear;
%导入数据
data = importdata('abalone.txt');
[m,n] = size(data.data);
dataX = data.data;%特征
dataY = data.textdata;%标签
dataY = cell2mat(dataY);
%标准化
yMeans = mean(dataY);
for i = 1:m
yMat(i,:) = dataY(i,:)-yMeans;
end
xMeans = mean(dataX);
xVars = var(dataX);
for i = 1:m
xMat(i,:) = (dataX(i,:) - xMeans)./xVars;
end
% 运算30次
testNum = 30;
weights = zeros(testNum, n);
for i = 1:testNum
w = ridgeRegression(xMat, yMat, exp(i-10));
weights(i,:) = w';
end
% 画出随着参数lam
hold on
axis([-9 20 -0.5 0.5]);
xlabel log(lam);
ylabel weights;
for i = 1:n
x = -9:20;
y(1,:) = weights(:,i)';
plot(x,y);
end
所需的函数ridgeRegression详见链接:
岭回归函数
数据集链接:
https://download.csdn.net/download/qq_38994076/47363926?spm=1001.2014.3001.5501
本文介绍了如何运用Matlab平台进行鲍鱼年龄预测,通过岭回归(吉洪诺夫正则化)方法,利用鲍鱼的性别、尺寸等特征数据集进行机器学习建模。数据预处理包括标准化,实验重复30次,展示了随着正则化参数变化的权重变化趋势。数据集链接和岭回归函数实现见文中。
903

被折叠的 条评论
为什么被折叠?



