鲍鱼数据集案例分析-预测鲍鱼年龄(线性回归/梯度下降法实操)

本文对UCI机器学习库中的鲍鱼数据集进行了探索性分析,包括数据预处理(如OneHot编码、特征计算和筛选),然后实现了线性回归、岭回归和LASSO回归模型。通过对模型的评估(如MAE、MSE和R2系数)和残差图分析,展示了不同模型的预测性能。
摘要由CSDN通过智能技术生成

数据集来源UCI Machine Learning Repository: Abalone Data Set

一、数据集探索性分析

import pandas as pd
import numpy as np
import seaborn as sns
data = pd.read_csv("abalone_dataset.csv")
data.head()

#查看数据集中样本数量和特征数量
data.shape
#查看数据信息,检查是否有缺失值
data.info()

 

data.describe()

 

数据集一共有4177个样本,每个样本有9个特征。其中rings为鲍鱼环数,加上1.5等于鲍鱼年龄,是预测变量。除了sex为离散特征,其余都为连续变量。

#观察sex列的取值分布情况
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
sns.countplot(x='sex',data=data)
data['sex'].value_counts()

对于连续特征,可以使用seaborn的distplot函数绘制直方图观察特征取值情况。我们将8个连续特征的直方图绘制在一个4行2列的子图布局中。

i=1
plt.figure(figsize=(16,8))
for col in data.columns[1:]:
    plt.subplot(4,2,i)
    i=i+1
    sns.distplot(data[col])
plt.tight_layout()    

 

sns.pairplot()官网 seaborn.pairplot — seaborn 0.12.2 documentation

默认情况下,此函数将创建一个轴网格,这样数据中的每个数字变量将在单行的y轴和单列的x轴上共享。对角图的处理方式不同:绘制单变量分布图以显示每列数据的边际分布。也可以显示变量的子集或在行和列上绘制不同的变量。

#连续特征之间的散点图
sns.pairplot(data,hue='sex')

* 1.第一行观察得出:length和diameter、height存在明显的线性关系
* 2.最后一行观察得出:rings与各个特征均存在正相关性,其中与height的线性关系最为直观
* 3.对角线观察得出:sex“I”在各个特征取值明显小于成年鲍鱼

#计算特征之间的相关系数矩阵
corr_df = data.corr()
corr_df

fig,ax =plt.subplots(figsize=(12,12))
#绘制热力图
ax = sns.heatmap(corr_df,linewidths=5,
                cmap='Greens',
                annot=True,
                xticklabels=corr_df.columns,
                yticklabels=corr_df.index)
ax.xaxis.set_label_position('top')
ax.xaxis.tick_top()

二、鲍鱼数据预处理

您可以使用局部加权线性回归(Locally Weighted Linear Regression,简称LWLR)来预测鲍鱼年龄。下面是一个使用MATLAB实现的案例示例: ```matlab % 加载数据 data = load('abalone.csv'); X = data(:, 1:end-1); y = data(:, end); % 定义局部加权线性回归函数 function theta = lwlr(X_train, y_train, x, tau) m = size(X_train, 1); weights = exp(-sum((X_train - x).^2, 2) / (2 * tau^2)); % 计算权重 W = diag(weights); % 构建权重矩阵 X_train = [ones(m, 1), X_train]; % 添加偏置项 theta = pinv(X_train' * W * X_train) * X_train' * W * y_train; % 计算参数 end % 设置参数 tau = 0.1; % tau值越小,考虑的样本越少,模型越复杂;tau值越大,考虑的样本越多,模型越简单 % 预测鲍鱼年龄 x = [0.455, 0.365, 0.095, 0.514, 0.224, 0.101, 0.15]; % 样本特征值 y_pred = lwlr(X, y, x, tau); % 预测年龄 disp(['预测年龄:', num2str(y_pred)]); ``` 上述代码中,首先从`abalone.csv`文件中加载数据,其中最后一列是鲍鱼年龄,其余列是鲍鱼的特征。然后定义了一个`lwlr`函数来实现局部加权线性回归,该函数接受训练集特征值`X_train`、训练集标签值`y_train`、待预测样本特征值`x`以及`tau`值作为输入,返回预测年龄值。在`lwlr`函数内部,首先计算出每个训练样本与待预测样本之间的距离,然后根据距离计算出权重,构建权重矩阵,并利用加权最小二乘法计算出模型参数。最后,使用预测函数对指定样本特征值进行预测,并输出预测结果。 请注意,上述代码仅为示例,实际应用中可能需要对数据进行预处理、设置适当的`tau`值以及进行模型评估等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suki百香果

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值