1、用线性回归找到最佳拟合直线

应该怎么从一大堆数据里求出回归方程呢?假定输入数据存放在矩阵X中,结果存放在向量y中:

而回归系数存放在向量w中:

那么对于给定的数据x1,即矩阵X的第一列数据,预测结果u1将会通过如下公式给出:

现在的问题是,手里有数据矩阵X和对应的标签向量y,怎么才能找到w呢?一个常用的方法就是找出使误差最小的w。这里的误差是指预测u值和真实y值之间的差值,使用该误差的简单累加将使得正差值和负差值相互抵消,所以我们采用平方误差。

平方误差和可以写做:

用矩阵表示还可以写做:

为啥能这么变化,记住一个前提:若x为向量,则默认x为列向量,x^T为行向量。将上述提到的数据矩阵X和标签向量y带进去,就知道为何这么变化了。

在继续推导之前,我们要先明确一个目的:找到w,使平方误差和最小。因为我们认为平方误差和越小,说明线性回归拟合效果越好。

现在,我们用矩阵表示的平方误差和对w进行求导:

如果对于矩阵求不熟悉的,可以移步这里:点击查看

令上述公式等于0,得到:

w上方的小标记表示,这是当前可以估计出的w的最优解。从现有数据上估计出的w可能并不是数据中的真实w值,所以这里使用了一个"帽"符号来表示它仅是w的一个最佳估计。

值得注意的是,上述公式中包含逆矩阵,也就是说,这个方程只在逆矩阵存在的时候使用,也即是这个矩阵是一个方阵,并且其行列式不为0。

述的最佳w求解是统计学中的常见问题,除了矩阵方法外还有很多其他方法可以解决。通过调用NumPy库里的矩阵方法,我们可以仅使用几行代码就完成所需功能。该方法也称作OLS, 意思是“普通小二乘法”(ordinary least squares)。

