Python实现多元线性回归

💥 项目专栏:【探索机器学习之旅】原理与实践,Python算法实现


前言

🚀 欢迎莅临本专栏!在这里,我们将为机器学习的新手和初次尝试 sklearn 的用户群体提供一系列有趣的原生Python机器学习算法实现。我们的目标是让您轻松入门机器学习,并深入探索算法的内部奥秘。💡

在这个专栏中,我们专注于使用原生Python实现一些经典机器学习算法,比如决策树、逻辑回归等。通过自己亲手复现算法,我们将理论与实践紧密结合,让您对这些算法有更深入的理解。每篇文章都会附带完整的代码和详细讲解,助您逐步掌握算法的核心概念和运行原理。🔍📝

哪怕您是零基础,也不必担心!本专栏旨在为您提供一条通向机器学习世界的清晰路径。我们坚信,通过这些实践和理论指导,您将快速掌握机器学习的精髓,并在未来的学习和探索中展翅高飞!🌈🌟

来吧!让我们一起踏上机器学习之旅,探索这个神奇领域,畅游在算法的海洋中,感受数据科学的魅力吧!🌊💻🔬


🚨 欢迎来到我的机器学习探索项目环境!📊🐍

  • 平台:Windows 11 🖥️
  • 语言环境:Python 3.7 🐍
  • 编译器:Jupyter Lab 📘🔬
  • 数据处理:Pandas 1.3.5 🐼📈
  • 数值计算:Numpy 1.19.3 🔢🧮
  • 科学计算:Scipy 1.7.3 🧪📚
  • 数据可视化:Matplotlib 3.1.3 📊🎨

在这个酷炫的项目环境里,我们将使用强大的Python语言,搭配Jupyter Lab编译器,为您带来一流的机器学习学习体验。Pandas将为我们处理数据,Numpy则助力高效的数值计算,而Scipy则为我们的科学计算保驾护航。

让数据更加生动的秘密武器是Matplotlib,它将以图表的形式展现复杂的信息,让您轻松洞悉数据的特征和趋势。📊📈🔍

让我们一起在这个有趣的机器学习之旅中探索新的可能性吧!🚀🌟💻


让我们一起启程,探索机器学习的奇妙世界!🚀💡🤖

💥 项目专栏:【探索机器学习之旅】原理与实践,Python算法实现

在这里插入图片描述


一、基于原生Python实现多元线性回归(Multiple Linear Regression)算法

📊 多元线性回归,让你的数据说话!🔍💬

多元线性回归是一种神奇的统计学方法,让你在数据的海洋中探寻变量之间的关系。通过多个自变量,我们能够预测一个因变量的值,揭示隐藏在数据中的真相。

在这个算法的舞台上,回归系数扮演着重要角色。它们是因变量与自变量之间的密切关联,如同代码与数据间的默契。

而我们的武器——最小二乘法,为我们提供了数学的魔法。通过最小化残差平方和,我们捕捉了实际值与预测值的微妙关系。

让我们带上数据的眼镜,走进多元线性回归的世界,探寻数据的奥秘,解读变量的谜语!💫🔬📚

在这里插入图片描述

本篇文章,我们将跳入Python的怀抱,一起探索机器学习的经典算法——多元线性回归!🚀🔍

使用Python的神奇力量,我们将为你实现多元线性回归的魔法,揭开自变量与因变量间的神秘面纱。🔮🧙‍♀️

通过代码的舞蹈,数据的交错,让我们一同探寻预测的奥秘,解读数据的密码!📊💬🔑

二、多元线性回归模型的算法原理

📚📈 多元线性回归模型,我们来深入了解一下!🧐

  1. 首先,假设模型是关键!它认为自变量和因变量之间的关系都是线性的,就像一条直线一样!📏💹这个模型被定义为:y = β₀ + β₁x₁ + β₂x₂ + … + βₙxₙ + ε,其中y是因变量,而x₁, x₂, …, xₙ则是自变量,而β₀, β₁, β₂, …, βₙ则是那些神秘的回归系数,而ε则是不可避免的误差项!👀😅

  2. 接下来,我们迫切地想知道这些回归系数是多少,才能让我们的预测和实际值差别最小!这就是最小二乘法上场的时候了!🔍💡这个神奇的方法通过最小化残差平方和来寻找最佳回归系数,也就是让我们的预测值和实际值尽可能地贴近!🎯💯通过数学推导,我们得到了回归系数的解析解,走的是捷径!😎✨

  3. 现在,我们知道模型是如何训练的,但是我们怎么知道它好不好呢?这就要用到评估指标啦!📊📉 我们用均方误差(MSE)和决定系数(R²)等指标来衡量模型的预测能力,越小的MSE和越接近1的R²表示我们的模型表现越好!🏆👏

  4. 训练好模型后,我们可以拿它去预测未知数据,就像一个未来预言家一样!🔮💫根据输入的自变量和回归系数,我们可以预测未知数据的输出,是不是有点厉害!😉🌟

