绘制3D图以进行多变量回归

时间:2019-08-15 11:01:07

标签: python pandas matplotlib regression

我想使用以下数据在平面上绘制3D图形:

enter image description here

以下是数据框的代码:

df_dict = {'area':[2600, 3000, 3200, 3600, 4000, 4100], 
'bedrooms':[3.0, 4.0, 4.0, 3.0, 5.0, 6.0],
'age':[20, 15, 18, 30, 8, 8], 
'price':[550000, 565000, 610000, 595000, 760000, 810000]}

df = pd.DataFrame(df_dict)

这些值从熊猫存储在DataFrame中。

另外,等式是:

enter image description here

面积是x1,卧室是x2,年龄是x3。

  • m1是112,m2是23388,而m3是-3231
  • b是221323

我只能执行以下操作:

enter image description here

fig = plt.figure(figsize=(12, 8))

ax = fig.add_subplot(111, projection='3d')

ax.scatter(df['area'], df['bedrooms'], df['age'], c='r', marker='o')

ax.set_xlabel('area')
ax.set_ylabel('bedrooms')
ax.set_zlabel('age')

plt.show()

即使这样看起来也不正确。如何使用方程式正确绘制平面?

1 个答案:

答案 0 :(得分:1)

您希望绘制的回归方程实际上具有3个预测变量和1个目标变量。绘制price将需要另一个轴,即以4d绘制。在3d模式下绘制平面的简化版本可能是一个不错的起点

from mpl_toolkits import mplot3d
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

def f(area, bedrooms):
    return(112*area + 23388*bedrooms + 221323)

n = 6
area = np.linspace(2600, 4100, n)
bedrooms = np.linspace(3, 6, n)

X1, X2 = np.meshgrid(area, bedrooms)
Z = f(X1, X2)

fig = plt.figure(figsize = (12, 8))

ax = plt.axes(projection='3d')
ax.plot_surface(X1, X2, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')
ax.set_xlabel('area')
ax.set_ylabel('bedrooms')
ax.set_zlabel('price')
ax.set_title('surface')

this