1
python newbie ici. J'essaye d'exécuter ce code mais j'obtiens le message d'erreur que l'objet n'est pas itérable. J'apprécierais quelques conseils sur ce que je fais mal. Merci.objet 'numpy.float64' n'est pas iterable - meanshift clustering
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
temp = pd.read_csv("file.csv", encoding='latin-1')
xy = temp.ix[:,2:6]
X = xy.values
X
array([[ nan, nan],
[ nan, nan],
[ 3.92144000e+00, nan],
[ 4.42382000e+00, nan],
[ 4.18931000e+00, 5.61562775e+02],
[ nan, nan],
[ 4.33025000e+00, 6.73123391e+02],
[ 6.43775000e+00, nan],
[ 3.12299000e+00, 2.21886627e+03],
[ nan, nan],
[ nan, nan]])
from itertools import cycle
colors = cycle('bgrcmykbgrcmykbgrcmykbgrcmyk')
class Mean_Shift:
def __init__(self, radius=4):
self.radius = radius
def fit(self, data):
centroids = {}
for i in range(len(data)):
centroids[i] = data[i]
while True:
new_centroids = []
for i in centroids:
in_bandwidth = []
centroid = centroids[i]
for featureset in data:
if np.linalg.norm(featureset-centroid) < self.radius:
in_bandwidth.append(featureset)
new_centroid = np.average(in_bandwidth, axis=0)
new_centroids.append(tuple(new_centroid))
uniques = sorted(list(set(new_centroids)))
prev_centroids = dict(centroids)
centroids = {}
for i in range(len(uniques)):
centroids[i] = np.array(uniques[i])
optimized = True
for i in centroids:
if not np.array_equal(centroids[i], prev_centroids[i]):
optimized = False
if not optimized:
break
if optimized:
break
self.centroids = centroids
def predict(self,data):
pass
clf = Mean_Shift()
clf.fit(X)
centroids = clf.centroids
plt.scatter(X[:,0],X[:,1],s=50)
for c in centroids:
plt.scatter(centroids[c][0], centroids[c][1], color = 'k', marker='*', s=150)
plt.show()
Voici le code d'erreur que je reçois:
/Users/carla/anaconda/lib/python3.5/site-packages/numpy/core/_methods.py:59: RuntimeWarning: Mean of empty slice.
warnings.warn("Mean of empty slice.", RuntimeWarning)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-11-e13932b6e72d> in <module>()
50
51 clf = Mean_Shift()
---> 52 clf.fit(X)
53
54 centroids = clf.centroids
<ipython-input-11-e13932b6e72d> in fit(self, data)
22
23 new_centroid = np.average(in_bandwidth, axis=0)
---> 24 new_centroids.append(tuple(new_centroid))
25
26 uniques = sorted(list(set(new_centroids)))
TypeError: 'numpy.float64' object is not iterable
ne peut pas être écart des moyennes utilisées avec des valeurs manquantes (SIAA). –