代数与逻辑:作业一 线性模型

文章目录

  • 代数与逻辑:作业一 线性模型
    • 一、作业要求
    • 二、回归模型的数学表达式与物理意义
      • 1、什么是线性回归?
      • 2、线性回归方程
    • 三、线性回归模型的求解
      • 1、最小二乘法
      • 2、梯度下降法
    • 四、利用线性回归模型进行预测建模
      • 1、导入依赖项
      • 2、加载数据集,将其转换为数据框并定义列名
      • 3、定义训练集和测试集
      • 4、拟合模型
      • 5、预测
      • 6、绘制模型
      • 7、打印准确度
      • 8、计算平均预测精度

一、作业要求

  1. 简述线性回归模型的数学表达与物理意义,举例说明。
  2. 编程实现线性回归模型的求解(最小二乘法与梯度下降法)。
  3. 选择公开数据集,编程实现利用线性回归模型进行预测建模。注:数据集选择回归问题数据集,先对数据进行规范化处理,然后选择部分数据训练模型,剩余数据对模型进行测试,重复20次数据集划分,输出平均预测精度。

二、回归模型的数学表达式与物理意义

1、什么是线性回归?

线性回归是一种算法,它提供自变量和因变量之间的线性关系来预测未来事件的结果。它是一种在数据科学和机器学习中用于预测分析的统计方法。

自变量也是由于其他变量的变化而保持不变的预测变量或解释变量。但是,因变量会随着自变量的波动而变化。回归模型预测因变量的值,即被分析或研究的响应或结果变量。

因此,线性回归是一种监督学习算法,它模拟变量之间的数学关系,并对销售、工资、年龄、产品价格等连续或数值变量进行预测。

当数据中至少有两个变量可用时,这种分析方法是有利的,如在股票市场预测、投资组合管理、科学分析等中所观察到的。

倾斜的直线代表线性回归模型。

在上图中,x轴是自变量,y轴是输出/因变量,回归线是模型的最佳拟合线,在这里,为适合所有问题的给定数据点绘制了一条线。因此,它被称为“最佳拟合线”。线性回归算法的目标是找到上图中看到的最佳拟合线。

2、线性回归方程

线性回归线具有Y = a + bX形式的方程,其中X是解释变量,Y是因变量。直线的斜率为ba是截距( x = 0 时y的值)。

举个例子,我们考虑一个涵盖RAM 大小及其相应成本的数据集。

在这种情况下,数据集包含两个不同的特征:内存(容量)和成本。RAM 越多,RAM 的购买成本就越高。

Ram Capacity Cost
2 GB $12
4 GB $16
8 GB $28
16 GB $62

如果我们在 X 轴上绘制 RAM,在 Y 轴上绘制其成本,则从图表的左下角到右上角的线表示 X 和 Y 之间的关系。在散点图上绘制这些数据点,我们得到下图:

内存成本比可能会根据不同的制造商和RAM版本而有所不同,但数据趋势显示出规律。左下角的数据显示内存更小且价格更低的 RAM,这条线一直延伸到图表的右上角,其中 RAM 容量更大且成本更高)。

回归模型定义了 X 和 Y 变量之间的线性函数,可以最好地展示两者之间的关系。它由上图中的斜线表示,其目标是确定最适合所有单个数据点的最佳“回归线”。

三、线性回归模型的求解

1、最小二乘法

我们定义一个数据集,其中每个特征x都有一个响应值y。

回归方程表示:

h(xi)=β01xi

其中h(x_i)表示第i个观察的预测响应值,b_0和b_1是回归系数,分别代表回归线的y截距和斜率。

使用最小二乘法原理我们需要考虑

这里,e_i 是第 i 个观察中的残差。 因此,我们的目标是最小化总残差。我们将平方误差或成本函数 J 定义为:

我们的任务是找到 b_0 和 b_1 的值,其中 J(b_0,b_1) 最小。

其中 SS_xy 是 y 和 x 的交叉偏差之和:

SS_xx 是 x 的平方偏差之和:

上述问题用python实现:

import numpy as np
import matplotlib.pyplot as pltdef estimate_coef(x, y):# 观察次数/点数n = np.size(x)# x 和 y 向量的平均值m_x = np.mean(x)m_y = np.mean(y)# 计算关于 x 的交叉偏差和偏差SS_xy = np.sum(y*x) - n*m_y*m_xSS_xx = np.sum(x*x) - n*m_x*m_x# 计算回归系数b_1 = SS_xy / SS_xxb_0 = m_y - b_1*m_xreturn (b_0, b_1)def plot_regression_line(x, y, b):# 将实际点绘制为散点图plt.scatter(x, y, color = "m",marker = "o", s = 30)# 预测响应向量y_pred = b[0] + b[1]*xplt.plot(x, y_pred, color = "g")plt.xlabel('x')plt.ylabel('y')plt.show()def main():# 观察/数据x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12])# 估计系数b = estimate_coef(x, y)print("估计系数:\nb_0 = {} \\nb_1 = {}".format(b[0], b[1]))# 绘制回归线plot_regression_line(x, y, b)if __name__ == "__main__":main()

