1. 程式人生 > >【Python】k-means演算法實現

【Python】k-means演算法實現

# -*- coding: utf-8 -*-
import  math
import  random
import matplotlib.pyplot as plt
from matplotlib import colors as m_colors
#生成樣本點
def gen_random_sample(n_feat,lower,upper):
    sample=[random.uniform(lower,upper) for _ in range(n_feat)]
    return sample
#樣本個數
n_samples=1000
#特徵個數(特徵維度)
n_feat=2
#特徵數值範圍
lower=0 upper=200 #聚類個數 n_cluster=3 #聚類樣本點 samples=[gen_random_sample(n_feat,lower,upper) for _ in range(n_samples)] #收斂閾值 cutoff=0.1 #聚類中心 cluster=[samples[random.randint(0,n_samples)] for _ in range(n_cluster)] #重新計算聚類中心: new_cluster=[] #計算兩點間距離 def cal_distance(a,b): s_sum=0 for i in range(n_feat): s_sum+=pow
(a[i]-b[i],2) dis=math.sqrt(s_sum) return dis cutoff_dis=[1 for _ in cluster] print(max(cutoff_dis)) #迭代次數 n_loop=1 while(max(cutoff_dis)> cutoff ): # 樣本點圖 #for i_sample in samples: #x_sample.append(i_sample[0]) # y_sample.append(i_sample[1]) #plt.scatter(x_sample, y_sample)
# 畫出聚類中心 #for cluster_point in cluster: #plt.scatter(cluster_point[0], cluster_point[1], c='red') #plt.title('samples&clusters(iteration:{})'.format(n_loop)) #plt.show() #分類lists lists=[[]for _ in range(n_cluster)] #對樣本遍歷進行分類 for sample_point in samples: dis=[cal_distance(sample_point,cluster_point) for cluster_point in cluster] min_dis=min(dis) index_cluster=dis.index(min_dis) lists[index_cluster].append(sample_point) #print(dis) print(lists) #設定不同聚類點的顏色 color_names=list(m_colors.cnames) for i in lists: color_=[color_names[lists.index(i)]]*len(i) x=[] y=[] for classify_point in i: x.append(classify_point[0]) y.append(classify_point[1]) plt.scatter(x,y,c=color_) #重新計算聚集點中心 new_cluster.append([sum(x)/len(x),sum(y)/len(y)]) #對新產生的聚類中心作圖 for cluster_point in new_cluster: plt.scatter(cluster_point[0], cluster_point[1], c='red') plt.title('output of k_means(iteration:{})'.format(n_loop)) plt.show() print(len(cluster),len(new_cluster)) #計算新舊聚類中心的偏移距離 for i in range(len(cluster)): print(i) cutoff_dis[i]=cal_distance(cluster[i],new_cluster[i]) print('cluster',cluster) print('new_cluster:',new_cluster) print('cutoff_dis:',cutoff_dis) #對聚類中心重新賦值 for i in range(len(cluster)): cluster[i]=new_cluster[i] new_cluster.clear() n_loop+=1

迭代16次,輸出結果圖:

相關推薦

Pythonk-means演算法實現

# -*- coding: utf-8 -*- import math import random import matplotlib.pyplot as plt from matplotlib import colors as m_colors #生成樣本點 def g

JavaK-means演算法Java實現以及影象分割(續)

import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class

Python曲線簡化演算法實現

Overview 曲線簡化演算法通常應用於運動捕捉資料的關鍵幀提取,在此基礎上還演化出了更多的演算法 本文對基本的曲線簡化演算法進行了程式碼實現,以關鍵幀個數或線性重建誤差作為迭代終止條件 其中,計算點i到直線n1-n2的距離公式如下[1]: 更多演算法及分析可參考[2]

機器學習K-Means演算法的原理流程、程式碼實現及優缺點

分類是根據樣本某些屬性或某類特徵(可以融合多類特徵),把樣本型別歸為已確定的某一類別中。機器學習中常見的分類演算法有:SVM(支援向量機)、KNN(最鄰近法)、Decision Tree(決策樹分類法)

python 機器學習K-means演算法實現

\編譯器:pycharm 1.匯入K-means相關包 這個包匯入有點坑,有許多依賴包需要匯入,推薦下載Anaconda後,在pycharm匯入Anaconda中的python,在下載sklearn包,就可以開心的敲程式碼了~!  2正式開始: from

