Почему отображается ошибка AttributeError: объект 'k_means' не имеет атрибута 'k'? Я полагал, что строка self.k = k (строка 15) инициализирует атрибут k.
Это онлайн-пример, которому я следовал, я использую колабораторию Google в Python 3.
import matplotlib.pyplot as plt
from matplotlib import style
style.use('ggplot')
import numpy as np
x = np.array([[1,2],[3,4],[1,3]])
plt.scatter(x[:,0],x[:,1],s=150)
plt.show()
color = 10*["g.","r.","c.","b.","k."]
class kmeans():
def __init__(self, k = 2, tol = .001, max_iteration = 200):
self.k = k
self.tol = tol
self.iter = max_iteration
def fit(self,data):
self.centroids = {}
for i in range(self.k):
self.centroids[i] = data[i]
for i in range(self.max_iteration):
self.classifications = {}
for i in range(self.k):
self.classifications[i] = []
for featureset in data:
distances = [np.linalg.norm(featureset-self.centriods[centroid]) for centroid in self.centroids]
classification = distances.index(min(distances))
self.classifications[classification].append(featureset)
previous_centroids = dict(self.centroids)
for classifications in self.classificaitons:
self.centroids[classifications] = np.average(self.classificaitons[classifications], axis=0)
optimixed = True
for c in self.centroids:
origional_centroid = previous_centroids[c]
current_centroid = self.centroids[c]
if np.sum((current_centroid - origional_centroid)/origional_centroid*100.0) > self.tol:
optimized = False
if optimized:
break
конец посадки
def predict(self,data):
distances = [np.linalg.norm(featureset-self.centriods[centroid]) for centroid in self.centroids]
classification = distances.index(min(distances))
return classification
clf = k_means ()
clf.fit (х)
Я ожидаю, что результат вывода покажет несколько кластеров координат в строке 6, когда я вызываю kmeans, но я не могу обойти эту ошибку. (Я планирую расширить набор данных, как только эта проблема будет решена, эти 3 координаты были просто использованы на практике). Прошу прощения за форматирование кода в посте.