运行的结果是:

估计系数:
b_0 = 1.2363636363636363
b_1 = 1.1696969696969697

2、梯度下降法

我们将逐步迭代以达到最佳点。W 从任意的权重值开始,并检查该点的梯度。我们的目标是达到谷底的最小值。所以我们的梯度应该总是负的。

接下来,我们需要更新权重以使它们更接近最小值。我们有以下等式:

这意味着下一次迭代中的权重将是上一次迭代中的权重减去更新。现在这个更新有两个组成部分:方向——斜率或梯度,以及——步长。渐变将是:

我们需要考虑的第二个组成部分是步长——α。这是一个超参数,我们需要在算法开始之前决定它。如果 α 太大,那么我们的优化器将大跃进,永远找不到最小值。相反,如果将它设置得太小,优化器将永远达到最小值。因此,我们需要事先为 α 设置一个最佳值。

因此,我们的权重更新方程变为:

总的步骤就是:

  1. 初始化权重 W0、W1 的值——可以是任意值,步长 α——需要一个好的值。
  2. 找到所有 X 的目标 Ŷ = W0 + W1.X 的预测。
  3. 计算误差值 (Ŷ-Y) 和 MSE。
  4. 根据梯度下降更新规则更新权重。
  5. 重复 2-4。

上述工作我们用Python来实现一下:

import numpy as np
import matplotlib.pyplot as plt# 定义数据集
x = np.array([1, 3, 5])
y = np.array([5, 12, 18])# 初始化权重和选择步长
W0_new = 0
W1_new = 0
a = 0.04
MSE = np.array([])# 对数据集进行多次迭代,计算每次迭代的均方误差并更新权重
for iteration in range(1, 11):y_pred = np.array([])   # 预测目标error = np.array([])    # 每次迭代的误差值:(Ŷ-Y)error_x = np.array([])# 分配更新的权重W0 = W0_newW1 = W1_new# 逐行迭代x,以计算Ŷ和错误for i in x:# Ŷ = W0 + W*Xy_pred = np.append(y_pred, (W0 + W1*i))error = np.append(error, y_pred-y)      # 计算每个样本的误差error_x = np.append(error_x, error*x)MSE_val = (error**2).mean()     # 计算MSE值MSE = np.append(MSE, MSE_val)W0_new = W0 - a*np.sum(error)       # 计算更新W0W1_new = W1 - a*np.sum(error_x)     # 计算更新W1# 查看最终权重
print("W0=", W0_new)
print("W1=", W1_new)# 检查预测的目标变量Ŷ和误差
print("y_pred:", y_pred)
print("error:", error)# 绘制每次迭代的均方误差值
print("MSE:", MSE)plt.plot(MSE, "b-o")
plt.title("每次迭代的均方误差")
plt.xlabel("迭代")
plt.ylabel("MSE 值")
plt.show()

运行的结果是:

W0= 1.1474479185822484
W1= 3.448230314024035
y_pred: [ 4.5923844  11.51794949 18.44351457]
error: [-0.4076156  -0.48205051  0.44351457]
MSE: [164.33333333  40.35466667  10.05422336   2.64304765   0.82490950.37371724   0.25687049   0.2220511    0.20759194   0.19840945]

四、利用线性回归模型进行预测建模

我们将使用 scikit-learn 中提供的加利福尼亚房价集。这记录了加州住房市场的 8 个属性以及中位价格的测量值。

1、导入依赖项

import pandas as pd
from sklearn import datasets, linear_model
from sklearn.model_selection import train_test_split
from matplotlib import pyplot as plt

2、加载数据集,将其转换为数据框并定义列名

# 加载糖尿病数据集
columns = "age sex bmi map tc ldl hdl tch ltg glu".split() # 声明列名
diabetes = datasets.load_diabetes() # 从 sklearn 调用糖尿病数据集
df = pd.DataFrame(diabetes.data, columns=columns) # 将数据集加载为 pandas 数据框
y = diabetes.target # 将目标变量(因变量)定义为 y

3、定义训练集和测试集

# 创建训练和测试变量
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2)
print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)
(353, 10) (353,)
(89, 10) (89,)

4、拟合模型

# 拟合模型
lm = linear_model.LinearRegression()
model = lm.fit(X_train, y_train)
predictions = lm.predict(X_test)

5、预测

print(predictions[0:5])
[181.69402001 151.31483349 159.42134908 188.13122001 168.83426575]

6、绘制模型

plt.scatter(y_test, predictions)
plt.xlabel("True Values")
plt.ylabel("Predictions")

7、打印准确度

print("Score:", model.score(X_test, y_test))

8、计算平均预测精度

我们运行20次然后记录每次的精度然后求平均值。

from numpy import *
score = [0.5435576684039353, 0.5278223090263431, 0.5428586295068993, 0.48953519457408035, 0.4249912062254072, 0.42650991893500434, 0.5787191615733711, 0.37981926356039364, 0.4170187886884227, 0.5082912328753193 /0.5202580979798506, 0.532535890174009, 0.3087861414400682, 0.4466007206335131, 0.460212035904611, 0.40788387790519776, 0.5631222570259837, 0.5183668561533962, 0.4256938089725384, 0.4183517892689459]
mean_score = mean(score)
print(mean_score)

