欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

k-means 聚類算法與Python實現(xiàn)代碼

 更新時間:2020年06月01日 14:25:47   作者:FrancoLiang  
這篇文章主要介紹了k-means 聚類算法與Python實現(xiàn)代碼,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

k-means 聚類算法思想先隨機選擇k個聚類中心,把集合里的元素與最近的聚類中心聚為一類,得到一次聚類,再把每一個類的均值作為新的聚類中心重新聚類,迭代n次得到最終結果分步解析

一、初始化聚類中心

首先隨機選擇集合里的一個元素作為第一個聚類中心放入容器,選擇距離第一個聚類中心最遠的一個元素作為第二個聚類中心放入容器,第三、四、、、N個同理,為了優(yōu)化可以選擇距離開方做為評判標準

二、迭代聚類

依次把集合里的元素與距離最近的聚類中心分為一類,放到對應該聚類中心的新的容器,一次聚類完成后求出新容器里個類的均值,對該類對應的聚類中心進行更新,再次進行聚類操作,迭代n次得到理想的結果

三、可視化展示

利用 python 第三方庫中的可視化工具 matplotlib.pyplot 對聚類后的元素顯示(散點圖),方便查看結果

python代碼實現(xiàn)

import numpy as np
import matplotlib.pyplot as plt

# 兩點距離
def distance(e1, e2):
  return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2)

# 集合中心
def means(arr):
  return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])

# arr中距離a最遠的元素,用于初始化聚類中心
def farthest(k_arr, arr):
  f = [0, 0]
  max_d = 0
  for e in arr:
    d = 0
    for i in range(k_arr.__len__()):
      d = d + np.sqrt(distance(k_arr[i], e))
    if d > max_d:
      max_d = d
      f = e
  return f

# arr中距離a最近的元素,用于聚類
def closest(a, arr):
  c = arr[1]
  min_d = distance(a, arr[1])
  arr = arr[1:]
  for e in arr:
    d = distance(a, e)
    if d < min_d:
      min_d = d
      c = e
  return c


if __name__=="__main__":
  ## 生成二維隨機坐標(如果有數(shù)據(jù)集就更好)
  arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :]

  ## 初始化聚類中心和聚類容器
  m = 5
  r = np.random.randint(arr.__len__() - 1)
  k_arr = np.array([arr[r]])
  cla_arr = [[]]
  for i in range(m-1):
    k = farthest(k_arr, arr)
    k_arr = np.concatenate([k_arr, np.array([k])])
    cla_arr.append([])

  ## 迭代聚類
  n = 20
  cla_temp = cla_arr
  for i in range(n):  # 迭代n次
    for e in arr:  # 把集合里每一個元素聚到最近的類
      ki = 0    # 假定距離第一個中心最近
      min_d = distance(e, k_arr[ki])
      for j in range(1, k_arr.__len__()):
        if distance(e, k_arr[j]) < min_d:  # 找到更近的聚類中心
          min_d = distance(e, k_arr[j])
          ki = j
      cla_temp[ki].append(e)
    # 迭代更新聚類中心
    for k in range(k_arr.__len__()):
      if n - 1 == i:
        break
      k_arr[k] = means(cla_temp[k])
      cla_temp[k] = []

  ## 可視化展示
  col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']
  for i in range(m):
    plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])
    plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])
  plt.show()

結果展示

聚m=5類, 迭代n=20次

總結

到此這篇關于k-means 聚類算法與Python實現(xiàn)代碼的文章就介紹到這了,更多相關k-means 聚類算法python內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PyTorch梯度裁剪避免訓練loss nan的操作

    PyTorch梯度裁剪避免訓練loss nan的操作

    這篇文章主要介紹了PyTorch梯度裁剪避免訓練loss nan的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Pycharm搭建一個Django項目的方法步驟

    Pycharm搭建一個Django項目的方法步驟

    本文主要介紹了Pycharm搭建一個Django項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python能做什么

    Python能做什么

    在本篇文章里小編給大家整理的是關于Python作用領域等相關知識點,需要的朋友們可以參考下。
    2020-06-06
  • python3.6生成器yield用法實例分析

    python3.6生成器yield用法實例分析

    這篇文章主要介紹了python3.6生成器yield用法,結合實例形式分析了Python3.6中生成器yield的功能、用法及相關操作注意事項,需要的朋友可以參考下
    2019-08-08
  • 如何用Python徒手寫線性回歸

    如何用Python徒手寫線性回歸

    這篇文章主要介紹了如何用Python徒手寫線性回歸,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • 詳解TensorFlow2實現(xiàn)線性回歸

    詳解TensorFlow2實現(xiàn)線性回歸

    這篇文章主要介紹了TensorFlow2實現(xiàn)線性回歸的詳細解析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • python 利用PyAutoGUI快速構建自動化操作腳本

    python 利用PyAutoGUI快速構建自動化操作腳本

    我們經(jīng)常遇到需要進行大量重復操作的時候,比如:網(wǎng)頁上填表,對 web 版本 OA 進行操作,自動化測試或者給新系統(tǒng)首次添加數(shù)據(jù)等,今天就利用PyAutoGUI構建自動化操作腳本完成這些重復的需求
    2021-05-05
  • 關于opencv讀取和寫入路徑有漢字的處理方式

    關于opencv讀取和寫入路徑有漢字的處理方式

    這篇文章主要介紹了關于opencv讀取和寫入路徑有漢字的處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python3使用tesserocr識別字母數(shù)字驗證碼的實現(xiàn)

    Python3使用tesserocr識別字母數(shù)字驗證碼的實現(xiàn)

    這篇文章主要介紹了Python3使用tesserocr識別字母數(shù)字驗證碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • python如何輸出反斜杠

    python如何輸出反斜杠

    在本篇內(nèi)容中小編給大家整理了一篇關于python怎么輸出反斜杠的相關基礎文章,有興趣的朋友們可以學習參考下。
    2020-06-06

最新評論