线性回归实战---Abalone鲍鱼年龄预测

这篇具有很好参考价值的文章主要介绍了线性回归实战---Abalone鲍鱼年龄预测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线性回归实现Abalone鲍鱼年龄预测


前面我们使用手动编写,后面通过sklearn第三方库来与我们手写的模型进行对比

一、环境准备

原始数据集下载及说明:https://archive.ics.uci.edu/ml/datasets/abalone

Python 3.9.13+PyCharm 2022.2.3 (Professional Edition) 或者 jupyter什么的自己选择

sklearn==1.1.3 pip install -U scikit-learn

数据集简介

官方的文档介绍如下:

abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能

从中我们可以看到原始数据集共有4177条数据,其中每条数据包含9个特征,见下表

名称 数据类型 测量单位 描述
性别 标称 M、F和I(婴儿)
长度 连续 mm 最长外壳测量
直径 连续 mm 垂直于长度
高度 连续 mm 壳中有肉
全重 连续 g 整只鲍鱼
屠宰重量 连续 g 肉的重量
内脏重量 连续 g 肠道重量(出血后)
壳重 连续 g 干燥后
Rings integer +1.5表示年龄(年)

同样的,我们还是可以不用太关心这些特征是什么并不影响我们后面对鲍鱼年龄的预测.

二、线性回归基础知识

什么是线性回归?

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。

abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能
abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能

“最小二乘法” 求解线性回归问题

abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能
abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能

推荐参考: 用人话讲明白线性回归LinearRegression

三、Python代码

# -*- coding: utf-8 -*-
# @Author : yxn
# @Date : 2022/11/12 18:49 
# @IDE : PyCharm(2022.2.3) Python3.9.13
import numpy as np
from scipy.stats import pearsonr
from sklearn import linear_model


class LinearRegression:
    """手动实现线性回归模型的LinearRegression类"""
    def __init__(self):
        self.w = None  # 增广权重向量
        self.n_features = None  # 用于存储样本属性的数量

    def fit(self, X, y):
        """
        在进行异常判断之后,将样本转化为增广特征向量,然后使用公式w=(X^TX)^{-1}X^Ty,
        利用numpy的dot与linalg.inv函数,实现最小二乘法。(需要判断样本数量是否大于属性数量)
        :param X: 训练属性集X训
        :param y: 练标签集y
        :return: 最优参数w
        """
        assert isinstance(X, np.ndarray) and isinstance(y, np.ndarray)  # assert(断言)用于判断输入值是否异常
        assert X.ndim == 2 and y.ndim == 1
        assert y.shape[0] == X.shape[0]
        n_samples = X.shape[0]
        self.n_features = X.shape[1]
        extra = np.ones((n_samples,))
        X = np.c_[X, extra]
        if self.n_features < n_samples:
            self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)  # 使用最小二乘法求权重w,np.linalg.inv:求逆矩阵
        else:
            raise ValueError('dont have enough samples')

    def predict(self, X):
        """
        用于执行测试,输入测试样本集,转化成增广特征向量,返回预测标签。
        :param X: 测试属性集X
        :return: 预测标签y_
        """
        n_samples = X.shape[0]
        extra = np.ones((n_samples,))
        X = np.c_[X, extra]
        if self.w is None:
            raise RuntimeError('cant predict before fit')
        y_ = X.dot(self.w)
        return y_


def loadDataSet(fileName):
    """
    数据集每一行为一个样本,其中最后一个值为标签,其余值为属性。
    根据文件名,依次读取每一行,将属性与标签转化为float类型,存储在列表中,再存入属性集xArr,标签集yArr
    :param fileName: 数据集文件名fileName
    :return: 属性集xArr,标签集yArr(转化成numpy的array类型)
    """
    numFeat = len(open(fileName).readline().split('\t')) - 1
    xArr = []
    yArr = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = []
        curLine = line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        xArr.append(lineArr)
        yArr.append(float(curLine[-1]))
    return np.array(xArr), np.array(yArr)