所以,多元线性回归模型不止是一种算法,它是一个能够建立多个自变量与因变量之间关系的统计学方法!让我们掌握这个方法,成为数据预测的高手吧!💪💻

三、算法实现

📚🔢 多元线性回归算法来啦!让我们一起用原生Python搞懂它的奥秘吧!🤓🔍

嘘~我们不走捷径,不用sklearn直接调用,要自己动手复现哦!🚀🔧 因为只有亲自实现,才能真正理解算法内部的魔力!🧙‍♂️✨

但别担心,我们不会让你一下子掌握所有细节,我们保留了算法的核心,帮助你逐步理解!🎯🔍 就像是搭积木,先搭主干,再添枝加叶!💪🌳

多元线性回归是用来建立多个自变量和因变量之间关系的神奇方法,我们假设它们之间存在线性关系,就像是一条直线穿过数据点!📏💹 这就是我们的模型,准备好了吗?

接下来,我们用最小二乘法找到那些神秘的回归系数,让我们的预测值和实际值之间误差最小化!🔎💡 哇!它就像是一个数学魔法师,算出了回归系数的解析解!😲🌟

但是我们还需要知道我们的模型到底有多强大!所以我们用均方误差(MSE)和决定系数(R²)等指标来评估模型的表现!📊📉 数值越小越接近1,证明我们的模型表现越好!🏆👍

最后,我们可以拿训练好的模型去预测未知数据,就像是未来的预言家一样!🔮💫 根据输入的自变量和回归系数,我们可以预测出未知数据的输出,有点厉害哦!😉🌠

所以,新手小白,这就是多元线性回归算法的简易版!别急着揭开所有奥秘,先搞懂主干,再追求细节!🤩📚 一步一步,成为算法大师,拥抱机器学习的世界吧!💻💪

3.1 导包

📚🔬 这个项目需要的法宝库可不简单哦!让我们看看都有哪些神奇的帮手吧!🧙‍♂️🌟

  • 首先是numpy,这可是一位科学计算大师!🧮🔢 它擅长处理数值运算,让复杂的矩阵计算变得轻松自如!💪📈

  • 接下来是matplotlib,这是绘图的瑰宝!🎨📊 它能画出漂亮的图表,让数据一目了然!📊📉

  • 还有sklearn.datasets,真是数据集的捷径!🎯🗺 它可以帮我们轻松导入训练所需的数据集,方便又快捷!📂🚀

  • 最后是train_test_split,这可是测试的神奇分割器!✂️📚 它能将数据集一分为二,让我们有个测试集做模型的考核!🎯🎓

这些法宝库组合在一起,就是我们实现多元线性回归算法的关键!🔑🏆 让我们牵着它们的手,一起探索机器学习的奥秘吧!🤩💻🌠

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

3.2 定义随机数种子

🔍🌈 嗨!让我们来揭开随机数种子的神秘面纱吧!🎭🎲

在机器学习的世界里,随机数种子就像是一把魔法钥匙!🔑🧙‍♀️ 它可以确保我们的实验结果在不同时空中都是一致的,就像时间旅行一样!⏳🚀

当我们的算法涉及到一些神秘的随机初始化参数或者随机选择训练样本时,结果可能会有点鬼魅!👻🎯 但是有了随机数种子,我们就能稳固结果的信心,不再让不确定性蒙蔽我们的眼睛!👀✨

但记住,随机数种子是有一些讲究的哦!😉💡 确保数据集、算法和参数都保持一致,我们才能召唤出可重复的结果!🔄🔁

让我们手牵手,保持稳定,一起踏上神奇的机器学习之旅吧!🚀🤖💫

