机器学习-预测-线性系统的预测(最小二乘法、正规方程式实现)
机器学习-预测-线性系统的预测
现在预测学的核心概念:回归。从数学的角度,为事物(系统)的预测提供现代的技术方法。
回归与现代预测学
统计学上最初回归的含义由高尔顿(达尔文的表弟)通过研究父母身高与孩子身高得出。
矮个父母所生的儿子往往会比其父母更高,高个父母所生儿子的身高却回降到多数人的平均身高。也就是说,当父母身高走向极端时,子女的身高不会进一步极端化,他们的身高要比父母更接近平均身高,即有”回归“到平均数的趋势,这就是统计学上最初回归的含义。
高尔顿把这一现象叫作”向平均数方向的回归“(Regression Toward Mediocrity)
回归反应了系统的随机运动总是趋向于其整体运动规律的趋势。在数学上,就是根据系统的总体静态观测值,通过算法去除随机性的噪声,发现系统整体运动规律的过程。
回归是现代预测学的基础,对各种数据集的预测结果,可以理解为对其回归函数的计算。
最小二乘法
最小二乘法是目前已知最古老的回归预测方法,由高斯于1809年发表于《天体运动论》中。简单地说,最小二乘的思想就是使观测点和估计点的距离平方和最小。
古汉语中,”平方“称为”二乘“,这里是指用平方值来度量预测点与估计点的远近(这就消除了距离中的正负号),”最小“指的是参数的估计值要保证各个观测点与估计点的距离平方和达到最小。
解得Y=aX+b,就称为该样本集的最小二乘法,求解这个函数的解法也称为最小二乘法。
对于某个数据集(xi,yi)(i=0,1,...,n),我们需要找到一条趋势线,能够表达出数据集(xi, yi)这些点所指向的方向。
我们现用一个直线函数表示这条曲线:Y = aX + b
数据集的点一定位于这条趋势线的上下两侧,或者与趋势线重合。我们把某个样本点xi到这条趋势线的垂直距离定义为残差,那么过这一点与趋势线平行的样本函数为
如果这个样本点位于趋势线的上侧,在(残差i) > 0,反之则(残差i) < 0,如果样本点位于趋势线上则(残差i) = 0。
求解这条趋势线,因为是线性函数,所以也就是求解a、b这两个值。
因为残差有正负号的问题,所以统一用平方和来计算,即残差平方和;
很明显这个二次函数式一个凸函数(单峰函数),接下来对该函数求极值,即它的一阶导数等于0.
两个方程联立,令
解得a、b的值为
xi和yi均为已知的样本集
解得直线函数Y=aX+b,就称为该样本集的最小二乘解,求解这个函数的解法也称为最小二乘法。
正规方程组法
假设所有的样本点构成一个线性方程组矩阵,其形式化的表示:aX+b = 0,这里未知数是a、b,X是已知的样本向量矩阵。
为了简化矩阵的形式,我们从X中抽取最后一列Xn,作为输出的列向量。在X的第一列前增加一列b,这样b就被合并到X中,改变一下方程组的形式为:Y = XA,因为b被合并到X中,这里的A就包含原来的a、b两个向量,我们要求解得变量就从a、b变成A。
下面两边都乘以样本矩阵X的转置:
如果方程组有解,
![](/assets/blank.gif)
的行列式要大于 0 ,即这个对称矩阵是非奇异的。
下面我们让
![](/assets/blank.gif)
这样等式右边就变为EA,而等式左边变为正规方程组的形式。
因为X、Y都是已知的,所以可以直接得到A这个包含a、b的系数矩阵,它也就是方程组的最小二乘解。
最小二乘法代码实现:
# 最小二乘法
from numpy import *
import matplotlib.pyplot as plt# 加载数据集
def loadDataSet(fileName):X = []; Y = []fr = open(fileName, 'r')content = fr.read()fr.close()rowlist = content.splitlines() # 按行转换为一维表recordlist = array([row.split("\t") for row in rowlist if row.strip()])for line in recordlist:line = array(line)X.append(float(line[0]))Y.append(float(line[-1]))return X, Y# 绘制图形
def plotscatter(Xmat, Ymat, a, b, plt):fig = plt.figure()ax = fig.add_subplot(111) # 绘制图形位置ax.scatter(Xmat, Ymat, c='blue', marker='o') # 绘制散点图Xmat.sort() # 对Xmat各元素进行排序yhat = [a * float(xi) + b for xi in Xmat] # 计算预测值plt.plot(Xmat, yhat, 'r') # 绘制回归线plt.show()return yhatXmat, Ymat = loadDataSet("/Users/FengZhen/Desktop/accumulate/机器学习/predict/线性回归测试集.txt") # 导入数据文件
meanX = mean(Xmat) # 原始数据集的均值
meanY = mean(Ymat)
dX = Xmat - meanX # 各元素与均值的差
dY = Ymat - meanYsumXY = vdot(dX, dY) # 返回两个向量的点乘
sqX = sum(power(dX, 2)) # 向量的平方 (X-meanX)^2# 计算斜率和截距
a = sumXY / sqX
b = meanY - a * meanX
print(a, b) # 1.199346340945075 -0.6940230973871095
plotscatter(Xmat, Ymat, a, b, plt)
正规方程组的代码实现
#正规方程组
from numpy import *
import matplotlib.pyplot as plt# 加载数据集
def loadDataSet(fileName):X = []; Y = []fr = open(fileName, 'r')content = fr.read()fr.close()rowlist = content.splitlines() # 按行转换为一维表recordlist = array([row.split("\t") for row in rowlist if row.strip()])for line in recordlist:line = array(line)X.append(float(line[0]))Y.append(float(line[-1]))return X, Y# 绘制图形
def plotscatter(Xmat, Ymat, a, b, plt):fig = plt.figure()ax = fig.add_subplot(111) # 绘制图形位置ax.scatter(Xmat, Ymat, c='blue', marker='o') # 绘制散点图Xmat.sort() # 对Xmat各元素进行排序yhat = [a * float(xi) + b for xi in Xmat] # 计算预测值plt.plot(Xmat, array(yhat), 'r') # 绘制回归线plt.show()return yhatxArr, yArr = loadDataSet("/Users/FengZhen/Desktop/accumulate/机器学习/predict/线性回归测试集.txt")
print(xArr, yArr)
m = len(xArr)
Xmat = mat(ones((m, 2))) # 生成x坐标
for i in range(m):Xmat[i, 1] = xArr[i]
Ymat = mat(yArr).T # 转换为Y列
xTx = Xmat.T * Xmat # 矩阵左乘自身的转置
ws = [] # 直线的斜率和截距
if linalg.det(xTx) != 0.0: # 行列式不为0ws = xTx.I * (Xmat.T * Ymat) # 矩阵正规方程组公式:inv(X.T * X) * X.T*Y
else:print("矩阵为奇异矩阵,无逆矩阵")sys.exit(0) # 退出程序
print(ws)
print(ws[1, 0], ws[0,0]) # 截距:斜率
plotscatter(xArr, yArr, ws[1, 0], ws[0,0], plt)
机器学习-预测-线性系统的预测(最小二乘法、正规方程式实现)相关推荐
- 郑捷《机器学习算法原理与编程实践》学习笔记(第七章 预测技术与哲学)7.1 线性系统的预测...
7.1.1 回归与现代预测 7.1.2 最小二乘法 7.1.3 代码实现 (1)导入数据 def loadDataSet(self,filename): #加载数据集X = [];Y = []fr = ...
- 【机器学习】从房价预测问题看回归算法
关键词:机器学习 / 回归 文章目录 回归问题是什么 生成数据 最小二乘法学习一元线性回归模型 最小二乘法学习多元线性回归模型 梯度下降法学习回归模型 回归问题是什么 回归问题是除了分类问题以外,机器 ...
- ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现
ML之分类预测:机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 目录 机器学习中多分类预测数据集可视化(不同类别赋予不同颜色)设计思路及代码实现 代码实现
- python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)
本文转自博客园,作者为hsm_computer 原文链接:https://www.cnblogs.com/JavaArchitect/p/11717998.html在笔者的新书里,将通过股票案例讲述P ...
- 疯狂的机器学习实战-银行营销预测
机器学习实战-银行营销预测 问题: 数据集: 链接:https://pan.baidu.com/s/1TUOLr8jFbT38p_iUh1iBsQ 提取码:1234 银行营销数据集 这些数据与葡萄牙银 ...
- 基于scikit-learn机器学习库的分类预测
一旦你在scikit-learn中选择好机器学习模型,就可以用它来预测新的数据实例.初学者经常会有这样的疑问: 如何在scikit-learn中用我自己的模型进行预测? 在本教程中,你将会发现如何在P ...
- 使用机器学习预测天气_如何使用机器学习根据文章标题预测喜欢和分享
使用机器学习预测天气 by Flavio H. Freitas Flavio H.Freitas着 如何使用机器学习根据文章标题预测喜欢和分享 (How to predict likes and sh ...
- python泰坦尼克号数据预测_机器学习入门之Python机器学习:泰坦尼克号获救预测一...
本文主要向大家介绍了机器学习入门之Python机器学习:泰坦尼克号获救预测一,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 一.项目概要 1.应用 模式识别.数据挖掘(核心).统计学 ...
- 基于Keras机器学习库的分类预测
在前面的博文中,我们分享了<基于scikit-learn机器学习库的分类预测>,本文将分享Keras机器学习库的分类预测. 一旦你在Keras中选择好机器学习模型,就可以用它来预测新的数据 ...
最新文章
- java socket 包头包体_自定义协议封装包头、包体
- linux c 用户态 调试追踪函数 调用堆栈 定位段错误
- FreeRTOS — 临界段和开关中断
- AntD 官网样例 InputRef报错原因
- Educational Codeforces Round 16 C. Magic Odd Square 矩阵构造
- PDF 开发者 Charles Geschke 去世,39 年前联合创立软件巨头 Adobe!
- 安装MATLAB(已经下载安装包)
- 数据分析——天猫用户购买行为分析
- 高级JAVA面试题详解(三)——Redis(redis cluster、虚拟槽、一致性hash算法、master选举、淘汰策略、String数据结构)
- 从实践角度重新理解BIO和NIO
- 计算机组成与结构 英语,计算机组成与结构,Computer organization and architecture,音标,读音,翻译,英文例句,英语词典...
- win10计算器_你所不知道的 Windows 10 小诀窍:万能计算器、虚拟键盘、屏幕截图标注...
- transform模板函数调用tolower函数报错原因、解决办法
- PSP开发简明教程(2)
- ACP——ECS题库
- 新建应用,应用创建失败
- CVE-2010-0188漏洞点定位
- 什么是AUTOSAR规范?
- Firfox flash player
- 【笔记整理】Activiti工作流的学习笔记
热门文章
- TCP与UDP首部及字段
- python bottle 上传文件_Bottle + WebUploader 修改Bottle框架从而大文件上传实现方案
- mysql8.0安装,data目录下面err文件出现Can‘t find error-message file
- PSP上所有模拟器的使用方法
- 计算机组成原理——输入输出设备(I/O设备)
- 什么样的企业会上BI系统?
- Unix哲学(Unix编程艺术)
- 电子版题库可以在手机答题,微信手机在线考试题库小程序怎么做?
- [经验教程]浙江卫视手机高清在线直播入口及浙江卫视回放在线观看高清直播教程
- 简历不用多出色,达到“合格”,拿到面试即可