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

时间: 2023-07-09 admin 互联网

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

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

文章目录

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

专栏导读

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

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

专栏案例:机器学习案例
机器学习(一):线性回归之最小二乘法
机器学习(二):线性回归之梯度下降法
机器学习(四):基于KNN算法对鸢尾花类别进行分类预测
机器学习(五):基于KNN模型对高炉发电量进行回归预测分析
机器学习(六):基于高斯贝叶斯对面部皮肤进行预测分析
机器学习(七):基于多项式贝叶斯对蘑菇毒性分类预测分析
机器学习(十四):基于逻辑回归对超市销售活动预测分析
机器学习(十五):基于神经网络对用户评论情感分析预测
机器学习(十六):线性回归分析女性身高与体重之间的关系
机器学习(十七):基于支持向量机(SVM)进行人脸识别预测
机器学习(十八):基于逻辑回归对优惠券使用情况预测分析
机器学习(十九):基于逻辑回归对某银行客户违约预测分析
机器学习(二十):基于朴素贝叶斯对花瓣花萼的宽度和长度分类预测
机器学习(二十一):LightGBM算法原理(附案例实战)
机器学习(二十二):基于PCA对人脸识别数据降维并建立KNN模型检验

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​+β1​x1​+β2​x2​+...+βp​xp​+ϵ

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导入必要的库并加载数据集

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

import numpy as np
import pandas as pd
from sklearn.datasets import load_boston# 加载数据集
boston = load_boston()

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

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

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

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

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

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

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

2.3划分训练集和测试集

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

代码如下:

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创建线性回归模型

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

代码如下:

from sklearn.linear_model import LinearRegression# 创建线性回归模型
lr = LinearRegression()# 拟合训练集
lr.fit(X_train, y_train)

2.5模型预测评价

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

代码如下:

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

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

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博客,创作不易,如果觉得文章不错,可以点赞👍收藏📁评论📒
📢你的支持和鼓励是我创作的动力❗❗❗