Я пытался использовать K-средства, чтобы найти выбросы. Я использовал метод локтя оптимального k и обнаружил, что это k = 3.
Я хотел найти расстояние между центроидом кластера и точками данных, и если это расстояние больше 2 * стандартное значение среднего расстояния до центорида, тогда его следует считать выбросом
Я изо всех сил пытаюсь реализовать часть, которая определяет, если 2 * стандартное расстояние меньше, чем расстояние между точками данных и Центроид, который рассматривается как выброс.
Я думал об определении столбца с помощью, расстояние = 2 * среднее расстояние - расстояние до центроида, и строки, которые имеют отрицательные значения для расстояния, могут быть отброшены.
Я покажу код, который у меня есть (который, я уверен, не верен), я также опубликую ошибку, которую я продолжаю получать для центроида.
Мой код:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.cluster import KMeans
from sklearn.metrics.pairwise import euclidean_distances
df = pd.read_csv('/content/drive/My Drive/Final After Simple Filtering.csv')
del df['MeasuredYawError']
del df['NacelleOrientation_Deg']
del df['Pitch_Deg']
KMEAN = KMeans(n_clusters=3).fit_predict(df)
Centroid = KMEAN.cluster_centers_
for (data,cind) in zip(df.get_values(),KMEAN):
distance = euclidean_distances(Centriod[cind],data)
Centroid_std= 2*Centoid.std()
Inliner= Centroid_std - distance
df=df[df['Inliner'] == Inliner>=0]
del df['inliner']
plt.scatter( df['WindSpeed_mps'], df['Power_kW'], label='Measurements',s=1)
plt.show()
Ошибка:
AttributeError Traceback (most recent call last)
<ipython-input-14-6b3df6c4c307> in <module>()
24 KMEAN = KMeans(n_clusters=3).fit_predict(df)
25
---> 26 Centroid = KMEAN.cluster_centers_
27
28 for (data,cind) in zip(df.get_values(),KMEAN):
AttributeError: 'numpy.ndarray' object has no attribute 'cluster_centers_'
Может ли кто-нибудь помочь мне в достижении вышеописанной цели?