解析法实现一元线性回归、多元线性回归以及数据模型可视化操作

目录

  • 【1】解析法实现一元线性回归
    • python列表实现
    • 利用Numpy实现
    • 利用TensorFlow实现
    • 数据和模型可视化
  • 【2】解析法实现多元线性回归
    • 利用Numpy实现
      • 需要用到的NumPy数组运算函数
    • 数据和模型可视化
      • 绘制空间点集:
      • 绘制空间平面图:
      • 绘制线框图并且与散点图对比:

【1】解析法实现一元线性回归

公式:
在这里插入图片描述
代码:

python列表实现

#加载样本数据
x=[137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]
y=[145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]
meanX=sum(x)/len(x)
meanY=sum(y)/len(y)
sumXY=0.0
sumX=0.0
for i in range(len(x)):sumXY+=(x[i]-meanX)*(y[i]-meanY)sumX+=(x[i]-meanX)*(x[i]-meanX)
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=[128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00]
print("面积\t估计房价")
for i in range(len(x_test)):print(x_test[i],"\t",round(w*x_test[i]+b,2))

结果:
在这里插入图片描述

利用Numpy实现

import numpy as np
x=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=np.mean(x)
meanY=np.mean(y)
sumXY=np.sum((x-meanX)*(y-meanY))
sumX=np.sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print("面积\t估计房价")
for i in range(y_pred.size):print(x_test[i],"\t",np.round(y_pred[i],2))

利用TensorFlow实现

