sklearn回归综合案例:鲍鱼年龄预测

本文介绍了如何使用sklearn库对鲍鱼年龄预测数据集进行探索性分析、预处理,包括特征处理、模型构建(线性回归、岭回归和LASSO),以及模型效果的评估,包括残差图和各种误差指标如MAE、MSE和R2分数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本篇文章中使用Abalone Data Set数据集进行预测。

1.数据集探索性分析

1.1读取数据集

(1)首先将鲍鱼数据集abalone_dataset.csv读取为PandasDataFrame格式.

import pandas as pd
import warnings
warnings.filterwarnings('ignore')
data = pd.read_csv('abalone_dataset.csv')
data.head()  #查看数据集前几行

运行的结果如下:
在这里插入图片描述

(2)查看数据集的部分信息

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

在这里插入图片描述

数据集一共有4177个样本,每个样本有9个特征。其中rings为鲍鱼环数,能够代表鲍鱼年龄,是预测变量(因变量)。除了sex为离散特征,其余都为连续变量。


(3)观察sex列的取值分布情况
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.countplot(x = 'sex', data = data)

print(data['sex'].value_counts())

1.2数据可视化分析

(4)对于连续特征,可以使用seaborn的displot函数绘制直方图观察特征取值情况。

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(data, hue="sex")观察data的特征。

(5)定量地分析特征之间的线性相关性,使用corr_df = data.corr()

(6)绘制热力图

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()

热力图

  • 因变量颜色最浅,说明因变量rings与其他变量线性相关性最弱。

2.鲍鱼数据集预处理

2.1处理sex特征

因为sex特征是离散变量,需要用Pandas的get_dummies函数对sex特征做独热编码处理

import pandas as pd
sex_onehot = pd.get_dummies(data['sex'], prefix = 'sex')   #prefix是前缀
data[sex_onehot.columns] = sex_onehot    #将处理后的数据加入数据表的后三列
data.head()

运行结果:
在这里插入图片描述
需要挑选出其中的最大无关组,否则多重共线性会影响模型出现幻觉。经观察后三列只需要其中两列即可。

2.2添加取值为1的特征(theta_0列)

利用解析解求回归系数

data['ones'] = 1 
print(data.head())  

2.3根据鲍鱼环计算年龄

data['age'] = data['rings']
### Python 中使用机器学习进行线性回归案例 #### 使用 Scikit-Learn 进行简单线性回归 Scikit-learn 是一个强大的机器学习库,提供了多种算法来处理不同的数据集。对于线性回归问题,`LinearRegression` 类是一个常用的工具。 ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression import numpy as np import pandas as pd # 创建一些虚拟的数据作为例子 np.random.seed(0) X = 2 * np.random.rand(100, 1) y = 4 + 3 * X + np.random.randn(100, 1) # 将数据分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化并拟合模型 lin_reg = LinearRegression() lin_reg.fit(X_train, y_train) # 输出截距项和系数 print(f'Intercept: {lin_reg.intercept_}') print(f'Coefficients: {lin_reg.coef_}') # 预测新样本的结果 predictions = lin_reg.predict(X_test) # 计算均方误差 (MSE),评估模型性能 mse = ((predictions - y_test)**2).mean() print(f'Mean Squared Error on Test Set: {mse}') ``` 这段代码展示了如何利用 scikit-learn 库中的 `LinearRegression` 来构建一个简单的线性回归模型[^2]。通过创建随机生成的一维特征矩阵 \(X\) 和对应的标签向量 \(y\) ,然后将其分割成训练集和验证集来进行建模与评价。 #### 实际应用实例:预测鲍鱼年龄 另一个具体的例子来自于对实际生物数据的应用—预测鲍鱼年龄。这里采用的是更复杂的多变量线性回归方法: ```python def standRegres(xArr,yArr): xMat = mat(xArr); yMat = mat(yArr).T xTx = xMat.T*xMat if linalg.det(xTx) == 0.0: print("This matrix is singular, cannot do inverse") return ws = xTx.I * (xMat.T*yMat) return ws data = loadtxt('abalone.txt') abX=data[:,1:] abY=data[:,0] ws=standRegres(abX[:99], abY[:99]) yHat=mat(abX[100:]).dot(ws) error=rssError(abY[100:], yHat.flatten()) print(error) ``` 此段程序读取存储于文件 'abalone.txt' 的鲍鱼数据集,并从中提取前几列作为输入特性(\(X\)),而首列为响应变量(\(y\))。接着运用自定义函数 `standRegres()` 完成了标准最小二乘解法求得权重向量 \(\omega_s\), 并计算剩余平方和(RSS)以衡量模型的好坏程度[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值