У меня есть этот код, адаптированный здесь: https://scipython.com/blog/visualizing-the-bivariate-gaussian-distribution/ для работы с моими данными.
Мои данные
hour Cost
20 58.00
20 336.00
20 34.50
20 106.50
20 118.00
...
11 198.36
11 276.00
11 40.00
11 308.00
11 140.00
11 72.00
11 116.50
11 290.00
11 266.00
11 66.00
11 100.00
11 79.00
11 106.00
11 160.00
Мой код:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy.stats import multivariate_normal
dataset=df[['hour','Cost']]
X = dataset.hour.values
Y = dataset.Cost.values
X, Y = np.meshgrid(X, Y)
N = len(X)
def estimateGaussian(dataset):
mu = np.mean(dataset, axis=0)
sigma = np.cov(dataset.T)
return mu, sigma
mu, Sigma = estimateGaussian(dataset)
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X
pos[:, :, 1] = Y
F = multivariate_normal(pos, mu, Sigma)
Z = F.pdf(pos)
fig = plt.figure(figsize=(20,10))
ax = fig.gca(projection='3d')
ax.plot_surface(X, Y, Z, rstride=3, cstride=3, linewidth=1, antialiased=True,
cmap=cm.viridis)
cset = ax.contourf(X, Y, Z, zdir='z', offset=-0.15, cmap=cm.viridis)
# Adjust the limits, ticks and view angle
ax.set_zlim(-0.15,0.2)
ax.set_zticks(np.linspace(0,0.2,5))
ax.view_init(27, 90)
plt.show()
Предположим, час и стоимость любых случайных векторов
- Как исправить эту ошибку?
C:\ProgramData\Anaconda3\envs\tensorflow\lib\site-packages\scipy\stats\_multivariate.py in __init__(self, mean, cov, allow_singular, seed, maxpts, abseps, releps)
725 self._dist = multivariate_normal_gen(seed)
726 self.dim, self.mean, self.cov = self._dist._process_parameters(
--> 727 None, mean, cov)
728 self.cov_info = _PSD(self.cov, allow_singular=allow_singular)
729 if not maxpts:
C:\ProgramData\Anaconda3\envs\tensorflow\lib\site-packages\scipy\stats\_multivariate.py in _process_parameters(self, dim, mean, cov)
397
398 if mean.ndim != 1 or mean.shape[0] != dim:
--> 399 raise ValueError("Array 'mean' must be a vector of length %d." % dim)
400 if cov.ndim == 0:
401 cov = cov * np.eye(dim)
ValueError: Array 'mean' must be a vector of length 173873952.
- Как узнать вероятность для любой пары (час, стоимость) в моих данных и визуализировать их?
Извините за ошибки Я не являюсь носителем английского языка.
Так что мой вопрос остался на некоторое время без ответа, яВоспользовался советом @ImportanceOfBeingErnest, чтобы упростить пример и сделать его проверяемым примером:
Это простой пример:
time=[1,2,3,4,5,6]
cost=[4,5,3,4,8,9]
var_matrix=np.array([time,cost]).T
mean = np.mean(var_matrix,axis=0)
sigma = np.cov(var_matrix.T)
y = multivariate_normal.pdf(var_matrix, mean=mean, cov=sigma,allow_singular=True)
- Как показать трехмерный график (стоимость, время) изначение плотности вероятности для пар.
Заранее спасибо.