平均值是:

0.49417809118980843

代数与逻辑:作业一 线性模型相关推荐

  1. 代数与逻辑:作业三 贝叶斯决策

    代数与逻辑:作业三 贝叶斯决策 文章目录 代数与逻辑:作业三 贝叶斯决策 一.作业要求 二.基于高斯分布的贝叶斯分类器与朴素贝叶斯分类器的原理介绍 1.贝叶斯定理 2.朴素贝叶斯分类 3.高斯朴素贝叶 ...

  2. 对数线性模型之一(逻辑回归), 广义线性模型学习总结

    经典线性模型自变量的线性预测就是因变量的估计值. 广义线性模型:自变量的线性预测的函数是因变量的估计值.常见的广义线性模型有:probit模型.poisson模型.对数线性模型等等.对数线性模型里有: ...

  3. 2022春 哈工大《近世代数》习题作业解答汇总

    (每年都是这些题,没有太大变化~) (附上课件(只需1积分):2022哈工大近世代数课件-其它文档类资源-CSDN下载) 习题作业1 习题作业2 习题作业3 习题作业4 习题作业5 习题作业6 习题作 ...

  4. 【渝粤题库】陕西师范大学200401 初等代数研究 作业(专升本)

    <初等代数研究>作业 一.填空题 1.第一数学归纳法的内容是____________. 2.函数的值域是_________. 3.函数的定义域是__________. 4.函数在内的反函数 ...

  5. 《PyTorch深度学习实践》刘二大人 第2讲 线性模型——使用双层for循环完成课后作业

    一.课堂代码 import numpy as np import matplotlib.pyplot as pltx_data = [1.0,2.0,3.0] y_data = [2.0,4.0,6. ...

  6. 机器学习基础专题:逻辑回归

    逻辑回归 广义线性模型. 原理 输入 训练集数据T=(x1,y1)...(xM,yM)T = {(x_1,y_1) ... (x_M,y_M)}T=(x1​,y1​)...(xM​,yM​),xi∈X ...

  7. r语言 C4.5 剪枝是用什么算法_决策树,逻辑回归,PCA算法面经

    目录 决策树 简述决策树原理? 为什么要对决策树进行减枝?如何进行减枝? 简述决策树的生成策略 PCA 简述主成分分析PCA工作原理,以及PCA的优缺点? PCA中有第一主成分.第二主成分,它们分别是 ...

  8. 风控模型师面试准备--技术篇(逻辑回归、决策树、集成学习)

    原文地址:https://zhuanlan.zhihu.com/p/56175215 编辑于2019-02-12,持续更新中,有风控建模工作经验的,或者想转行风控建模的小伙伴可以互相交流下... 一. ...

  9. 《Pytorch - 逻辑回归模型》

    2020年10月4号,依然在家学习. 今天是我写的第二个 Pytorch程序,从今天起也算是入门了. 这里是简单的实现了逻辑回归开始. 回顾线性回归,线性模型如下 y = wx + b,图画的丑了,意 ...

最新文章

  1. tiny4412学习之u-boot启动过程
  2. matlab 卷积conv2用法
  3. int的长度_Java中String长度有限制吗?身边的同事每一个人知道!
  4. keynotes egestas,PPT 渐变背景下载-imsoft.cnblogs
  5. Difference Between InnoDb and MyISAM(个人觉着是好文章,简单易懂,推荐看)
  6. [云炬学英语]每日一句2020.9.5
  7. Java中xmp标签的作用_如何在Java中从JPEG读取XMP面部数据
  8. Linux操作Oracle(10)——plsql配置Oracle客户端方法【Oracle客户端安装、资源下载】详细教程
  9. EF的表连接方法Include() - nlh774
  10. 了解计算机技术的课件,了解计算机课件.ppt
  11. Windows7硬盘安装Linux
  12. Python 爬取多玩图库
  13. 11-新闻发布系统数据库-新闻数据操作
  14. 二叉查找树与平衡二叉树
  15. SD卡驱动(详细介绍,不明白的人可以仔细看看了.有流程图)
  16. 计算机二级 MSOffice 考试历年真题精选
  17. Lua调试:getinfo详解
  18. php英语大全,学习php编程语言 php常用英语单词
  19. Solidity----状态修饰符view、pure
  20. 360 se html document 广告,广告拦截 - 360极速浏览器

热门文章

  1. 为什么学不好编程?——好文章一网打尽
  2. 机器学习 数据挖掘知识点总结大纲
  3. 计算机风景画作品,电脑风景画图片大全
  4. 案例 | 看某国有大行如何构建内部数据安全风险管控核心能力
  5. 多维度积分管理系统java_某店POS积分管理系统JAVA088
  6. Flickr8k和Flickr8kCN 数据下载
  7. 意云丰到底是一个怎么样的赚钱软件?今天就带大家来解读一下
  8. 二段式FPGA的状态机
  9. go postgresql 增删改查
  10. html中什么是功能链接,链接是什么?(链接的意思与功能)