使用 Numpy 重塑多元正态函数中的错误 – Python

我有这组数据(c4),我想对这个矩阵进行4折交叉验证测试。我分割数据的方式如下:

from scipy.stats import multivariate_normalfrom sklearn.model_selection import KFoldimport mathc4 = np.array([[5,10,14,18,22,19,21,18,18,19,19,18,15,15,12,4,4,4,3,3,3,3,3,3,3,3,3,3,3,1],[6,9,11,12,10,10,13,16,18,21,20,19,8,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3],[4,8,12,17,18,21,21,21,17,16,15,13,7,8,8,7,7,4,4,4,3,3,3,3,4,4,3,3,3,2],[3,7,12,17,19,20,22,20,20,19,19,18,17,16,16,15,14,13,12,9,4,4,4,3,3,3,3,3,2,1],[2,5,8,10,10,11,11,10,13,17,19,20,22,22,20,16,15,15,13,11,8,3,3,3,3,3,3,3,2,1],[4,8,10,11,10,15,15,17,18,19,18,20,18,17,15,13,12,7,4,4,4,4,4,4,4,4,3,3,3,2],[2,8,12,15,18,20,19,20,21,21,23,19,19,16,16,16,14,12,10,7,7,7,7,6,3,3,3,3,2,1],[2,13,17,18,21,22,20,18,18,17,17,15,13,11,8,8,4,4,4,4,4,4,4,4,4,4,4,4,3,1],[6,6,9,14,15,18,20,20,22,20,16,16,15,11,8,8,8,5,4,4,4,4,4,4,4,5,5,5,5,4],[8,13,16,20,20,20,19,17,17,17,17,15,14,13,10,6,3,3,3,4,4,4,3,3,4,3,3,3,2,2],[5,9,17,18,19,18,17,16,14,13,12,12,11,10,4,4,4,3,3,3,3,3,3,3,4,4,3,3,3,3],[4,6,8,11,16,17,18,20,16,17,16,17,17,16,14,12,12,10,9,9,8,8,6,4,3,3,3,2,2,2] ])kf = KFold(n_splits=4)for train_index, test_index in kf.split(c4):    X_train, X_test = c4[train_index], c4[test_index]    X_train_mean = np.mean(X_train)    X_train_cov = np.cov(X_train.T)    v = multivariate_normal(X_train_mean, X_train_cov)    res = v.pdf(X_test)    print (res)

但这对我不起作用,尽管分割循环在小样本数据上运行良好。

我得到的错误信息是:

ValueError: 无法将大小为900的数组重塑为形状(1,1)

注意:所有行的长度是相等的。

提前感谢。


回答:

当你使用np.mean(X_train)时,你是在计算整个矩阵X_train的平均值。你应该做的则是沿样本轴计算平均值,即如果你的特征是按列排列,不同的样本是按行排列,那么你应该将np.mean(X_train)替换为np.mean(X_train, axis=0)。这样应该可以解决错误。

在上面的代码中加入这行会让它工作。基本上,np.mean(c4[test_index], axis=0)会给你一个1 x 30的均值向量,而不是一个标量均值。

from scipy.stats import multivariate_normal as mvnv = mvn(np.mean(c4[test_index], axis=0), X_train_cov + np.eye(30))

我不得不添加一个单位矩阵,因为我遇到了奇异矩阵错误。然而,这与c4的定义有关,与这段代码无关。注意,为了避免奇异性,你通常会在对角线上添加一个非常小的值,而不是一个单位矩阵。这只是为了说明问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注