程式碼K-means聚類詳解及實現 (Matlab聚類工具箱和自己實現

一. 聚類 先說說聚類。顧名思義,就是有一團資料,根據某種準則把相似的資料分別聚在一起,形成不同的類別(每個類別稱為一簇)。聚類是一種無監督的演算法。所謂無監督就是說,雖然聚類把物體分類到了不同的簇,只能知道哪些資料是屬於同一類的,至於這一類資料到底是什麼,並不知道。

YOLOV2K-means 計算 anchor boxes

目錄 k-means原理 問題 演算法概要 k-means演算法缺點 k-means++演算法 k-means 計算 anchor boxes 距離公式 程式碼實現 參考 k-means原理 K-means演算法是很典型的基於距離的聚類演算法,採用距離

PythonSorted排序演算法

Describe Answer from operator import itemgetter students = [('Bob', 75), ('Adam', 92), ('Bart', 6

Python 簡單網路爬蟲實現

引言 網路爬蟲(英語:web crawler),也叫網路蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。 --維基百科 網路爬蟲可以將自己所訪問的頁面儲存下來,以便搜尋引擎事後生成索引供使用者搜尋。 一般有兩個步驟:1.獲取網頁內

python 使用K-Means演算法對資料進行聚類

K-Means是聚類演算法的一種,以距離來判斷資料點間的相似度並對資料進行聚類。前面的文章中我們介紹過K-Means聚類演算法的原理及實現。本篇文章使用scikit-learn庫對資料進行聚類分析。準備工作開始之前先匯入要使用的各種庫檔案,首先是scikit-learn庫,然

Python進度條的實現

方式一 #!/usr/bin/env python from __future__ import division import sys,time j = '#' for i in range(1,61): j += '#' sys.stdout.write(str(int((i

k-means演算法實現影象顏色聚類

#include<stdio.h> #include <cstdio> #include<string> #include<math.h> #include<stdlib.h>

Python設計一個演算法,計算出n階乘中尾部零的個數

1.常見的思路:先求N的階乘,再計算零的個數。 (但是,時間消耗太大)    def trailingZeros( n):         S = 1         for i in range(1,n+1):             S = S * i        

作業系統小型銀行家演算法實現

一.銀行家演算法簡介:      銀行家演算法是一種避免死鎖的演算法。在避免死鎖方法中允許程序動態地申請資源,但系統在進行資源分配之前,應先j檢查並計算此次分配資源的安全性,若分配不恰當會導致導致系統進入不安全狀態,則等待.如果處於安全狀態則分配。     輸入一些資源

Python聚類演算法應用 -- 廣告投放效果的離線評估

簡要說明 同樣是在實習期間做的,由於公司去年在廣告的投放上高達10億!!(黑臉=_=!),其中SEM的投放佔比不小,投了四個:baidu、360、搜狗和神馬,其中前三個是WAP和PC端都有投,神馬只投了WAP端。所以我想對歷史投放效果資料進行一下挖掘分析,看是

機器學習演算法-python實現K-means無監督學習實現分類

''' @author: hakuri ''' from numpy import * import matplotlib.pyplot as plt def loadDataSet(fileName): #general function to parse tab -delimited float

OpenCV學習筆記 020K-Means聚類演算法介紹及實現

一、K-Means演算法介紹 在資料探勘中,K-Means演算法是一種cluster analysis的演算法,其主要是來計算資料聚集的演算法,主要通過不斷地取離種子點最近均值的演算法。 問題 K-Means演算法主要解決的問題如下圖所示。我們可以看到,在圖的左邊有一些點,

機器學習演算法原理詳細推導與實現(六):k-means演算法

【機器學習】演算法原理詳細推導與實現(六):k-means演算法 之前幾個章節都是介紹有監督學習,這個章節介紹無監督學習,這是一個被稱為k-means的聚類演算法,也叫做k均值聚類演算法。 聚類演算法 在講監督學習的時候,通常會畫這樣一張圖: 這時候需要用logistic迴歸或者SVM將這些資料分成正負兩

PythonPython實現常用演算法排序

今天去面試,給了筆試題讓寫快速排序,記不清定義了就照著記憶中的演算法寫了程式碼。結果面試的時候,說我寫的不是快排,我回答說記不清了。就問還記得哪個排序演算法,我回答說還記得氣泡排序,就讓現場寫氣泡排序。 a_list = [1,3,4,5,2,7,3,1] list_lens = len

分類KNN分類演算法Python實現

KNN稱為K最近鄰。對於待分類資料,它先計算出與其最相近的K個的樣本,然後判斷這K個樣本中最多的類標籤,並將待分類資料標記為這個最多的類標籤。 python樣例程式碼: import numpy as np from sklearn.neighbors import KN