Добавьте линию регрессии и эллипс на трехмерный график рассеяния в Python - PullRequest
0 голосов
/ 04 января 2019

У меня есть трехмерный график рассеяния, который отображает фрейм данных с именем data. Как правило, он генерирует форму, которая может соответствовать одной линии или эллипсу.

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import pandas as pd

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

ax.scatter(data['x'], data['y'], data['z'], c=data['c'])

plt.show()

Типичный пример (извините, я не могу поделиться своими данными ...):

3D scatter plot

Итак, теперь я хотел бы вычислить многомерную регрессию, которая подходит для этого облака точек. Есть много статей, объясняющих, как подгонять это к плоскости, но я хотел бы подгонять его под линию.

В качестве бонуса я также хотел бы снабдить эти точки эллипсом. Таким образом, он будет отражать стандартное отклонение и будет гораздо более наглядным.

1 Ответ

0 голосов
/ 11 января 2019

Я нашел ответ на первый вопрос, который заключается в том, чтобы найти линию, наилучшим образом подходящую к облаку точек. Я адаптировал этот пост в Python

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

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

data = pd.DataFrame([[-1, 15, 2], [2, 6, 8], [5, 4, 20], [1, 5, 20], [3, 9, 12]],
                    columns=['x', 'y', 'z'])
ax.scatter(data['x'], data['y'], data['z'], c='blue')

# Linear regression
X = data[['x', 'y', 'z']].values
Xlen = X.shape[0]
avgPointCloud = 1 / Xlen * np.array([np.sum(X[:, 0]), np.sum(X[:, 1]), np.sum(X[:, 2])])
Xmean = X - avgPointCloud

cov = 1 / Xlen * X.T.dot(Xmean)

t = np.arange(-5, 5, 1)
linearReg = avgPointCloud + cov[:, 0] * np.vstack(t)

ax.plot(linearReg[:, 0], linearReg[:, 1], linearReg[:, 2], 'r', label='Linear Regression')
ax.legend()

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...