Объект 'k_means' не имеет атрибута 'k' - PullRequest
0 голосов
/ 10 июня 2019

Почему отображается ошибка 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 координаты были просто использованы на практике). Прошу прощения за форматирование кода в посте.

1 Ответ

0 голосов
/ 11 июня 2019

Вы, вероятно, называете старую версию своего кода.

Поскольку k_means - это не то же самое, что kmeans.

90% правильного недостаточно для программирования.Тебе нужно работать точнее.Скомпилированный язык может быть лучшим выбором для поиска ошибок раньше, а ноутбуки python могут быть плохим выбором для начинающих из-за скрытого состояния среды выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...