Seaborn的distplot出现“numpy.linalg.LinAlgError: singular matrix”错误

4
我正在使用Pycharm运行机器学习接口代码,但SVM算法一直导致我的接口崩溃,出现以下错误:
line 1220, in pushButton_8_handlerax1 = sns.distplot(Y_predict)
line 979, in invraise LinAlgError("singular matrix")
numpy.linalg.LinAlgError: singular matrix

以下是代码。
from sklearn import model_selection
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.preprocessing import LabelEncoder
from sklearn import tree
from sklearn.metrics import accuracy_score
import pickle
from PIL import Image
import numpy as np
import seaborn as sns


def plot_distribution(inp):
    plt.figure()
    ax = sns.distplot(inp)
    plt.axvline(np.mean(inp), color="k", linestyle="dashed", linewidth=5)
    _, max_ = plt.ylim()
    plt.text(
        inp.mean() + inp.mean() / 10,
        max_ - max_ / 10,
        "Mean: {:.2f}".format(inp.mean()),
    )
    return plt.figure

print(np.mean(Y_test))
print(np.mean(Y_predict))

# ________________________Dist Predict Vs. Test and Means value_________________________
plt.figure(figsize=(9, 5))
o = np.mean(Y_test)
tt = np.mean(Y_train)
ax1 = sns.distplot(Y_predict)
ax2 = sns.distplot(Y_test)
RR1 = ('Mean:', tt)
RR2 = ('Mean:', o)
plt.axvline(np.mean(Y_predict), color='b', linestyle='dashed', linewidth=5, label=RR1)
plt.axvline(np.mean(Y_test), color='orange', linestyle='dashed', linewidth=5, label=RR2)
plt.legend()
plt.savefig('DecisionTreeClassifier2.png')

基本上,这个错误在ax1 = sns.distplot(Y_predict)处。
我希望我能解释清楚问题。
谢谢。

如果你删除PyQt5,错误就会消失吗? - eyllanesc
请发布完整的错误日志。 - seralouk
2个回答

4
类似错误的讨论可在此处找到:https://github.com/mwaskom/seaborn/issues/1502,然而,在您的情况下,似乎您正在使用旧版本的seaborn
在最新的seaborn版本中,不会出现这个错误(参考:https://github.com/mwaskom/seaborn/pull/1823)。
错误的解释:
您会收到此错误提示,因为distplot函数默认的输入参数是kde=True,而这导致了观察到的错误。 Y_predict似乎是具有大容量bin大小的离散值。平均k-nearest距离然后为0(对于不太大的k),这会导致KDE的核带宽估计出现问题。

感谢您的输入。当我在Visual Studio Code或Jupiter Lab上运行代码时,它可以正常工作,只有PyCharm或Idle显示此错误。我已经访问了GitHub链接(#1823不要在kdeplot中对单数数据出错)。我需要做什么?我应该寻找Seaborn更新还是将代码复制到GitHub的某个地方?我对这个问题完全不熟悉。 - user11396763

0

Seaborn版本0.7.1可以解决奇异矩阵错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接