# 设置随机种子
seed_value = 2023
np.random.seed(seed_value)

3.3 定义多元线性回归模型

📚🔍 撒上魔法的封装,逻辑回归和 sklearn 现在如出一辙!🔮🎩

多元线性回归模型求解,在两个神奇步骤中完美展现:训练和预测的精彩演绎!🚂🎭

首先是训练,我们的模型要发挥潜力,就得拥有 fit 力量!💪💥 稳稳地契合数据,调整参数,埋下预测的种子!🌱🌾

而预测,则是它的时刻!预测的 predict 魔法现身!🔮✨ 那些神秘特征乘上回归系数,化为预测的光芒!🌟🔍

最后,为了评判它的表现,让 score 神技来帮忙!🎯📈 它会揭示预测的精准程度,告诉我们结果的美妙!🌈🌟

现在,我们掌握了这些魔法,逻辑回归和 sklearn 封装的算法不分伯仲!🎉🤝 无论是从头打造,还是调用现成,机器学习之旅都会更加愉快!🚀💫

模型训练

📚🔍 多元线性回归模型的目标就是寻找那个独一无二的、最优的参数组合,让模型在训练数据上表现得最完美!🎯🔮 这里的最优,指的是能让预测误差小到几乎看不见的程度!🎯🌟

具体来说,我们将这些神秘的数据化为矩阵 X 和向量 y,展现出 m×n 和 m×1 的神奇姿态!💫💫 损失函数 J ( θ ) J(\theta) J(θ),它是模型与现实的差异之衡量,用均方误差(MSE)为名,一举控制所有误差的量级!🎯🏆

那么,多元线性回归模型的目标可以表示为:

m i n i m i z e : J ( θ ) = 1 2 m s u m ( ( X ∗ θ − y ) 2 ) minimize: J(\theta) = \frac{1}{2m} sum((X * \theta - y)^2) minimize:J(θ)=2m1sum((Xθy)2)

其中, θ \theta θ 是一个 n×1 的参数向量,它包含了所有的模型参数。 X ∗ θ X * \theta Xθ 是对所有样本的预测值,它是一个 m×1 的向量。 J ( θ ) J(\theta) J(θ) 是损失函数,它用来衡量预测值与实际值之间的误差。在这里,我们使用均方误差(MSE)作为损失函数。

为了找到这些最优参数,我们可以选择梯度下降算法或正规方程求解法!📈🔍 梯度下降,一种迭代优化的神奇算法,不停更新参数,不留余地地降低损失函数的价值!💨🏃‍♂️而正规方程求解法,则是一种直接求解之术,寻找模型参数的最小二乘解,揭示最优参数的真面目!🔍🌟

无论是梯度下降,还是正规方程,它们都是解谜的法宝,指引我们找到那最佳的参数组合,为预测的世界带来奇迹!🌈💫

模型预测

🔮🎯模型训练完成后,就轮到预测登场啦!当我们迎来了一个全新的数据样本时,想知道它的目标值,我们的训练好的模型就能派上用场啦!🎉🎊

预测的奥秘就隐藏在这个神秘的公式之中:🔍🔮

y ^ = X ⋅ θ \hat{y} = X \cdot \theta y^=Xθ

这个公式真是不简单,它用到了我们的训练数据矩阵 X 和那些最优的参数组合 θ!💫🎯

X 是我们新数据样本的特征矩阵,里面包含了所有的特征。θ 则是我们在训练时找到的那些最优参数,它们把我们的模型塑造得栩栩如生!🌟💪

通过这个神奇的公式,我们的模型就能够预测出新数据样本的目标值 y ^ \hat{y} y^,仿佛预见了未来一样!🔮🚀

而这一切,都是在我们的模型训练完成后才能够拥有的神奇能力!🌈🌟 所以,不要犹豫,让我们的模型走上预测的舞台,为未知的世界带来精彩的表演吧!🎭🎉

y p r e d = X t e s t ∗ θ y_{pred} = X_{test} * \theta ypred=Xtestθ

其中, X t e s t X_{test} Xtest 是一个 m×n 的测试数据矩阵,它包含了 m 个测试样本,每个样本有 n 个特征。 θ \theta θ 是训练好的参数向量,它包含了所有的模型参数。 y p r e d y_{pred} ypred 是一个 m×1 的向量,它包含了对所有测试样本的预测值。

