raise ValueError("Negative values in data passed to %s" % whom) ValueError: Negative values in data passed to NMF (input X)
时间: 2024-03-14 08:44:06 浏览: 145
这个错误提示意味着你的数据有负值,而NMF(非负矩阵分解)要求输入矩阵中的所有值都必须是非负的。因此,你需要确保数据中没有负值。可以使用`numpy`库的`all`函数来检查数据是否都为非负数。以下是一个示例代码:
```python
import numpy as np
import pandas as pd
from sklearn.decomposition import NMF
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('./ebs/waveform-5000.csv', header=None, skiprows=[0])
X = data.iloc[:, :-1].values
# 检查数据是否都为非负数
if not np.all(X >= 0):
raise ValueError("Input data contains negative values")
# 数据标准化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# NMF模型训练
model = NMF(n_components=5, max_iter=1000, random_state=0)
W = model.fit_transform(X)
H = model.components_
# 可视化聚类结果
plt.scatter(W[:, 0], W[:, 1], c=W[:, 2])
plt.title('NMF Clustering Result')
plt.show()
```
在这个示例中,我们使用`numpy`库的`all`函数来检查数据中是否存在负值。如果存在负值,则会抛出`ValueError`异常。如果数据中没有负值,则继续进行数据标准化和NMF模型训练。
阅读全文