【机器学习(三)】基于线性回归对波士顿房价预测

news/2024/7/23 11:20:29 标签: 机器学习, 线性回归, python, 开发语言

在这里插入图片描述

文章目录

  • 专栏导读
  • 1、线性回归原理
  • 2、实战案例
    • 2.1数据说明
    • 2.2导入必要的库并加载数据集
    • 2.3划分训练集和测试集
    • 2.4创建线性回归模型
    • 2.5模型预测评价

专栏导读

✍ 作者简介:i阿极,CSDN Python领域新星创作者,专注于分享python领域知识。

本文录入于《数据分析之术》,本专栏精选了经典的机器学习算法进行讲解,针对大学生、初级数据分析工程师精心打造,对机器学习算法知识点逐一击破,不断学习,提升自我。
订阅后,可以阅读《数据分析之术》中全部文章内容,详细介绍数学模型及原理,带领读者通过模型与算法描述实现一个个案例。
还可以订阅基础篇《数据分析之道》,其包含python基础语法、数据结构和文件操作,科学计算,实现文件内容操作,实现数据可视化等等。
✍ 其他专栏:《数据分析案例》 ,《机器学习案例》

1、线性回归原理

线性回归是一种经典的机器学习算法,用于建立一个线性关系模型,以预测一个连续型变量的值。它的基本假设是,目标变量和特征变量之间存在线性关系,即目标变量可以通过特征变量的线性组合来进行预测。

线性回归模型的一般形式可以表示为:

y y y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β p x p + ϵ \beta_0+ \beta_1x_1+\beta_2x_2+ ...+ \beta_px_p +\epsilon β0+β1x1+β2x2+...+βpxp+ϵ

y y y 是目标变量, x 1 , x 2 , . . . , x p x_1, x_2, ..., x_p x1,x2,...,xp 是特征变量, β 0 , β 1 , β 2 , . . . , β p \beta_0, \beta_1, \beta_2, ..., \beta_p β0,β1,β2,...,βp 是模型的系数, ϵ \epsilon ϵ 是误差项。模型的目标就是找到最优的系数 β 0 , β 1 , β 2 , . . . , β p \beta_0, \beta_1, \beta_2, ..., \beta_p β0,β1,β2,...,βp 来最小化误差项。

线性回归模型的训练过程就是根据已有的数据集,求解出最优的模型系数。常用的方法有最小二乘法和梯度下降法

  • 最小二乘法是一种直接求解解析解的方法,即通过对误差的平方和进行求导,得到系数的解析解。

  • 梯度下降法则是一种迭代优化的方法,通过不断地沿着误差梯度的反方向更新系数,逐步优化模型。

线性回归模型的预测过程就是根据已有的模型系数,对新的特征数据进行预测。具体而言,将新的特征数据代入模型,计算出目标变量的预测值。

线性回归模型的优点是:

  • 简单
  • 易于解释
  • 计算快速

它的缺点也很明显:

  • 就是只能处理线性关系,对于非线性数据的拟合效果较差
  • 它也很容易受到异常值的影响,需要进行特殊的处理。

2、实战案例

2.1数据说明

波士顿房价数据集的13个特征如下:

标签说明
CRIM城镇人均犯罪率
ZN住宅用地占地面积的比例
INDUS城镇中非住宅用地的比例
CHAS是否靠近河边(如果是则为1,否则为0)
NOX一氧化氮浓度
RM每栋住宅的平均房间数
AGE1940年以前建成的自住单位比例
DIS到五个波士顿就业中心的加权距离
RAD到辐射道路的可达性指数
TAX每一万美元的不动产税率
PTRATIO城镇中的学生与教师比例
B黑人比例
LSTAT地区中有多少百分比的人属于低收入阶层

2.2导入必要的库并加载数据集

我们需要导入必要的库并加载数据集。代码如下:

python">import numpy as np
import pandas as pd
from sklearn.datasets import load_boston

# 加载数据集
boston = load_boston()

load_boston函数会返回一个Bunch对象,其中包含了波士顿房价数据集的特征数据和标签数据。

将数据集中的特征存储在X中:

python">X = pd.DataFrame(boston.data, columns=boston.feature_names)
print(X)

在这里插入图片描述

X通过Bunch对象的data属性获取特征数据,其中data是一个二维数组,每一行代表一组数据,每一列代表一个特征。使用pandas中的DataFrame将data转换为带有列名的数据表,列名即为数据集中的特征名,存储在boston.feature_names中。

将数据集中的标签分别存储在y中:

python">y = pd.DataFrame(boston.target, columns=['MEDV'])
print(y)

在这里插入图片描述

y通过Bunch对象的target属性获取标签数据,其中target是一个一维数组,每个元素代表一组数据的标签值。使用pandas中的DataFrame将target转换为带有列名的数据表,列名为’MEDV’,即为数据集中的房屋中位数价值。