📊📈最终,我们要对我们的模型表现进行严格评估!为了确保我们的模型真正具有预测的魔力,我们需要用到两个厉害的评估指标:均方误差(MSE)决定系数(R2)!🎯🎯

首先,让我们来看看均方误差(MSE)。这个指标告诉我们模型预测值与真实值之间的平均误差有多大。我们希望MSE越小越好,因为这意味着我们的模型预测得越准确,精度越高!🎯🏆

接着,是决定系数(R2)。这个指标告诉我们我们的模型能解释因变量变化的程度。它的取值范围在0到1之间,越接近1意味着我们的模型解释能力越强,越接近0则解释能力较差。我们当然希望R2越接近1越好,因为这表示我们的模型真的能很好地解释数据!📊🌟

通过这两个神奇的评估指标,我们就能够知道我们的模型到底有多厉害!🌟💪让我们用这些神奇的力量,来挑战更多未知的数据,带领我们走向更广阔的机器学习世界吧!🚀🌌

3.3.1 模型训练

🧮🔍嗨!让我们继续探索多元线性回归的神秘世界吧!在本项目中,我们采用了一种神奇的方法来找到模型的最优解,就是通过最小二乘法直接求解!🌟📈

我们的目标是要找到那个让损失函数达到最小值的点,这个点就是我们的模型参数的最优解!🎯🔍为了找到这个宝贵的最小值,我们需要做一件非常厉害的事情——对损失函数求导!🔍🎩

通过求导,我们可以找到损失函数的极小值点,也就是让我们的模型预测误差达到最小的地方!💡🎉这样一来,我们就能得到那些神秘的参数,让我们的模型在训练数据上拟合得更好,预测效果更准确!💪🎯

θ = ( X T X ) − 1 X T y θ = (X^T X)^{-1} X^T y θ=(XTX)1XTy

🏋️‍♀️💨哇哦,你真是个机器学习健将!👏🎉没错,你说得太对了,直接求解方程对计算机来说就像是举重过猛,消耗过多资源了!🏋️‍♂️🔥

不过,大家都知道,懒人才是工程师的优良品质,所以机器学习大师们都想了个巧妙的办法——梯度下降法!🚀🎯这招真是高明啊,不断更新参数,让它们不断靠近最优点附近,效率那叫一个高!💪🏃‍♂️🏃‍♀️虽然不能得到全局最优点,但咱们不求甚解,只要达到目标就好了!

这就像我们追求完美一样,虽然全能的完美不太可能,但我们总是在不断优化,让模型更接近最佳状态!💪🌟就是这种高效的策略,让机器学习任务变得如虎添翼,让计算机跑得更快,效果更佳!🚀💨

📢🤔小伙伴们注意啦!为了让你们不再纠结为什么没有使用梯度下降法,我来给你们揭开这个谜底!🕵️‍♂️🔍

当然,我们这里不是刻意避开梯度下降法的,而是迎合了算法最初设计的初衷哦!🎯😉嘿嘿,就像有时候我们吃烧烤,也不是一定要全吃完,为了提升吃烤肉的效率,我们可能只挑几个最美味的品尝一下!🍖🍡

梯度下降法,虽然是工程项目中常用的方法,但有时候也会因为计算资源的限制,让我们不得不另辟蹊径,直接求得最优参数。就好像有时候没时间做运动,我们也要通过其他方式保持健康嘛!🏋️‍♀️💪

所以,小伙伴们不要纠结哦!无论是最小二乘法还是梯度下降法,我们都是在探索算法的美妙世界,为了达到更高的效率和准确性,我们不断尝试和创新!🚀🌟

