机器学习一、单变量线性回归

目录

实验目的和要求

目的:

要求:

实验环境

实验内容与过程

1、实验内容

2、关键代码

3、流程图

实验结果与分析

结果分析

实验心得


实验目的和要求

目的:

1. 根据数据创建单变量线性回归模型

2. 使用线性回归模型进行预测

3. 对预测结果进行评价

要求:

1、提交代码

2、提交执行结果截图

3、提交电子版实验报告

实验环境

OS:Win11,

Python:3.10

Pycharm:2021

实验内容与过程

1、实验内容

调查分析结果表明:足长、步幅和身高之间存在一定的关系,身高预测数据.xlsx文件中保存了2700条样本数据,部分数据如下表所示:

足长(cm)步幅(cm)身高(cm)

21                 60               157.2662841

21                 61               157.8731029

21                 62               158.389684

21                 63               157.9809049

21                 64               159.7698927

根据上面的训练足长和身高、步幅和身高的线性回归模型,评价两个模型的预测结果,并对预测结果进行分析。

1.   自变量分别为足长和步幅,因变量身高,画出两组数据的散点图,并给出结论。

2. 根据身高预测数据.xlsx文件中的数据,求足长和身高的线性回归模型,画出拟合直线,并输出拟合直线方程。

3. 根据身高预测数据.xlsx文件中的数据,求步幅和身高的线性回归模型,画出拟合直线,并输出拟合直线方程。

步骤:准备模型训练数据

创建模型对象

训练模型

求线性方程的截距和斜率

画拟合直线

输出拟合直线方程

提示:可以使用sklearn库中的sklearn.linear_model.LinearRegression对象求线性回归模型

4. 计算两个线性回归模型的准确率

5. 比较两个模型的效果,对两个模型的准确率进行分析

模型评价方法

A.  手动计算

  假设hpyTrain代表训练数据的预测值,yTrain代表训练数据的真实值

ü 残差平方和:ssResTrain = sum((hpyTrain -yTrain) ** 2)

ü 偏差平方和:ssTotTrain = sum((yTrain - np.mean(yTrain))** 2)

ü R方:Rsquare = 1 -ssResTrain / ssTotTrain

B.  Python的LinearRegression对象提供的方法

ü 残差平方和:model._residues

ü R方:model.score(xTrain,yTrain)

2、关键代码

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from pylab import mpl
from sklearn.metrics import mean_squared_error
import numpy as np

# 消除中文乱码现象
plt.rcParams['font.sans-serif']=['SimHei']    # 用来正常显示中文
plt.rcParams['axes.unicode_minus']=False   # 用来正常显示负号

# 题目1
# 读取数据
data = pd.read_excel('第1次课试验数据.xlsx')
foot_length = data['足长']
height = data['身高']
stride = data['步幅']

# 绘制散点图
# 绘制足长与身高的散点图
plt.scatter(foot_length, height, label='Foot Length')
plt.xlabel('Foot Length')
plt.ylabel('Height')
plt.legend()
plt.title('足长与身高关系散点图')
plt.show()

# 绘制步幅与身高的散点图
plt.scatter(stride, height, label='Stride')
plt.xlabel('Stride')
plt.ylabel('Height')
plt.legend()
plt.title('步幅与身高关系散点图')
plt.show()

# 题目2
''' 足长与身高 '''
# 读取数据
data = pd.read_excel('第1次课试验数据.xlsx')

# 提取足长和身高数据
foot_length = data['足长']
height = data['身高']

# 创建线性回归模型对象
fool_model = LinearRegression()

# 训练模型
fool_model.fit(foot_length.values.reshape(-1, 1), height)

# 提取模型参数
fool_slope = fool_model.coef_[0]
fool_intercept = fool_model.intercept_

# 生成拟合直线的x和y值
x_values = foot_length
y_values = fool_model.predict(foot_length.values.reshape(-1, 1))

# 绘制散点图和拟合直线
plt.scatter(foot_length, height, label='Data Points')
plt.plot(x_values, y_values, color='red', label='Linear Regression')
plt.xlabel('Foot Length')
plt.ylabel('Height')
plt.legend()
plt.title('足长与身高线性回归')
plt.show()

