Python实现——二元线性回归(最小二乘法)
2019/3/30
二元线性回归——矩阵公式法又名:对于python科学库的糟心尝试
二元线性回归严格意义上其实不过是换汤不换药,我对公式进行推导,其实也就是跟以前一样的求偏导并使之为零,并且最终公式的严格推导我大概也只能说是将将理解,毕竟最初的矩阵一开始都不太清楚应该是什么样子的,其中,Coursera的课程起到了非常显著的帮助。
其实这个部分我并不想写太多,因为理解并不是十分透彻,总体来讲,感觉就是一个公式的事情,其中对于python数据类型以及python库函数的使用反而耗费的时间更多,回头来更新。
python库函数的运用非常重要,也是卡住我好久的主要原因,其次,对于python几种数据结构类型也让我十分苦恼,毕竟我不太清楚大部分函数会返回给我什么样的结果。
其中最终的公式应该说是非常普及了,随便的搜索便可查找到,虽然花了这么大的功夫,最终带给我的印象却是远远不及梯度下降的那种循序渐进看着计算机一步步探索来的深刻。
然而,这不正是前人的努力所要想做到的一步到位的方式吗?
虽然是真真正正的计算公式,但是若是面对特殊的矩阵情况或者过大的矩阵,这个方法也是力不从心的,详情我不多赘述,毕竟我还是个没有系统学习线代概率的赤脚蒟蒻。
先这样,或许会再来更新吧。
以下是利用Coursera提供的部分数据进行的实现图像:

这里给出完整代码:
import xlrd
import sympy as sp
import xlwt
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
workbook=xlrd.open_workbook(r'dataset.xlsx')
sheet=workbook.sheet_by_index(0)
Y1=sheet.col_values(0)
X1=sheet.col_values(1)
X2=sheet.col_values(2)
#Axes3D
fig = plt.figure()
ax = Axes3D (fig)
ax.scatter(X1, X2, Y1)
#H为100*3矩阵,读入现有数据,第0列为1
H=[]
for i in range(100):
values=[]
values.append(1)
values.append(X1[i])
values.append(X2[i])
H.append(values)
#将H0数组化
H0 = np.array(H)
#H1为H的转置矩阵
H1=np.array(H0).T
H2=H1@H0
#求逆矩阵
H3=np.linalg.inv(H2)
#最终结果计算
temp=H3@H1@Y1
temp=np.mat(temp)
w0=temp[0,0]
w1=temp[0,1]
w2=temp[0,2]
#生成两坐标轴取点
x1=np.linspace(0,5000,100)
x2=np.linspace(0,5,100)
#将两坐标轴点合成
x1, x2 = np.meshgrid(x1, x2)
#结果方程,并输出最终结果图
#z=w0+w1*x1+w2*x2
ax.plot_surface(x1,x2,w0+w1*x1+w2*x2)
plt.show()
Python实现——二元线性回归(最小二乘法)的更多相关文章
- Python实现——一元线性回归(最小二乘法)
2019/3/24 线性回归--最小二乘法公式法 暂时用python成功做出来了图像,但是其中涉及到的公式还是更多的来自于网络,尤其是最小二乘法公式中的两个系数的求解,不过目前看了下书高数也会马上提及 ...
- python实现多变量线性回归(Linear Regression with Multiple Variables)
本文介绍如何使用python实现多变量线性回归,文章参考NG的视频和黄海广博士的笔记 现在对房价模型增加更多的特征,例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为( x1,x2,..., ...
- Python实现实现基于最小二乘法的线性回归
下面展示利用Python实现基于最小二乘法的线性回归模型,同时不需要引入其他科学计算以及机器学习的库. 利用Python代码表示如下: #首先引入数据集x,和y的值的大小利用Python的数据结构:列 ...
- 机器学习:Python中如何使用最小二乘法
之所以说"使用"而不是"实现",是因为python的相关类库已经帮我们实现了具体算法,而我们只要学会使用就可以了.随着对技术的逐渐掌握及积累,当类库中的算法已经 ...
- Python实现——一元线性回归(梯度下降法)
2019/3/25 一元线性回归--梯度下降/最小二乘法_又名:一两位小数点的悲剧_ 感觉这个才是真正的重头戏,毕竟前两者都是更倾向于直接使用公式,而不是让计算机一步步去接近真相,而这个梯度下降就不一 ...
- 基于python的二元霍夫曼编码译码详细设计
一.设计题目 对一幅BMP格式的灰度图像(个人证件照片)进行二元霍夫曼编码和译码 二.算法设计 (1)二元霍夫曼编码: ①:图像灰度处理: 利用python的PIL自带的灰度图像转换函数,首先将彩色图 ...
- python——绘制二元高斯分布的三维图像,
在对数据进行可视化的过程中,可能经常需要对数据进行三维绘图,在python中进行三维绘图其实是比较简单的,下面我们将给出一个二元高斯分布的三维图像案例,并且给出相关函数的参数. 通常,我们绘制三维图像 ...
- python 单变量线性回归
单变量线性回归(Linear Regression with One Variable)¶ In [54]: #初始化工作 import random import numpy as np imp ...
- python实现简单线性回归
之前推导了一元线性回归和多元线性回归,今天就用python来实现一下一元线性回归 先看下之前推导的结果 , 第一种是用循环迭代的计算方法.这里的x,y是numpy中的array类型 def su ...
随机推荐
- JavaScript高级程序设计学习
1.变量 变量使用var操作符定义,var message,定义一个message变量,可用来保存任何类型的变量.未经初始化的变量值为undifided: 如果没变量没有被var定义,那么被执行后会成 ...
- Java发送邮件Utils
/** * 类文件说明 * */ public class SendMail { Logger log = Logger.getLogger(SendMail.class); /** * 发送邮件 * ...
- C++加载位图跟SOCKET通信的编写
//将屏幕信息转换为位图结构 CDC *pDeskDC=GetDesktopWindow()->GetDC();//获取桌面的额画图对象 ; ; CDC memDC;//定义一个内存画布 mem ...
- FPGA和CPLD的比较
1 FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现. 2 CPLD更适合触发器有限而乘积丰富的结构,更适合完成复杂的组合逻辑:FPGA更适合于触发器丰富的结构,适合完成时序逻辑. 3 c ...
- sendClond如何更新邮件模板
$url = 'http://www.sendcloud.net/webapi/template.update.json'; $API_USER = ''; $API_KEY = ''; $conte ...
- 刷题向》DP》值得一做》关于对DP问题的充分考虑(normal)
在你辛苦调试一道DP题,遇到瓶颈的时候,你是否感到一股洪荒之力遏制住你的思想,使你给题库贡献了一倍的WA.RE.TLE量,却没有AC过一次? 在这时,你应该考虑的是砸电脑再次重新考虑整个题目,再应对自 ...
- 基于Nginx简单实现动静分离
1.首先安装Nginx 2.在Nginx.conf文件中添加如下配置: server{ listen 80; server_name www.lf.com; location ~ (.jpg|.png ...
- struts2 与 spring 整合
1. 首先把所有jar包导入工程 2.在struts2的核心配置文件(在src文件目录下)中添加如下配置: <!-- 将Struts的对象交给Spring管理 所以需要导入Spring和Stru ...
- lucene 第一天
Lucene/Solr 第一天 1. 课程计划 Lucene介绍 全文检索流程介绍 a) 索引流程 b) 搜索流程 Lucene入门程序 a) 索引实现 b) 搜索实现 分词器 a) 分词介绍 b ...
- 面试题:try,catch,finally都有return语句时执行哪个 已看1
1.不管有木有出现异常,finally块中代码都会执行: return 先执行 把值临时存储起来, 执行完finally之后再取出来 值是不会改变的2.当try和catch中有return时,fina ...