🏋️‍♂️🚀嗯嗯,使用梯度下降,模型的训练策略就像是一场锻炼计划!让我来为你整理一下这个训练流程,保证你的模型练得棒棒哒!💪🏃‍♂️

  1. 首先,我们要为模型做好准备,就像准备进入健身房一样!🏋️‍♂️我们初始化模型参数,即给每个特征一个权重,还有个偏置用来做调整。

  2. 接下来,是我们的正向传播!就像是在健身房里大展身手,我们把训练数据的特征和模型的权重组合在一起,再加上那个偏置,得到一个线性组合。然后,我们把这个组合输入到sigmoid函数中,就像是通过训练来让身体变得更加灵活!💃

  3. 嗯嗯,接下来是计算损失函数,就像我们每次训练后,测量一下自己的体重一样!📏我们用对数损失函数来衡量模型的表现,看看我们预测的概率和实际结果之间的差距。然后,把所有样本的损失函数加在一起,再除以样本数量,得到平均损失函数。

  4. 然后,是时候进行反向传播了!就像在健身房里调整自己的动作一样,我们要调整模型的参数,让它们越来越准确!🔧首先,我们需要计算损失函数对模型参数的偏导数,也就是梯度。然后,使用梯度下降算法,逐步更新模型的权重和偏置,让它们朝着更优的方向前进!

  5. 好了,现在是重复锻炼的时候!就像每次健身都要多次重复一样!我们不断重复步骤2到4,直到达到预定的迭代次数或损失函数达到某个阈值。这样,我们的模型就会越来越精进,准确度也会不断提高!📈📈

嘿嘿,是不是感觉像是在为模型定制个人化训练计划呢?希望这个解释让你对梯度下降的训练策略有更深刻的理解!💡💡记住,机器学习就是不断调整参数,找到最佳的模型,就像不断优化自己的训练计划,达到更好的效果!💪💻

def fit(self, X, y):
	# 添加一列常数项1
	X = np.insert(X, 0, 1, axis=1)
	
	# 计算最小二乘解
	self.theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)

3.3.2 模型预测

训练完成的模型就像是一位精通魔法的大师,它已经掌握了数据的精髓,可以帮我们预测新的数据样本的目标值!🔮

所以,当你有了新的数据样本想要预测时,只需要把它的特征放入这个公式,交给训练好的模型,它会魔法般地给你一个准确的预测结果!🌟

记得要保护好这个神奇的模型哦,让它继续发挥它的魔力,为你带来更多精准的预测!💫🔮

y = θ x y=\theta x y=θx

这里其实应该是 y = θ x + b = w 1 x 1 + w 2 x 2 + . . . w n x n + b y=\theta x + b=w_1x_1+w_2x_2+...w_nx_n + b y=θx+b=w1x1+w2x2+...wnxn+b,上述公式只不过是将参数 b 放入到了 θ \theta θ 中,即 θ = ( b , w 1 , w 2 , . . . , w n ) , x = ( 1 , x 1 , x 2 , . . . , x n ) \theta=(b,w_1,w_2,...,w_n),x=(1,x_1,x_2,...,x_n) θ=(b,w1,w2,...,wn)x=(1,x1,x2,...,xn)

使用如下代码实现预测过程:

# 计算精度
def predict(self, X):
    # 添加一列常数项1
    X = np.insert(X, 0, 1, axis=1)
    
    # 计算预测值
    y_pred = X.dot(self.theta)
    
    return y_pred

3.3.3 模型分数

📈🔮嗯嗯,没错!多元线性回归可是回归类算法的一颗璀璨明珠,它能让预测值变得像真实值一样顺滑!🌟

这个模型的使命就是努力让预测值和真实值之间的距离越来越近,就像是把魔法棒挥舞得越来越准一样!🧙‍♀️✨

而为了评价这个魔法棒的准确度,我们有不少法宝可以施展:MSEMAER2,它们可都是算法的护身符!💪🔍

首先是MSE,这是均方误差,它衡量了预测值和真实值的平均距离,是一个常用的法术,用来检验模型是否能够在平坦的路径上飞行!🧹💨

然后是MAE,这是平均绝对误差,它更加看重预测值和真实值之间的绝对距离,是一个更加严谨的法术,用来检验模型是否能够直线直达真相!🏹🎯

最后是R2,这是决定系数,它是算法的魔镜,可以告诉我们模型预测了多少数据的变异性,是一个重要的法宝,用来评估模型的功力深浅!🔮💫

有了这些神奇的指标,我们就能够看清模型的魔法是否达到了满分,让我们坚持学习,掌握更多的魔法吧!📚🎉

# 计算指标
def score(self, y_pred, y):
    mse = (y - y_pred).sum() ** 2 / len(y)
    r2 =  1 - sum((y - y_pred)**2) / sum((y - y.mean())**2)
    return mse, r2

3.3.4 Multiple Linear Regression模型