def main():
    """(顶层代码)线性回归模型完成鲍鱼年龄的预测
    :return:
    """
    # 使用loadDataSet函数读取文件abalone.txt,将返回的属性集、标签集赋值给X, y
    X, y = loadDataSet(r"E:\wynuJunior\模式识别\5回归实践\abalone.csv")
    # #===================手写LinearRegression==============================# #
    lr = LinearRegression()  # 实例化LinearRegression()模型
    lr.fit(X, y)  # 使用fit方法进行训练
    y_pre = lr.predict(X)  # 使用predict方法,对训练时的属性集再进行预测
    print("手写线性回归预测标签:", y_pre)
    # #===================sklearn模块中LinearRegression=======================# #
    sklearn_lr = linear_model.LinearRegression()  # 调用sklearn模块中的线性回归模型
    sklearn_lr.fit(X, y)  # 使用fit方法进行训练
    sklearn_y_pre = sklearn_lr.predict(X)  # 使用predict方法,对训练时的属性集再进行预测
    print("sklearn模块线性回归预测标签:\n", sklearn_y_pre)
    # 使用pearsonr相关系数,比较两种预测结果的差距。(顶层代码)
    # pearsonr函数可以从scipy.stats模块导入,输入两个序列,比较其相似性,
    # 现将手写模型的结果y_pre与sk-learn模型的结果sklearn_y_pre
    # 返回两个数值,分别代表相似性与置信度,其中第一个数值(相似性)应当为1,否则代表手写代码出现错误。
    print('手动编写的线性回归与sklearn中的线性回归预测结果相似性为: ', pearsonr(y_pre, sklearn_y_pre)[0])


if __name__ == '__main__':
    main()  # 程序执行入口
补充内容: 岭回归 
# -*- coding: utf-8 -*-
# @Author : yxn
# @Date : 2022/11/23 22:36 
# @IDE : PyCharm(2022.2.3) Python3.9.13
import numpy as np
from sklearn import linear_model


def loadDataSet(fileName):
    """
    数据集每一行为一个样本,其中最后一个值为标签,其余值为属性。
    根据文件名,依次读取每一行,将属性与标签转化为float类型,存储在列表中,再存入属性集xArr,标签集yArr
    :param fileName: 数据集文件名fileName
    :return: 属性集xArr,标签集yArr(转化成numpy的array类型)
    """
    numFeat = len(open(fileName).readline().split('\t')) - 1
    xArr = []
    yArr = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = []
        curLine = line.strip().split('\t')
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        xArr.append(lineArr)
        yArr.append(float(curLine[-1]))
    return np.array(xArr), np.array(yArr)


def Ridge_regression():
    """岭回归模型完成鲍鱼年龄的预测
    # 官方文档 https://scikit-learn.org/dev/modules/generated/sklearn.linear_model.Ridge.html
    """
    # 使用loadDataSet函数读取文件abalone.txt,将返回的属性集、标签集赋值给X, y
    X, y = loadDataSet(r"E:\wynuJunior\模式识别\5回归实践\abalone.csv")

    # #===================sklearn模块中岭回归=======================# #
    # l2正则化线性最小二乘。alpha是L2正则化常数,它乘以L2项,控制正则化的力量。
    # 当' alpha = 0 '时,目标等价于普通最小值平方.
    ridge_reg = linear_model.Ridge(alpha=0., solver='lsqr')  # 岭回归
    ridge_reg.fit(X, y)  # 使用fit方法进行训练
    ridge_y_pre = ridge_reg.predict(X)  # 使用predict方法,对训练时的属性集再进行预测
    print("sklearn模块岭回归预测标签:\n", ridge_y_pre)


if __name__ == '__main__':
    Ridge_regression()  # 程序执行入口

四、结果分析

运行结果如下:

abalone.txt线性回归,学习笔记,AI-机器学习,线性回归,Python,人工智能

可以看到我们是输出标签都是一样的,而且预测结果相似性也达到了99.9%,可见手写的线性回归是正确的.文章来源地址https://www.toymoban.com/news/detail-788995.html