import tensorflow as tf
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("w=",w)
print("b=",b)
x_test=tf.constant([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = w*x_test+b
print(y_pred)

数据和模型可视化

#解析法实现一元线性回归 
# #Realization of one variable linear regression by analytic method
#导入库
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt 
#设置字体
plt.rcParams['font.sans-serif'] =['SimHei']
#加载样本数据
x=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#学习模型-计算w,b
meanX=tf.reduce_mean(x)
meanY=tf.reduce_mean(y)
sumXY=tf.reduce_sum((x-meanX)*(y-meanY))
sumX=tf.reduce_sum((x-meanX)*(x-meanX))
w=sumXY/sumX
b=meanY-w*meanX
print("权值w=",w.numpy())
print("偏置b=",b.numpy())
print("线性模型:y=",w.numpy(),"*x+",b.numpy())
#预测房价
x_test=np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = (w*x_test+b).numpy()#将张量类型转化为numpy数组类型
print("面积\t估计房价")
n=len(x_test)
for i in range(n):print(x_test[i],"\t",round(y_pred[i],2))
#模型和数据可视化
plt.figure()
#绘制散点图
#张量和数组都可以作为散点函数的输入提供点坐标
plt.scatter(x,y,color="red",label="销售记录")
plt.scatter(x_test,y_pred,color="blue",label="预测房价")
plt.plot(x_test,y_pred,color="green",label="拟合直线",linewidth=2)
#设置坐标轴的标签文字和字号
plt.xlabel("面积(平方米)",fontsize=14)
plt.xlabel("价格(万元)",fontsize=14)
#设置坐标轴的范围
plt.xlim((40,150))
plt.ylim((40,150))
#设置标题文字和字号
plt.suptitle("商品房销售价格评估系统v1.0",fontsize=20)
#在左上方显示图例
plt.legend(loc="upper left")
#显示整个绘图
plt.show()

结果:

【2】解析法实现多元线性回归

利用Numpy实现

需要用到的NumPy数组运算函数

功能函数
数组堆叠np.stack( )
改变数组形状np.reshape( )
矩阵相乘np.matmul( )
矩阵转置np.transpose( )
矩阵求逆np.linalg.inv( )

公式:
在这里插入图片描述

代码:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库
import numpy as np
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#=======================【4】预测房价===============================================
print("请输入房屋面积和房间数,预测房屋销售价格")
x1_test=float(input("商品房面积:"))
x2_test=int(input("房间数:"))
y_pred=W[1]*x1_test+W[2]*x2_test+W[0]
print("预测价格:",round(y_pred,2),"万元")

效果:

数据和模型可视化

绘制空间点集:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和数据可视化
fig=plt.figure(figsize=(8,6))
#创建3D绘图对象
ax3d=Axes3D(fig)
#用来改变视角的函数
#elev:视角的水平高度  水平旋转的角度 
#ax3d.view_init(elev=0,azim=-90)
#绘制散点图
#张量和数组都可以作为散点函数的输入提供点坐标
ax3d.scatter(x1,x2,y,color="b",marker="*")
ax3d.set_xlabel('Area',color='r',fontsize=16)
ax3d.set_ylabel('Room',color='r',fontsize=16)
ax3d.set_zlabel('Price',color='r',fontsize=16)
#设置y轴坐标值刻度
ax3d.set_yticks([1,2,3])
ax3d.set_zlim3d(30,160)
plt.show()
ax3d.view_init(elev=0,azim=-90)
ax3d.view_init(elev=0,azim=0)

绘制空间平面图:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
#模型和数据可视化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#创建3D绘图对象
fig=plt.figure()
ax3d=Axes3D(fig)
#绘制空间平面图
ax3d.plot_surface(X1,X2,Y_PRED,cmap="coolwarm")
ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.show()

在这里插入图片描述

绘制线框图并且与散点图对比:

#解析法实现多元线性回归
#Realization of multiple linear regression by analytic method
#导入库与模块
import numpy as np
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D
#=======================【1】加载样本数据===============================================
x1=np.array([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00,106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21])
x2=np.array([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2])
y=np.array([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00,62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30])
#=======================【2】数据处理===============================================
x0=np.ones(len(x1))
#堆叠属性数组,构造属性矩阵
#从(16,)到(16,3),因为新出现的轴是第二个轴所以axis为1
X=np.stack((x0,x1,x2),axis=1)
print(X)
#得到形状为一列的数组
Y=np.array(y).reshape(-1,1)
print(Y)
#=======================【3】求解模型参数===============================================
Xt=np.transpose(X)                      #计算X'
XtX_1=np.linalg.inv(np.matmul(Xt,X))    #计算(X'X)-1
XtX_1_Xt=np.matmul(XtX_1,Xt)            #计算(X'X)-1X'
W=np.matmul(XtX_1_Xt,Y)                 #W=((X'X)-1)X'Y
print(W)
W=W.reshape(-1)
print(W)
print("多元线性回归方程")
print("Y=",W[1],"*x1+",W[2],"*x2+",W[0])
y_pred=W[0]+W[1]*x1+W[2]*x2
#设置字体
plt.rcParams['font.sans-serif'] =['SimHei']
#模型和数据可视化
X1,X2=np.meshgrid(x1,x2)
#平面方程
Y_PRED=W[0]+W[1]*X1+W[2]*X2
#创建3D绘图对象
fig=plt.figure()
ax3d=Axes3D(fig)
#绘制散点图与线框图
ax3d.scatter(x1,x2,y,color='b',marker="*",label="销售记录")
ax3d.scatter(x1,x2,y_pred,color='r',label="预测房价")
ax3d.plot_wireframe(X1,X2,Y_PRED,color='c',linewidth=0.5,label="拟合平面")ax3d.set_xlabel('Area',color='r',fontsize=14)
ax3d.set_ylabel('Room',color='r',fontsize=14)
ax3d.set_zlabel('Price',color='r',fontsize=14)
ax3d.set_yticks([1,2,3])
plt.suptitle("商品房销售回归模型",fontsize=20)
plt.legend(loc="upper left")
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378367.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

32位系统win2008+mssql2008 6G内存折腾纪实

十年没搞硬件了,现在计算机发展到大硬盘大内存的时代了。一直都少搞服务器配置、运营,以前弄服务器都是普通的PC来当服务器。公司原来的一个业务系统用的是mssql2000好几年了,由于业务数据越积压越多最大的一张表已经有7000多万条记录了&…

前台用js、jquery出现错误很多是由于IE缓存

例如:当你用jquery进行异步请求数据时,如果浏览器发现请求的地址不变,或者参数也不改变的情况下 IE默认是取原来的缓存中的数据,而不进行重新请求数 解决的方法是是在地址栏的后面加上一个随机参数值,IE发现地址改变&a…

WebC.BBS 项目参与新人必读

开发环境: 采用Visual Studio 2010,MVC版本采用Asp.Net MVC3,数据库采用Sql2005 2008,扩展技术包括jQuery。 SVN的相关信息: SVN-Url:svn://svn.cyqdata.com/project_bbs 账户申请:请将自己的密码发给组长,…

利用梯度下降法求解一元线性回归和多元线性回归

文章目录原理以及公式【1】一元线性回归问题【2】多元线性回归问题【3】学习率【4】流程分析(一元线性回归)【5】流程分析(多元线性回归)归一化原理以及每种归一化适用的场合一元线性回归代码以及可视化结果多元线性回归代码以及可…

Javascript之创建对象(原型模式)

我们创建的每个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,它的用途是包含可以有特定类型的所有实例共享的属性和方法。 prototype就是通过构造函数而创建的那个对象的原型对象。使用原型的好处就是可以让所有对象实例…

两种方法将Android NDK samples中hello-neon改成C++

一、第一种方法:1.修改helloneon.c 中代码 a.将 char* str; 改为 char str[512] {0}; b.将 asprintf(&str, "FIR Filter benchmark:\nC version : %g ms\n", time_c); 改为 sprintf(str, "FIR Filter benchmark:\nC ve…

【视觉项目】【day6】8.26关于matchTemplate()以及NCC的思考整理

NCC与matchTemplate()函数中match_method TM_CCOEFF_NORMED是否一样? 先看公式: TM_CCOEFF_NORMED NCCTM_CCOEFF_NORMED:归一化的相关性系数匹配方法 NCC:normalized cross correlation:归一化互相关系数 公式是一样的。 参考: 模板匹配的几…

HTTP 状态代码

如果向您的服务器发出了某项请求要求显示您网站上的某个网页(例如,当用户通过浏览器访问您的网页或在 Googlebot 抓取该网页时),那么,您的服务器会返回 HTTP 状态代码以响应该请求。 此状态代码提供了有关请求状态的信…

TensorFlow的可训练变量和自动求导机制

文章目录一些概念、函数、用法TensorFlow实现一元线性回归TensorFlow实现多元线性回归一些概念、函数、用法 对象Variable 创建对象Variable: tf.Variable(initial_value,dtype)利用这个方法,默认整数为int32,浮点数为float32,…

django第二个项目--使用模板做一个站点访问计数器

上一节讲述了django和第一个项目HelloWorld,这节我们讲述如何使用模板,并做一个简单的站点访问计数器。 1、建立模板 在myblog模块文件夹(即包含__init__.py的文件夹)下面新建一个文件夹templates,用于存放HTML模板,在…

c语言math乘法,JavaScript用Math.imul()方法进行整数相乘

1. 基本概念Math.imul()方法用于计算两个32位整数的乘积,它的结果也是32位的整数。JavaScript的Number类型同时包含了整数和浮点数,它没有专门的整型和浮点型。因此,Math.imul()方法能提供类似C语言的整数相乘的功能。我们将Math.imul()方法的…

梯度下降法预测波士顿房价以及简单的模型评估

目录原理代码关于归一化的思考原理 观察数据可知属性之间差距很大,为了平衡所有的属性对模型参数的影响,首先进行归一化处理。 每一行是一个记录,每一列是个属性,所以对每一列进行归一化。 二维数组归一化:1、循环方式…

Windows Phone 内容滑动切换实现

在新闻类的APP中,有一个经常使用的场景:左右滑动屏幕来切换上一条或下一条新闻。 那么通常我们该使用哪种方式去实现呢?可以参考一下Demo的实现步骤。 1,添加Windows Phone用户自定义控件。例如: 这里我为了演示的方便…

使用鸢尾花数据集实现一元逻辑回归、多分类问题

目录鸢尾花数据集逻辑回归原理【1】从线性回归到广义线性回归【2】逻辑回归【3】损失函数【4】总结TensorFlow实现一元逻辑回归多分类问题原理独热编码多分类的模型参数损失函数CCETensorFlow实现多分类问题独热编码计算准确率计算交叉熵损失函数使用花瓣长度、花瓣宽度将三种鸢…

【神经网络计算】——神经网络实现鸢尾花分类

本blog为观看MOOC视频与网易云课堂所做的笔记 课堂链接: 人工智能实践:TensorFlow笔记 吴恩达机器学习 疑问与思考 为什么按照batch喂入数据 之前看的视频里面处理数据都是一次性将所有数据喂入,现在看的这个视频对数据进行了分组投入。这是为何&#…

c# xaml语言教程,c#学习之30分钟学会XAML

1.狂妄的WPF相对传统的Windows图形编程,需要做很多复杂的工作,引用许多不同的API。例如:WinForm(带控件表单)、GDI(2D图形)、DirectXAPI(3D图形)以及流媒体和流文档等,都需要不同的API来构建应用程序。WPF就是看着上面的操作复杂和…

.NET 小结之内存模型

.NET 小结之内存模型 为什么要解.NET 的内存模型 在.NET下的内存管理、垃圾回收其实大部分不需要我们操心,因为大部分.NET已经帮我们做了,通常情况下也不需要考虑这些。但是如果想要了解一些.NET一些稍微“底层”的原理,如:“装箱…

【电设控制与图像训练题】【激光打靶】【openmv测试代码以及效果】

9.4加入串口通讯,送出靶心坐标、激光坐标、激光所在环数、方位;加入防误判操作 博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 目录 规则坐标系代码总结相关openmv使用文…

MVC3中的视图文件

在MVC3中的视图部分,Razor视图引擎是与以往不同的地方之一,使用Razor的视图文件再也不是以往的ASPX文件了,是cshtml文件,在新建视图的时候也会发现增加多了几类文件 由上到下分别是 MVC 3 Layout Page:与原来Web Form的…

C语言 链表拼接 PTA,PTA实验 链表拼接 (20point(s))

本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下:struct ListNode {int data;struct ListNode *next;};函数接口定义:struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);其中list1和list2是用户传入的两个按…