📚🔬多元线性回归模型,让我们一起揭开它神秘的面纱吧!这个模型是回归类算法的一颗明星,它的预测值🔮🌟就像是一串灯光,在真实值的指引下闪烁着明亮的光芒!

这个魔法的秘密在于它的表达式,就像是一个神奇的方程式📝🔮,一串权重和特征值🌈🔢在里面跳跃舞动,最后凭借神奇的公式,预测出了属于它们的预测值!💃🕺

当然,这个魔法并非闲庭信步,它的目标是让预测值和真实值越来越近,就像是它们变成了亲密的伙伴!💑👭

为了检验这个魔法是否精准无误,我们还准备了一堆法宝:MSEMAER2,它们是我们的助手,帮助我们揭开预测的真相!🔍💪

所以,让我们在机器学习的魔法世界中大展拳脚,学习多元线性回归的奥秘,成为真正的算法魔法师吧!🧙‍♂️🎩🌟

# 定义多元线性回归算法
class LinearRegression:
    def __init__(self):
        self.theta = None
    
    def fit(self, X, y):
        # 添加一列常数项1
        X = np.insert(X, 0, 1, axis=1)
        
        # 计算最小二乘解
        self.theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
    
    # 计算精度
    def predict(self, X):
        # 添加一列常数项1
        X = np.insert(X, 0, 1, axis=1)
        
        # 计算预测值
        y_pred = X.dot(self.theta)
        
        return y_pred
    
    # 计算指标
    def score(self, y_pred, y):
        mse = (y - y_pred).sum() ** 2 / len(y)
        r2 =  1 - sum((y - y_pred)**2) / sum((y - y.mean())**2)
        return mse, r2

3.4 导入数据

🏠🏘️load_boston,这可是scikit-learn的明星数据集之一!🌟它是回归问题学习和实践的黄金选择!

让我来为你揭示它神秘的面纱:这个数据集里有506栋房子,它们隐藏在1978年的波士顿郊区,每栋房子都有13个特征在身!🏡🏙️

这些特征可真是多彩多姿:有房子的坐标位置📍🗺️,还有犹如玩偶般可爱的犯罪率🎭🚔,以及细心打磨的非零售业务🛒🏪等等!

但这才刚刚开始,你还能发现更多惊喜特征!🎁💫

最吸引人的部分是,每栋房子都标注了房价中位数,这可是我们的目标值,让我们用数据挖掘的魔法来预测它吧!💰💸

快来加入这场回归问题的冒险,与数据交织的世界中探索吧!🧭🔍🌐

  1. CRIM:城镇人均犯罪率。
  2. ZN:占地面积超过25,000平方英尺的住宅用地比例。
  3. INDUS:城镇中非零售业务占地面积的比例。
  4. CHAS:查尔斯河虚拟变量(如果河流通过则为1,否则为0)。
  5. NOX:一氧化氮浓度(以千万分之一为单位)。
  6. RM:住宅平均房间数。
  7. AGE:建于1940年之前的自住单位的比例。
  8. DIS:波士顿五个就业中心的加权距离。
  9. RAD:径向高速公路可达性指数。
  10. TAX:每10,000美元的全额财产税率。
  11. PTRATIO:城镇中学生与教师比例。
  12. B:城镇黑人比例。
  13. LSTAT:人口中地位较低者的比例。

没错!🎯load_boston数据集真是多才多艺,它不仅可以帮助我们学习回归算法,还可以实践这些算法的威力!📚🔬

多元线性回归、岭回归、Lasso回归等等,这些算法都能在这个数据集上施展自己的本领,像是一场回归算法的盛宴!🍽️💡

在这个神奇的数据集中,我们可以探索房价与各种因素之间的密切关系,发现隐藏在数据背后的秘密!🏡🔍

然后,我们可以用机器学习的魔法,预测新房屋的房价,为未来的房主带来准确而贴心的建议!🔮💰

是时候投身于这个充满机遇和挑战的学习和实践之旅了!💪🚀🔥

# 导入数据
X, y = load_boston(return_X_y=True)

3.5 划分训练集、测试集

在机器学习的舞台上,划分数据集就像是给模型准备搭档,让它练功的过程!🕺🤖

train_test_split就是我们的人气选手,一把梭哈,帮我们分出训练集和测试集!🎰🃏

