我无法使用vq.whiten
fromscipy.cluster
来规范化我的数据。我传入了一个 numpy 数组,其中缺少的特征值用每个特征的平均值填充。
它卡住的线是:
data = scipy.cluster.vq.whiten(self.imputed)
这是我用来替换缺失数据的代码。
imputed = np.array([self.masked[:,i].filled(self.masked[:,i].mean())
for i in range(np.shape(self.masked)[1])])
self.imputed = np.transpose(imputed)
我确信这部分也有更好的方法,除了它似乎破坏了我的代码这一事实。这似乎是一种丑陋的方式,这通常意味着 Python 有更好的方式。
我尝试减少发送到的数组的数量,whiten
但无论我在 Traceback 中得到以下内容。
Traceback (most recent call last):
File "C:\Users\jamie.bull\workspace\Metadata\src\draft_workflow.py", line 87, in <module>
dataset.cluster()
File "C:\Users\jamie.bull\workspace\Metadata\src\draft_workflow.py", line 59, in cluster
data = scipy.cluster.vq.whiten(self.imputed)
File "C:\Enthought\Python27\lib\site-packages\scipy\cluster\vq.py", line 131, in whiten
std_dev = std(obs, axis=0)
File "C:\Enthought\Python27\lib\site-packages\numpy\core\fromnumeric.py", line 2467, in std
return std(axis, dtype, out, ddof)
AttributeError: sqrt
聚类适用于相同的数据集,没有任何丢失的数据,所以我不知道接下来要尝试什么。
编辑:
我尝试使用以下方法打印出imputed
完整数据集和缺少数据的每个项目的类型:
for item in imputed:
print type(item)
两者之间的区别在于,当没有调用平均替换和转置的版本时,numpy.ndarray
每一行都有一个,而被平均替换的版本每列都有一个。