私は5つの列を含むデータフレームを持っています。私は3つの変数X
,Y
とZ
の点をクラスタリングし、kmeansクラスタリングの損失関数を見つけようとしています。次のコードはそれを処理しますが、160,000
行の私の実際のデータフレームに対してこれを実行すると、これまで以上に時間がかかります!私はそれがずっと速くできると思う。パンダのデータフレームにおけるkmeansの損失関数の計算
PS:KMeans
モジュールのsklearn
には、私自身のコードを書いている理由で損失機能がないようです。
from sklearn.cluster import KMeans
import numpy as np
df = pd.DataFrame(np.random.randn(1000, 5), columns=list('XYZVW'))
kmeans = KMeans(n_clusters = 6, random_state = 0).fit(df[['X','Y', 'Z']].values)
df['Cluster'] = kmeans.labels_
loss = 0.0
for i in range(df.shape[0]):
cluster = int(df.loc[i, "Cluster"])
a = np.array(df.loc[i,['X','Y', 'Z']])
b = kmeans.cluster_centers_[cluster]
loss += np.linalg.norm(a-b)
print(loss)
forループなどのPythonコードは使用しないでください。通訳は遅いです。操作をベクトル化する! –