训练集担任着培训导师的角色,通过不断的训练,让模型掌握技能,拥有优秀的表现力!🏋️‍♀️💪

而测试集则是严格的评委,用挑战赛的形式来考察模型的真正水平,不留情面地打分!👨‍⚖️🎤

这样,我们就能够高枕无忧,了解模型的实力,为它的未来出战做好充足准备!🛌🌟

所以,数据集划分是搭建机器学习成功舞台的重要一环,让我们为模型的表演加油助威吧!🎉🚀🎊

# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=seed_value)

3.6 模型训练

让我们开始为模型搭建豪华训练营吧!🏰🎓

首先,我们要找来一个有实力的模型对象,它将是我们训练的主角!🌟🤖

接着,我们把训练数据送进这个模型营地,让它们一起进行全方位的锻炼和训练!🏋️‍♂️🚴‍♀️

模型将亲自调用 fit 方法,绞尽脑汁地提升自己的能力,为未来的挑战做好充分准备!🏃‍♂️

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

3.7 打印结果

📊🔍训练完成啦!现在是时候拿出放大镜来查看我们训练集和测试集的表现啦!🔍🔍

我们要用锋利的 MSE 和华丽的 R2 指标来评估它们的表现!💯🌟

首先,我们将模型运用到训练集上,让它们进行一场完美的舞蹈,然后用 MSE 来测量它们的配合程度!🕺💃

接着,让模型在测试集上展现真正的实力,我们用 R2 来捕捉它们的魔法瞬间!🪄✨

通过这些神奇的指标,我们可以更好地了解模型的预测功力,看看它们是否能在现实世界中独当一面!🎯💼

让我们拿起指标的放大镜,一起来观察这场预测盛宴的精彩表演吧!🔬🎉

# 结果
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

mse_train, r2_train = model.score(y_train_pred, y_train)
mse_test, r2_test = model.score(y_test_pred, y_test)

print('【训练集】mse: ', mse_train, 'r2: ', r2_train)
print('【测试集】mse: ', mse_test, 'r2: ', r2_test)

>>>【训练集】mse:  1.812491629721879e-24 r2:  0.731280003501154
>>>【测试集】mse:  21.832544080808805 r2:  0.7841206218819801

完整源码

🚨🚨🚨 注意啦!这里有个特别声明 📢📢📢 :

我们的专栏可是为新手小白量身打造的,考虑到方便起见,我们采用了 Python 单文件实现的方式,让大家可以轻松一键复制、调试和运行,省去了复杂的项目构造步骤。😉🔧🐍

嗯,还有一点哦!我们的目标是帮助新人理解机器学习算法的基本训练预测过程,所以源码里只包含了算法的基本框架结构。虽然有些地方可能显得略显简陋,但也是为了让大家可以轻松理解。当然,有能力的小伙伴可以根据自己的能力在此基础上大展身手,尝试更多的参数和拓展功能,甚至可以进行分文件编写,搭建出完整的项目开发流程哦!🌟💪🔍

嗯嗯,我们始终坚信,学习是一步步积累的过程,我们陪你一起成长,助你成为机器学习的大神!🚀🌈💻

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

# 设置随机种子
seed_value = 2023
np.random.seed(seed_value)

class LinearRegression:
    def __init__(self):
        self.theta = None
    
    def fit(self, X, y):
        # 添加一列常数项1
        X = np.insert(X, 0, 1, axis=1)
        
        # 计算最小二乘解
        self.theta = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
    
    # 计算精度
    def predict(self, X):
        # 添加一列常数项1
        X = np.insert(X, 0, 1, axis=1)
        
        # 计算预测值
        y_pred = X.dot(self.theta)
        
        return y_pred
    
    # 计算指标
    def score(self, y_pred, y):
        mse = (y - y_pred).sum() ** 2 / len(y)
        r2 =  1 - sum((y - y_pred)**2) / sum((y - y.mean())**2)
        return mse, r2

# 导入数据
X, y = load_boston(return_X_y=True)

# 划分训练集、测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=seed_value)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 结果
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

mse_train, r2_train = model.score(y_train_pred, y_train)
mse_test, r2_test = model.score(y_test_pred, y_test)

print('【训练集】mse: ', mse_train, 'r2: ', r2_train)
print('【测试集】mse: ', mse_test, 'r2: ', r2_test)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Natasha❀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值