2.2 简单一元线性回归

2.2 .0 abstract

  • 声明:本文只为我闲暇时候学习所做笔记,仅供我无聊时复习所用,若文中有错,误导了读者,敬请谅解!!!

2.2.1 问题描述

简单线性回归问题.mp4 (35.27MB)

  • 在表格里我们给出了正常男生20岁时标准体重。第一列表示的是身高,第二列代表的是体重。我们希望通过这个数据来搭建回归模型(也就是要通过表格中已知的数据集,去构造(专业叫法:拟合)一个函数_f,_使得_f_能很好的把X【这里的X是特征,因为在该例中为单一特征,所以X代表的就是一个值;而在多数情况下都是多特征的所以用大X来表示是一个特征向量】映射到y【y为标签】上)使得之后给定一个身高即可以预测出标准体重。
  • 数据集:为整个表格
  • 样本:为每行数据
  • 样本特征:为每一行的身高值
  • 样本标签:为每一行的体重
  • 因为体重这个标签,对于所有的样本构成的体重的值的集合,可以是一个连续的实数的集合,所以这个问题是一个回归问题,而不是分类问题。
  • 根据机器学习核心的步骤。
    1. 数据集收集
    2. 数据清洗
    3. 特征工程
    4. 机器学习建模
    5. 模型验证
    6. 上线
  • 那对于这个问题,哪一个环节是没有必要的?
    • 这里肯定不需要的环节是数据清洗,数据已经很规范,没有必要做额外的清洗工作。 这里需要注意的一点是,看似不需要做特征工程,但实际上也可以做一些特征方面的处理的,比如连续性变量转换成离散型变量等。当然,这里唯一的连续性变量是身高。

2.2.2 简单线性回归预测身高与体重关系模型构建

模型训练.mp4 (39.11MB)

2.2.2.1 概述

  • 建模的第一步,一般是对数据本身的理解。切忌不要急于直接套模型,因为不理解数据的情况下做出来的模型是有着很大的不确定性。比如出现了异常情况,可能都不知道问题的根源是什么。
  • 对于数据理解来说,最重要的一项技术叫做数据的可视化(data visualization)。千万不要小看这部分的工作。不理解数据的前提下做模型是很不明智的事情。
  • 首先,我们对上述数据做个可视化。由于数据特征只有一个,我们完全可以在二维空间里展示特征与预测值之间的关系。
  • 当我们遇到很多特征的时候,最容易想到的方法就是特征的降维,比如把原先10维的特征降维到2维,3维空间里,然后再做可视化。机器学习里有很多可以用来降维的方法比如PCA, 我们先不用关心它的细节。

2.2.2.2 身高和体重数据的可视化

# 这里我们导入了两个库,numpy是一个科学计算库,matplotlib是用来做可视化的库

# 这里我们通过numpy库创建了一个二维的数组,其中第一列是特征(身高),第二列是(体重) 
# 我们可以看出这是(10,2)的大小,其中10代表的是数组的行数,也就是样本的个数, 2代表的是列数。

# 这里我们分别读出x和y,其中x里存储的是特征,y中存储的是标签。
# 需要注意的一点是data[:,0]中添加了一个reshape的函数
# 主要的原因是在之后调用fit函数的时候对特征矩阵x是要求是矩阵的形式。

# 把生成的数据在二位空间里面做了可视化,这里调用的是matplotlib的库 
# 从图里可以看出这些点具有一定的线性的关系


image.png

image.png
图2.2-1 身高-体重数据可视化结果
从图2.2-1中可以看出体重随着身高的变大而变大,体现出来一中比较明显的线性关系,这就意味着可以使用简单的线性模型即可以很好的拟合这批数据。

2.2.2.3 身高和体重数据拟合过程,也就是模型训练的过程

  • 我们接着来解决刚才的问题,接下来的步骤就是根据给到的数据来拟合线性模型,这个过程也叫做训练。然后通过拟合后的模型去预测身高。
  • 建模的时候,我们都会把给定的数据分成训练数据和测试数据, 主要是为了验证模型的好坏。因为只有通过测试数据才能看到模型训练得到底行不行。

2.2.2.3.1 手写线性回归模型实现

后面补充

2.2.2.3.2 通过sklearn的线性回归模型实现

  • 任务描述:

在这里我们使用一个线性回归模型来拟合身高-体重的数据,也就是希望通过身高来预测标准体重。在已创建的数据集里已经给出了部分样本,所以一旦我们训练出一个模型,则可以对任意的身高数据都可以给出一个体重的预测值。这里需要分成3个部分。

  • 第一部分是数据的创建;
  • 第二部分是利用线性回归来拟合数据;
  • 第三部分是利用已经训练好的模型去预测任意的体重并画出对任意体重的预测值,这里需要使用plot, 并且指定颜色为蓝色(color=“blue”)

  • 提示信息:

image.png 提示一
1.实例化的过程跟创建object的过程是类似的,这里需要调用sklearn的线性模型模块即可,暂时不需要指定任何的输入参数。并把实例化后的线性回归模型命名为regr
2.对于模型的训练,可以直接使用模型自带的fit函数
3.针对于所有给定的x,计算出在这个模型下的预测值,并把x和预测值通过matplotlib库来去可视化。
image.png 提示二
1.在sklearn里线性回归模型在linear_model模块里。可以参考https://scikit-learn.
org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
2.对于训练数据(x,y),通常通过sklearn中的fit(x,y)来实现模型的训练。这里x可以看做是特征部分,y可以看做是真实的值或者标签。
3.调用plt.plot()函数即可以画出一条线。

  • 我的代码:
from sklearn import datasets, linear_model # 引用 sklearn库,主要为了使用其中的线性回归模块

# 创建数据集,把数据写入到numpy数组
import numpy as np  # 引用numpy库,主要用来做科学计算
import matplotlib.pyplot as plt   # 引用matplotlib库,主要用来画图
data = np.array([[152,51],[156,53],[160,54],[164,55],
                 [168,57],[172,60],[176,62],[180,65],
                 [184,69],[188,72]])

# 打印出数组的大小
# print(data.shape)

x,y = data[:,0].reshape(-1,1), data[:,1]

# TODO 1. 实例化一个线性回归的模型
regr = linear_model.LinearRegression()

# TODO 2. 在x,y上训练一个线性回归模型。 如果训练顺利,则regr会存储训练完成之后的结果模型
regr.fit(x, y)

# TODO 3. 画出身高与体重之间的关系
plt.scatter(x, y, color='red')

# 画出已训练好的线条
plt.plot(x, regr.predict(x), color='blue')

# 画x,y轴的标题
plt.xlabel('height (cm)')
plt.ylabel('weight (kg)')
plt.show() # 展示

# 利用已经训练好的模型去预测身高为163的人的体重
print ("Standard weight for person with 163 is %.2f"% regr.predict([[163]]))
  • 参考代码:

image.png

  • 实验结果

image.png
图2.2-2 身高-体重线性回归结果

从图2.2-2中可以到通过线性回归拟合的曲线,以及该曲线所预测的163cm身高的体重为55.77kg。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值