岭回归实现鲍鱼年龄预测 MATLAB实现

最近在研究正则化方法,发现吉洪诺夫正则化就是统计里的岭回归,正好之前上课的时候遇到过鲍鱼年龄预测的问题,那就再跑跑代码吧
鲍鱼的年龄可以通过鲍鱼壳的“环数”来判断,但是获取这个“环数”是十分耗时的,需要锯开壳,然后在显微镜下观察得到。
可以通过鲍鱼的其他特征比如性别、长度、直径、高度、整体重量、去壳后重量、脏器重量、壳的重量等,通过机器学习的方法来预测其环数,从而得到年龄,具有很大的应用价值。
现有一份鲍鱼的数据集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)