到了这里,关于线性回归实战---Abalone鲍鱼年龄预测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习之利用线性回归预测波士顿房价和可视化分析影响房价因素实战(python实现 附源码 超详细)

    数据集和源码请点赞关注收藏后评论区留下QQ邮箱或者私信 线性回归是利用最小二乘函数对一个或多个因变量之间关系进行建模的一种回归分析,这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个变量的称为一元回归,大于一个变量的情况叫做多元回归。

    2024年01月21日
    浏览(45)
  • Python预测——多元线性回归

    答辩结束了,把论文里有用的东西摘出来。 多元线性回归模型: 其中 y 为要预测的变量,x 为影响 y 值的变量,b 为回归系数,计算方式为: 计算结果为一个矩阵,分别对应b0,b1,b2,b3。 对猪肉价格进行预测,即猪肉价格作为 y,选择猪肉价格指数,生猪屠宰量,猪粮比作

    2024年02月03日
    浏览(35)
  • 利用线性回归实现股票预测分析

    💥 项目专栏:【机器学习项目实战案例目录】项目详解 + 完整源码 🌠 『精品学习专栏导航帖』 🐳

    2024年02月10日
    浏览(33)
  • 简单线性回归:预测事物间简单关系的利器

    在数据科学领域,线性回归是一种基本而强大的统计分析方法。它广泛应用于各个领域,从经济学到生物医学研究,从市场营销到城市规划,目的是建立和利用变量之间的简单关系,以便预测未来趋势或做出决策。在本文中,我们将深入探讨简单线性回归的工作原理、应用场

    2024年02月13日
    浏览(52)
  • 实验 09 线性回归与波士顿房价预测

    掌握机器学习的基本概念 掌握线性回归的实现过程 应用LinearRegression实现回归预测 知道回归算法的评估标准及其公式 知道过拟合与欠拟合的原因以及解决方法 Jupter Notebook 人们在生活中经常遇到分类与预测的问题,目标变量可能受多个因素影响,根据相关系数可以判断影响因

    2024年02月11日
    浏览(34)
  • 使用线性回归构建波士顿房价预测模型

    波士顿房价数据集统计了波士顿地区506套房屋的特征以及它们的成交价格,这些特征包括周边犯罪率、房间数量、房屋是否靠河、交通便利性、空气质量、房产税率、社区师生比例(即教育水平)、周边低收入人口比例等 。我们的任务是根据上述数据集建立模型,能够预测房

    2023年04月14日
    浏览(65)
  • Python多元线性回归预测模型实验完整版

    实验目的 通过多元线性回归预测模型,掌握预测模型的建立和应用方法,了解线性回归模型的基本原理 实验内容 多元线性回归预测模型 实验步骤和过程 (1)第一步:学习多元线性回归预测模型相关知识。 一元线性回归模型反映的是单个自变量对因变量的影响,然而实际情况

    2024年02月09日
    浏览(35)
  • 【线性回归、岭回归、Lasso回归分别预测患者糖尿病病情】数据挖掘实验一

    任务描述:将“diabetes”糖尿病患者数据集划分为训练集和测试集,利用训练集分别结合线性回归、岭回归、Lasso回归建立预测模型,再利用测试集来预测糖尿病患者病情并验证预测模型的拟合能力。 具体任务要求如下: 搜集并加载“diabetes”患者糖尿病指数数据集。 定义训

    2024年02月07日
    浏览(46)
  • 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测

    效果一览 基本介绍 时序预测 | MATLAB实现NARX非线性自回归外生模型房价预测 研究内容 NARX(Nonlinear AutoRegressive with eXogenous inputs)是一种非线性自回归外生模型,可以用于时间序列预测,其中外生变量可以帮助提高预测的准确性。在房价预测中,NARX模型可以使用历史房价数据

    2024年02月16日
    浏览(52)
  • 机器学习实验——单变量线性回归(披萨价格预测问题)

    假设某披萨店的披萨价格和披萨直径之间有下列数据关系: 训练样本 直径(英寸) 价格(美元) 1 6 7 2 8 9 3 10 13 4 14 17.5 5 18 18 根据上面的训练数据,预测12英寸的披萨的可能售价。 1、直径为自变量X,价格为因变量y,画出二者的散点图,并给出结论。 2、根据现有的训练数

    2024年02月05日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包