记2(多元线性回归+二元线性回归可视化+三维数据可视化
1、 “维度”:n维向量:向量中元素的个数为n
多维数组:指的就是shape中的参数个数
x=argmin f(x)的寄义(就是f(x)最小时,x等于多少)
https://i-blog.csdnimg.cn/direct/1a6e5ef7957e41ab8f1c3c696fdfde60.png
2、多元回归
回归分析中包罗两个(以上)的自变量
[*]多元线性回归:因变量与自变量是线性关系
[*]一元y=wx+b(二维平面一条线)
[*]二元y=w1x1+w2x2+b(三维空间一个平面,xi中的i是上标是为了和下标区分开,wi的i是下标)
[*]多元y=w1x1+…+wmxm+b(多维空间一个超平面)(xi的i是上标,wi的i是下标
xi是属性,如:x1:面积,x2:房间数,x3:楼层数…
https://i-blog.csdnimg.cn/direct/4614cf5b7d10490bb503d13003656744.png
[*]多元线性回归的求解模子
https://i-blog.csdnimg.cn/direct/188ceb5ec0f44191a2af423282ddaaa7.png
使用矩阵形式求解
https://i-blog.csdnimg.cn/direct/35efbf6123a7439d9e618530003b23b4.png
注意:这种方法求出来,要求(X^T*X)可逆,否则会有多个解(以后办理这个题目)
[*]解析法实现多元线性回归
import numpy as np
#加载数据,x1面积,x2房间数,y房价,(见上一图)X是16行3列的矩阵形式,Y是16行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()
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])
X=np.stack((np.ones(len(x1)),x1,x2),axis=1)#在轴1上堆叠
Y=np.array(y).reshape(-1,1)
#计算模型 W=(X^T*X)^(-1)X^T*Y,同理见上图,
Xt=np.transpose(X) #X^T, X的转置矩阵
XtX_1=np.linalg.inv(np.matmul(Xt,X))#(X^T*X)^(-1),X乘X的转置,再求逆
XtX_1_Xt=np.matmul(XtX_1, Xt) #(X^T*X)^(-1)X^T
W=np.matmul(XtX_1_Xt,Y) #(X^T*X)^(-1)X^T*Y,此时W为3行1列
W=W.reshape(-1) #将W转化为1行3列
print("多元线性回归方程:\nY=",W,"*x1+",W,"*x2+",W)
#预测房价
print("请输入服务面积和房间数,预测房屋销售价格:")
x1_test=float(input("商品房面积:"))
x2_test=int(input("房间数:"))
y_pred=W*x1_test+W*x2_test+W
print("预测价格:",round(y_pred,2),"万元")
输出:
多元线性回归方程:
Y= 0.5348859949724712 *x1+ 14.331503777673714 *x2+ 11.967290930535984
请输入服务面积和房间数,预测房屋销售价格:
商品房面积:140
房间数:3
预测价格: 129.85 万元
[*]二元线性回归可视化(三维数据可视化:使用mplot3d工具包:from mpl_toolkits.mplot3d import Axes3D)
散点图:(见下面商品房例子的代码,此处略)
平/曲面图:
绘制网格点:X1,X2=np.meshgrid(x1,x2),例如绘制以下平面图:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
x=np.arange(1,5)
y=np.arange(1,5)
X,Y=np.meshgrid(x,y) #绘制网格点
print(X)
Z=2*X+Y #绘制z=2*x+y三维图片
fig=plt.figure()
ax3d=Axes3D(fig) #创建3D绘图对象
ax3d.plot_surface(X,Y,Z,cmap="rainbow")#颜色映射用彩虹,位置自上而下由红变紫
ax3d.set_xlabel('X')
ax3d.set_ylabel('Y')
ax3d.set_zlabel('Z=2X+Y')
plt.show()
#输出:
[
]
https://i-blog.csdnimg.cn/direct/c83ea47d0a844b38bb5524cef67fe81b.png
上面代码修改为(增加颜色块,添加颜色指示条):
...
x=np.arange(0,10)
y=np.arange(0,10)
X,Y=np.meshgrid(x,y) #绘制网格点
Z=2*X+Y #绘制z=2*x+y三维图片
fig=plt.figure()
ax3d=Axes3D(fig) #创建3D绘图对象
surf=ax3d.plot_surface(X,Y,Z,cmap="rainbow")#颜色映射用彩虹,位置自上而下由红变紫
fig.colorbar(surf,shrink=0.5,aspect=5)#绘制颜色指示条,shrink指明颜色条的伸缩比例,aspect颜色条宽度
ax3d.set_xlabel('X')
ax3d.set_ylabel('Y')
ax3d.set_zlabel('Z=2X+Y')
plt.show()
#也可以绘制颜色条并指明颜色字体
# font = {'family' : 'serif',
# 'color': 'darkred',
# 'weight' : 'normal',
# 'size' : 16,
# }
#fig.colorbar(surf).set_label('colorbar',fontdict=font)
shrink1.0; fraction by which to shrink the colorbaraspect20; ratio of long to short dimensions https://i-blog.csdnimg.cn/direct/c96620fe55234cf49e0a40a9bb78a9a5.png
[*]曲面图:z=sin根号下(x²+y²)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['axes.unicode_minus']=False#设置正常显示负号
x=np.arange(-5,5,0.1)
y=np.arange(-5,5,0.1)
X,Y=np.meshgrid(x,y) #绘制网格点
Z=np.sin(np.sqrt(X**2+Y**2)) #绘制z=sin根号下(x²+y²)三维图片
fig=plt.figure()
ax3d=Axes3D(fig) #创建3D绘图对象
ax3d.plot_surface(X,Y,Z,cmap="rainbow")#颜色映射用彩虹,位置自上而下由红变紫
ax3d.set_xlabel('X')
ax3d.set_ylabel('Y')
ax3d.set_zlabel('Z=2X+Y')
plt.show()
https://i-blog.csdnimg.cn/direct/a509c47a4b7a4b1a9e9cfe0ea099fa78.png
[*]线框图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
plt.rcParams['axes.unicode_minus']=False#设置正常显示负号
x=np.arange(-5,5,0.1)
y=np.arange(-5,5,0.1)
X,Y=np.meshgrid(x,y) #绘制网格点
Z=np.sin(np.sqrt(X**2+Y**2)) #绘制z=sin根号下(x²+y²)三维图片
fig=plt.figure()
ax3d=Axes3D(fig) #创建3D绘图对象
ax3d.plot_wireframe(X,Y,Z,color="m",linewidth=0.5)#线框图
ax3d.set_xlabel('X')
ax3d.set_ylabel('Y')
ax3d.set_zlabel('Z=2X+Y')
plt.show()
https://i-blog.csdnimg.cn/direct/b1ebe9246b99422a9fd1a8e5ab7add20.png
[*]商品房例子:
散点图
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#加载数据,x1面积,x2房间数,y房价,(见上一图)X是16行3列的矩阵形式,Y是16行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()
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])
X=np.stack((np.ones(len(x1)),x1,x2),axis=1)#在轴1上堆叠
Y=np.array(y).reshape(-1,1)
W=np.array()
y_pred=W*x1+W*x2+W
#绘制散点图
fig=plt.figure(figsize=(8,6))
ax3d=Axes3D(fig)#创建3D绘图对象
ax3d.scatter(x1,x2,y,color="b",marker="*") #描点,marker是用描点的点的形状是*
ax3d.set_xlabel('Area',color='r',fontsize=16)#‘Area'是坐标轴标签文字
ax3d.set_ylabel('Room',color='r',fontsize=16)
ax3d.set_zlabel('Price',color='r',fontsize=16)
ax3d.set_yticks()#注意:这里是设置坐标y轴的坐标形式(这里是整数)而不是坐标轴范围
ax3d.set_zlim3d(30,160) #设置z轴的范围为30~60
plt.show()
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]