日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python手动实现kmeans聚类和调用sklearn实现

發布時間:2025/3/20 python 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python手动实现kmeans聚类和调用sklearn实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 算法步驟

  • 隨機選取k個樣本點充當k個簇的中心點;
  • 計算所有樣本點與各個簇中心之間的距離,然后把樣本點劃入最近的簇中;
  • 根據簇中已有的樣本點,重新計算簇中心;
  • 重復步驟2和3,直到簇中心不再改變或改變很小。

2. 手動Python實現

import numpy as np import matplotlib.pyplot as plt from sklearn.datasets.samples_generator import make_blobsn_data = 400 n_cluster = 4 # generate training data X, y = make_blobs(n_samples=n_data, centers=n_cluster, cluster_std=0.60, random_state=0)# generate centers of clusters centers = np.random.rand(4, 2)*5EPOCH = 10 tol = 1e-5 for epoch in range(EPOCH):labels = np.zeros(n_data, dtype=np.int)# 計算每個點到簇中心的距離并分配labelfor i in range(n_data):distance = np.sum(np.square(X[i]-centers), axis=1)label = np.argmin(distance)labels[i] = label# 重新計算簇中心for i in range(n_cluster):indices = np.where(labels == i)[0] # 找出第i簇的樣本點的下標points = X[indices]centers[i, :] = np.mean(points, axis=0) # 更新第i簇的簇中心plt.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis') plt.show()

運行結果:(注:當簇中心初始化不好時,可能計算會有點錯誤)

3. 調用sklearn實現kmeans

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.datasets.samples_generator import make_blobs# Generate some data X, y = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)# kmeans clustering kmeans = KMeans(4, random_state=0) kmeans.fit(X) # 訓練模型 labels = kmeans.predict(X) # 預測分類 plt.scatter(X[:, 0], X[:, 1], c=labels, s=40, cmap='viridis') plt.show()

運行結果:

總結

以上是生活随笔為你收集整理的Python手动实现kmeans聚类和调用sklearn实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。