1. 程式人生 > 程式設計 >python3利用Axes3D庫畫3D模型圖

python3利用Axes3D庫畫3D模型圖

Python3利用Axes3D庫畫3D模型圖,供大家參考,具體內容如下

最近在學習機器學習相關的演算法,用python實現。自己實現兩個特徵的線性迴歸,用Axes3D庫進行建模。

python程式碼

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 三維,兩個特徵
fig = plt.figure(figsize=(8,6)) #設定圖示的大小
ax = fig.add_subplot(111,projection='3d') # 111的意思是把畫布分為1行1列,畫在第一個方格內。其實就是整個畫布。

# 建立樣本,注意兩個特徵不能線性相關,否則無法用最小二乘解引數
X1 = np.arange(-4,4,0.1)
m = len(X1)
X2 = np.random.rand(m)*5
# print(X2)
# print(X1)

# 堆疊全1陣列和X1以及X2形成樣本的矩陣,倒置,用以矩陣乘法
X = np.vstack((np.full(m,1),X1,X2)).T

# y = 15*X1 + 3 * X2 + theta0
# 自定義樣本輸出
Y = X1 + 3 * X2 + 3*np.random.randn(m)

# 利用標準方程(最小二乘法求解theta)
theta = np.dot(np.dot(np.linalg.inv(np.dot(np.transpose(X),X)),np.transpose(X)),Y)
print(theta)

# 構造網格 meshgrid函式可以通過延伸矩陣構造多維座標中的網格座標。
M,N = np.meshgrid(X1,X2)

# zip函式構建一個多元祖[(x1,y1),(x2,y2)...],ravel函式將一個多維數組合併成一維陣列
Z = np.array([theta[1] * d + theta[2]*p + theta[0] for d,p in zip(np.ravel(M),np.ravel(N))]).reshape(M.shape)

# 根據網格和函式構建圖形 suface是一個完整的面
ax.plot_surface(M,N,Z)
# scatter是散點圖
ax.scatter(X1,X2,Y,c='r')
# 設定座標軸的名稱
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

plt.show()

圖形如下

python3利用Axes3D庫畫3D模型圖

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。