我正在从零开始实现Mahalanobis,但是出现了一个错误。Mahalanobis距离公式是

我向下面的代码提供了错误-
from math import*
from decimal import Decimal
import numpy as np
def mahalanobis(x, y, cov=None):
x_mean = np.mean(x)
y_mean = np.mean(y)
y_minus_mn = y - y_mean
x_minus_mn_with_transpose =np.transpose(x- x_mean)
Covariance = covar(x, y)
inv_covmat = np.linalg.inv(Covariance)
x_minus_mn = x - x_mean
D_square = np.dot( x_minus_mn_with_transpose, inv_covmat, x_minus_mn)
return D_square
def covar(x, y):
x_mean = np.mean(x)
y_mean = np.mean(y)
Cov_numerator = sum(((a - x_mean)*(b - y_mean)) for a, b in zip(x, y))
Cov_denomerator = len(x) - 1
Covariance = (Cov_numerator / Cov_denomerator)
return Covariance
import pandas as pd
filepath = 'https://raw.githubusercontent.com/selva86/datasets/master/diamonds.csv'
df = pd.read_csv(filepath).iloc[:, [0,4,6]]
df.head()
X = df[['carat', 'depth', 'price']].head(500).values.tolist
Y =df[['carat', 'depth', 'price']].values.tolist
mahalanobis(X, Y)错误-下图

请帮帮忙。有没有人能检查和纠正我的代码?
发布于 2019-08-13 10:32:16
X = df[['carat', 'depth', 'price']].head(500).values.tolist
Y =df[['carat', 'depth', 'price']].values.tolist.tolist
这是功能。我觉得你需要:
.tolist()
发布于 2019-08-13 10:51:00
您的代码中有一些错误,我将指出。
D_square = np.dot(np.dot(x_minus_mn, inv_covmat), np.transpose(x_minus_mn))而不是D_square = np.dot( x_minus_mn_with_transpose, inv_covmat, x_minus_mn)X = df[['carat', 'depth', 'price']].head(500).values.tolist代替X = np.asarray(df[['carat', 'depth', 'price']].head(500).values)。如果您使用的是numpy,那么只使用numpy数组,而不是列表。下面是您提供的代码的修改版本
import numpy as np
def mahalanobis(x, y, cov=None):
x_mean = np.mean(x)
Covariance = np.cov(np.transpose(y))
inv_covmat = np.linalg.inv(Covariance)
x_minus_mn = x - x_mean
D_square = np.dot(np.dot(x_minus_mn, inv_covmat), np.transpose(x_minus_mn))
return D_square
import pandas as pd
filepath = 'https://raw.githubusercontent.com/selva86/datasets/master/diamonds.csv'
df = pd.read_csv(filepath).iloc[:, [0,4,6]]
df.head()
X = np.asarray(df[['carat', 'depth', 'price']].head(500).values)
Y =np.asarray(df[['carat', 'depth', 'price']].values)
mahalanobis(X, Y)https://stackoverflow.com/questions/57475242
复制相似问题