# 输出拟合直线方程
print('拟合直线方程:Height = {:.4f} * Foot Length + {:.4f}'.format(fool_slope, fool_intercept))

''' 步幅与身高 '''
stride = data['步幅']
height = data['身高']

# 创建线性回归模型对象
stride_model = LinearRegression()
# 训练模型
stride_model.fit(stride.values.reshape(-1, 1), height)

# 提取模型参数
stride_slope = stride_model.coef_[0]
stride_intercept = stride_model.intercept_

# 生成拟合直线的x和y值
x_values = stride
y_values = stride_model.predict(stride.values.reshape(-1, 1))

# 绘制散点图和拟合直线
plt.scatter(stride, height, label='Data Points')
plt.plot(x_values, y_values, color='red', label='Linear Regression')
plt.xlabel('Stride')
plt.ylabel('Height')
plt.legend()
plt.title('步幅与身高线性回归')
plt.show()

# 输出拟合直线方程
print('拟合直线方程:Height = {:.4f} * Stride + {:.4f}'.format(stride_slope, stride_intercept))

# 题目4
''' R² '''
print('现在以R²为准确率计算')
# 计算足长与身高的模型的 R² 值
fool_r2 = fool_model.score(foot_length.values.reshape(-1, 1), height)
print('足长与身高模型的 R² 值:{:.4f}'.format(fool_r2))

# 计算步幅与身高的模型的 R² 值
stride_r2 = stride_model.score(stride.values.reshape(-1, 1), height)
print('步幅与身高模型的 R² 值:{:.4f}'.format(stride_r2))

''' 残差平方和 '''
print('现在以残差平方和为准确率计算')
# 计算足长与身高模型的残差平方和
fool_predictions = fool_model.predict(foot_length.values.reshape(-1, 1))
fool_residuals = height - fool_predictions
fool_rss = np.sum(fool_residuals**2)
print('足长与身高模型的残差平方和:{:.4f}'.format(fool_rss))

# 计算步幅与身高模型的残差平方和
stride_predictions = stride_model.predict(stride.values.reshape(-1, 1))
stride_residuals = height - stride_predictions
stride_rss = np.sum(stride_residuals**2)
print('步幅与身高模型的残差平方和:{:.4f}'.format(stride_rss))

# 题目5
if fool_r2 > stride_r2:
    print("足长与身高模型的准确率较高")
elif stride_r2 > fool_r2:
    print("步幅与身高模型的准确率较高")
else:
    print("足长与身高模型和步幅与身高模型的准确率相同")

if fool_rss > stride_rss:
    print("足长与身高模型的准确率较高")
elif stride_rss > fool_rss:
    print("步幅与身高模型的准确率较高")
else:
    print("足长与身高模型和步幅与身高模型的准确率相同")

3、流程图

 

实验结果与分析

结果分析

足长与身高模型的 R² 值为0.7638,步幅与身高模型的 R² 值为0.5711。因此,足长与身高模型的拟合效果更好。足长与身高模型的残差平方和为182.5482,步幅与身高模型的残差平方和为335.0171。所以,足长与身高模型的预测误差更小。综合考虑 R² 值和残差平方和,足长与身高模型的准确率较高。基于给定数据,足长与身高之间的线性关系比步幅与身高之间的线性关系更可靠,足长与身高模型的预测效果更好。

实验心得

完成单变量线性回归实验后, 我深刻体会到了数据分析在解决实际问题中的重要作用。通过收集和处理大量的样本数据,能够发现变量之间的潜在关系,进而构建出能够预测或解释这些关系的模型。在这个过程中,我学习到了如何使用散点图来直观地展现数据分布,以及如何利用线性回归模型来量化变量之间的关系。我感受到了科学方法的严谨性和重要性。在进行实验时,需要确保数据的准确性和可靠性,避免因为数据质量问题导致模型出现偏差。同时,还需要运用统计方法来评估模型的拟合效果和预测能力,确保模型的可靠性和有效性。我也意识到了在数据分析和建模过程中需要注意的一些细节。例如,在构建线性回归模型时,需要确保自变量和因变量之间存在线性关系;在绘制散点图和拟合直线时,需要选择合适的坐标轴范围和刻度,以便更好地展示数据分布和模型拟合效果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值