2.3划分训练集和测试集

我们将使用train_test_split函数将数据集拆分为训练集和测试集。

代码如下:

python">from sklearn.model_selection import train_test_split

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

train_test_split 是 scikit-learn 中一个用于划分数据集的函数,它可以将数据集划分成训练集和测试集,通常用于模型的训练和评估。

其中,参数 X 是特征数据,y 是目标变量(或标签),test_size 是测试集所占的比例,一般取 0.2 或 0.3,random_state 是随机数种子,用于保证每次划分的结果一致。

在这个例子中,train_test_split(X, y, test_size=0.2, random_state=42) 将 boston 数据集中的特征数据 X 和目标变量 y 划分为训练集和测试集,其中测试集占总数据集的 20%,随机数种子为 42。

2.4创建线性回归模型

我们将使用线性回归模型来拟合训练集。

代码如下:

python">from sklearn.linear_model import LinearRegression

# 创建线性回归模型
lr = LinearRegression()

# 拟合训练集
lr.fit(X_train, y_train)

2.5模型预测评价

我们已经使用线性回归模型拟合了训练集。接下来,我们可以使用predict函数来进行预测。

代码如下:

python"># 预测测试集
y_pred = lr.predict(X_test)

我们可以使用Scikit-learn提供的mean_squared_error函数计算预测结果的均方误差(MSE)和决定系数(R2)。
代码如下:

python">from sklearn.metrics import mean_squared_error, r2_score

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print('MSE:', mse)

# 计算决定系数
r2 = r2_score(y_test, y_pred)
print('R2 score:', r2)

在这里插入图片描述

MSE是真实值与预测值之间差值的平方的平均值。它是衡量预测值与真实值之间的误差的一种方法。MSE的值越小,表示模型的预测效果越好。
R2是确定系数,用于评估模型的拟合程度。R2的值在0到1之间,越接近1表示模型的拟合程度越好。R2的值越小,表示模型对数据的解释能力越差。

在此结果中,MSE为24.2911,这意味着预测值与真实值之间的平均差值为24.2911。而R2得分为0.6688,表示模型可以解释数据的约67%的变异性,这说明模型的拟合程度还有提升的空间。

📢文章下方有交流学习区!一起学习进步!💪💪💪
📢首发CSDN博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗


http://www.niftyadmin.cn/n/225011.html

相关文章

npm、pnpm、yarn的常用命令

npm、pnpm、yarn的常用命令 文章目录npm、pnpm、yarn的常用命令一、常用命令1、npm命令2、pnpm命令:3、yarn命令二、对比一、常用命令 1、npm命令 npm init: 初始化一个新的npm包。 npm install: 安装项目依赖项。 npm install : 安装指定的包。 npm install --sa…

leetcode482. 密钥格式化

题目描述解题思路执行结果leetcode 题目描述 给定一个许可密钥字符串 s,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n 1 组。你也会得到一个整数 k 。 我们想要重新格式化字符串 s,使每一组包含 k 个字符,除了第一组&#xf…

Python-DQN代码阅读(10)

目录 1.代码 1.1 代码阅读 1.2 代码分解 1.2.1 f open("experiments/" str(env.spec.id) "/performance.txt", "a") 1.2.2 f.write(str(ep) " " str(time_steps) " " str(episode_rewards) " " str(…

Html5钢琴块游戏制作与分享(音游可玩)

当年一款手机节奏音游,相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法:点击下落的黑色方块,弹奏音乐。(下落的速度会越来越快) 可以进行试玩,手机玩起来效果会更好些。 点击…

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用,越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么,企业的数据中台到底指的是什么呢? 数据中台是一种以数据为核心的企业数字化转型架构,旨在通过数据的汇聚、整合…

【SQL 初阶教程】一文轻松玩转 SQL

目录 一、SQL 通用语法 二、SQL 语句的分类 三、DDL语句 DDL——数据库操作 查询所有数据库 语句: SHOW DATABASES;(大小写均可,建议大写) 创建数据库HSK 语句:CREATE DATABASE HSK; 删除数据库HSK 语句 &#…

【SpringSecurity】学习笔记(一)

学习笔记一、SpringSecurity 简介二、创建测试项目2.1、引入依赖2.2、测试三、SpringSecurity基本原理3.1、过滤器链3.1.1、FilterSecurityInterceptor3.1.2、ExceptionTranslationFilter3.1.3、UsernamePasswordAuthenticationFilter3.2、过滤器加载过程3.3、两个重要的接口3.…

$\Beta$分布推导与可视化

$\Gamma$函数 $\Gamma$函数(Gamma函数)是阶乘函数在实数和复数域的扩展。对于正整数$n$,阶乘函数表示为$n! 1 \times 2 \times ... \times n$。然而,这个定义仅适用于正整数。Gamma函数的目的是将阶乘扩展到实数和复数域,从而计算实数和复数…