import matplotlib.pyplot as plt
import numpy as np"""
应该怎么从一大堆数据里求出回归方程呢?假定输入数据存放在矩阵X中,结果存放在向量y中:|x11 x12 x13|     |y1|                                        |w1|
X = |x21 x22 s23| Y = |y2|            而回归系数存放在向量w中: W = |w2||x31 x32 x33|     |y3|                                        |w3|
那么对于给定的数据x1,即矩阵X的第一列数据,预测结果u1:T|x11|     |w1|
u1 = |x21|  *  |w2||x31|     |w3|现在的问题是,手里有数据矩阵X和对应的标签向量y,怎么才能找到w呢?
一个常用的方法就是找出使误差最小的w。这里的误差是指预测u值和真实y值之间的差值,
使用该误差的简单累加将使得正差值和负差值相互抵消,所以我们采用平方误差。T
平方误差和: ( y - X*w )*( y - X*w )T
对上式进行求导: 2X ( y - X*w )T     -1  T
令上式等于0,解出: w = ( X * X )* X * y
""""""
函数说明:加载数据
Parameters:fileName - 文件名
Returns:xArray - x数据集yArray - y数据集
Author:ZhengYuXiao
Modify:2019-02-23
"""def loadDataSet(fileName):numFeat = len(open(fileName).readline().split('\t')) - 1  # 列数-1xArray = []yArray = []fr = open(fileName)print("numFeat=", numFeat)for line in fr.readlines():lineArr = []curLine = line.strip().split('\t')# strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列.# 该方法只能删除开头或是结尾的字符,不能删除中间部分的字符for i in range(numFeat):lineArr.append(float(curLine[i]))  # 前两列  字符转数值 保存xArray.append(lineArr)  # 前两列yArray.append(float(curLine[-1]))  # 最后一列print("xArray=\n", np.array(xArray))print("yArray=\n", np.array(yArray))return xArray, yArray"""
函数说明:绘制数据点
Parameters:xArray - x数据集yArray - y数据集
Returns:null
Author:ZhengYuXiao
Modify:2019-02-23
"""def plotDataSet(xArray, yArray):numberOfData = len(xArray)  # 数据条数/坐标点个数xcord = []  # x列表ycord = []  # y列表for i in range(numberOfData):xcord.append(xArray[i][1])ycord.append(yArray[i])fig = plt.figure()  # 画板ax = fig.add_subplot(111)  # 画纸ax.scatter(xcord, ycord, s=20, c='blue', alpha=.5)plt.title('DataSet')plt.xlabel('X')plt.ylabel('Y')plt.show()"""
函数说明:计算回归系数w
Parameters:xArray - x数据集yArray - y数据集
Returns:                 T      -1   Tw - 回归系数   w = ( X  *  X ) * X * Y
Author:ZhengYuXiao
Modify:2019-02-24
"""def standRegres(xArray, yArray):xMat = np.mat(xArray)  # 生成矩阵XyMat = np.mat(yArray).T  # 生成矩阵Y      TxTx = xMat.T * xMat  # 计算          ( X * X )# numpy.linalg模块包含线性代数的函数。# .det 计算矩阵的行列式# 矩阵A可逆的条件之一:行列式|A|≠0(也可表述为A不是奇异矩阵,即行列式为0的矩阵)if np.linalg.det(xTx) == 0.0:print("矩阵为奇异矩阵,不能求逆矩阵")returnw = xTx.I * (xMat.T * yMat)  # 根据公式求出回归系数return w"""
函数说明:数据点和回归曲线
Parameters:xArray - x数据集yArray - y数据集w - 回归系数
Returns:none
Author:ZhengYuXiao
Modify:2019-02-24
"""def plotRegression(xArray, yArray, w):xMat = np.mat(xArray)  # X矩阵yMat = np.mat(yArray)  # Y矩阵xCopy = xMat.copy()  # 深拷贝"""浅拷贝和深拷贝的区别是:浅拷贝只是将原对象在内存中引用地址拷贝过来了。让新的对象指向这个地址。而深拷贝是将这个对象的所有内容遍历拷贝过来了,相当于跟原来没关系了,所以如果你这时候修改原来对象的值跟他没关系了,不会随之更改。"""xCopy.sort(0)  # 排序yHat = xCopy * w  # 计算相应的y值fig = plt.figure()ax = fig.add_subplot(111)ax.plot(xCopy[:, 1], yHat, c='red')  # 绘制回归曲线ax.scatter(xMat[:, 1].flatten().A[0], yMat.flatten().A[0], s=20, c='blue', alpha=.5)plt.title('DataSet')plt.xlabel('X')plt.ylabel('Y')plt.show()"""
函数说明:判断拟合曲线的拟合效果
Parameters:xArray - x数据集yArray - y数据集w - 回归系数
Returns:correlation - 相关性
Author:zyx
Modify:2019-03-24
"""def Correlation(xArray, yArray, w):xMat = np.mat(xArray)yMat = np.mat(yArray)yHat = xMat * wcorrelation = np.corrcoef(yHat.T, yMat)print("拟合度:", correlation)return correlationif __name__ == '__main__':xArray, yArray = loadDataSet("ex0.txt")plotDataSet(xArray, yArray)w = standRegres(xArray, yArray)plotRegression(xArray, yArray, w)Correlation(xArray, yArray, w)

机器学习_线性回归_回归系数相关推荐

  1. 机器学习之线性回归_通过线性回归开始机器学习之旅

    机器学习之线性回归 线性回归 (Linear Regression) Linear regression is a part of Statistics that defines the relati ...

  2. 机器学习多元线性回归_过度简化的机器学习(1):多元回归

    机器学习多元线性回归 The term machine learning may sound provocative. Machines do not learn like humans do. Ho ...

  3. python机器学习:线性回归_房价和房屋尺寸关系的线性拟合

    # 线性回归(Linear Regression)是利用数理统计中回归分析, # 来确定两种或两种以上变量间相互依赖的定量关系的一种统计分 # 析方法 # 使用算法:线性回归 # 实现步骤: # 1. ...

  4. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)

    本文转自博客园,作者为hsm_computer 原文链接:https://www.cnblogs.com/JavaArchitect/p/11717998.html在笔者的新书里,将通过股票案例讲述P ...

  5. 使用机器学习预测天气_使用机器学习的二手车价格预测

    使用机器学习预测天气 You can reach all Python scripts relative to this on my GitHub page. If you are intereste ...

  6. 机器学习系列(1)_逻辑回归初步

    转载自: 机器学习系列(1)_逻辑回归初步 - 寒小阳 - 博客频道 - CSDN.NET http://blog.csdn.net/han_xiaoyang/article/details/4912 ...

  7. 机器学习算法 拟合曲线_制定学习曲线以检测机器学习算法中的错误

    机器学习算法 拟合曲线 机器学习 (Machine Learning) The learning curve is very useful to determine how to improve th ...

  8. 唐宇迪机器学习课程数据集_最受欢迎的数据科学和机器学习课程-2020年8月

    唐宇迪机器学习课程数据集 There are a lot of great online resources and websites on data science and machine lear ...

  9. 机器学习导论�_机器学习导论

    机器学习导论� Say you are practising basketball on your own and you are trying to shoot the ball into the ...

最新文章

  1. 如何快速搭建智能人脸识别系统
  2. 大数据分布式集群搭建(8)
  3. 不相交集ADT(联机算法 + 脱机算法)
  4. java线程池任务失败_ThreadPoolExecutor线程池任务执行失败的时候会怎样
  5. ffmpeg结构体SpecifierOpt说明文档
  6. 巨杉数据库入选Gartner数据库报告,中国首家入选厂商
  7. MySql-Mysql技术内幕~SQL编程学习笔记(N)
  8. Atitit 图像处理知识点  知识体系 知识图谱v2
  9. 文本文件与二进制的区别
  10. 【数据分析入门】R语言下载与R包新旧设备转移
  11. (2020)最新 java 多线程面试题(其一)
  12. 隐藏部分内容,点击按钮显示全部内容
  13. 恒生电子 java笔试_恒生电子笔试题
  14. 21-22(2)第2次线上赛
  15. 哈曼收购混合现实领域领先公司Apostera
  16. 设置 Linux 别名命令 alias 永久生效的方法
  17. 动态路由协议 之 RIP协议 实图解析
  18. 手机显示无法接通服务器是怎么回事,手机无法接通是什么原因及如何解决【图文】...
  19. 用Eclipse开发Jsp
  20. 7月30日—31日英特尔开源物联网大会直播,欢迎收看

热门文章

  1. OPPO解散芯片团队的真相,真的不缺钱?
  2. python 爬虫前奏六 ExpectedConditions用法大全
  3. 硬件创业的精益时代:从原型到生产都是泪
  4. 宋宝华: Linux实时补丁的原理和实践
  5. 多请求多数据量综合页面优化方案
  6. asp.net网站 无法识别的属性“targetFramework”。请注意属性名称区分大小写
  7. 茅台酒独特酿制,究竟是百年秘方,还是现代科技?
  8. 关于varchar的总结
  9. JS——Url 转码、获取Url上的参数
  10. 2014级数据结构课程总结全链接