摘要:指定最大迭代次數的整數要求的準確性重復試驗算法次數,將會返回最好的一次結果該標志用于指定初始中心的采用方式。第一列對應于所有個人的高度,第二列對應于它們的權重。類似地,剩余的行對應于其他人的高度和重量。
K-Means Clustering in OpenCV
cv2.kmeans(data, K, bestLabels, criteria, attempts, flags[, centers]) -> retval, bestLabels, centers
data: np.float32數據類型,每個功能應該放在一個列中
nclusters(K):集群數
bestLabels:預設的分類標簽:沒有的話 None
criteria:它是迭代終止標準,滿足此條件時,算法迭代停止,實際上,它應該是3個參數的元組。它們是(type,max_iter,epsilon)
type又有兩種選擇:
cv2.TERM_CRITERIA_EPS - 如果達到指定的精度epsilon,則停止算法迭代。
cv.TERM_CRITERIA_MAX_ITER - 在指定的迭代次數max_iter之后停止算法。
cv.TERM_CRITERIA_EPS+ cv.TERM_CRITERIA_MAX_ITER - 當滿足上述任何條件時停止迭代。
max_iter - 指定最大迭代次數的整數
epsilon - 要求的準確性
attempts:重復試驗kmeans算法次數,將會返回最好的一次結果
flags:該標志用于指定初始中心的采用方式。通常會使用兩個標志:cv2.KMEANS_PP_CENTERS和cv2.KMEANS_RANDOM_CENTERS
retval:它是從每個點到它們相應中心的平方距離之和
bestLabels:這是標簽數組
centers:這是一組聚類中心
Data with Only One Feature假設只有一個特征的數據,即一維的,我們可以采用我們的T恤問題,只使用人的高度來決定T恤的大小。
因此,我們首先創建數據并在Matplotlib中繪制它
import numpy as np import cv2 import matplotlib.pyplot as plt x = np.random.randint(25,100,25) y = np.random.randint(175,255,25) z = np.hstack((x,y)) z = z.reshape((50,1)) z = np.float32(z) plt.hist(z,256,[0,256]),plt.show()
現在我們應用KMeans功能。我們的標準是,每當運行10次迭代算法或達到epsilon = 1.0的精度時,停止算法并返回答案.
# Define criteria = ( type, max_iter = 10 , epsilon = 1.0 ) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) # Set flags (Just to avoid line break in the code) flags = cv2.KMEANS_RANDOM_CENTERS # Apply KMeans compactness,labels,centers = cv2.kmeans(z,2,None,criteria,10,flags) A = z[labels==0] B = z[labels==1] # Now plot "A" in red, "B" in blue, "centers" in yellow plt.hist(A,256,[0,256],color = "r") plt.hist(B,256,[0,256],color = "b") plt.hist(centers,32,[0,256],color = "y") plt.show()Data with Multiple Features
我們設置大小為50x2的測試數據,其高度和權重為50人。 第一列對應于所有50個人的高度,第二列對應于它們的權重。 第一行包含兩個元素,其中第一行是第一人的高度,第二行是他的重量。 類似地,剩余的行對應于其他人的高度和重量。
import numpy as np import cv2 import matplotlib.pyplot as plt X = np.random.randint(25,50,(25,2)) Y = np.random.randint(60,85,(25,2)) Z = np.vstack((X,Y)) # convert to np.float32 Z = np.float32(Z) # define criteria and apply kmeans() criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) ret,label,center=cv2.kmeans(Z,2,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS) # Now separate the data, Note the flatten() A = Z[label.ravel()==0] B = Z[label.ravel()==1] # Plot the data plt.scatter(A[:,0],A[:,1]) plt.scatter(B[:,0],B[:,1],c = "r") plt.scatter(center[:,0],center[:,1],s = 80,c = "y", marker = "s") plt.xlabel("Height"),plt.ylabel("Weight") plt.show()Color Quantization
顏色量化是減少圖像中顏色數量的過程,這樣做的一個原因是減少內存,某些設備可能具有限制,使得它只能產生有限數量的顏色,在那些情況下,也執行顏色量化,這里我們使用k均值聚類進行顏色量化。
import numpy as np import cv2 import matplotlib.pyplot as plt img = cv2.imread("img.jpg") Z = img.reshape((-1,3)) # convert to np.float32 Z = np.float32(Z) # define criteria, number of clusters(K) and apply kmeans() criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) K = 8 ret,label,center=cv2.kmeans(Z,K,None,criteria,10,cv2.KMEANS_RANDOM_CENTERS) # Now convert back into uint8, and make original image center = np.uint8(center) res = center[label.flatten()] res2 = res.reshape((img.shape)) cv2.imshow("res2",res2) cv2.waitKey(0) cv2.destroyAllWindows()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42224.html
摘要:算法的關鍵在于初始中心的選擇和距離公式。并行設置的實現算法,有其中表示用方式實現雖然有很多參數,但是都已經給出了默認值。 K-means算法簡介 K-means是機器學習中一個比較常用的算法,屬于無監督學習算法,其常被用于數據的聚類,只需為它指定簇的數量即可自動將數據聚合到多類中,相同簇中的數據相似度較高,不同簇中數據相似度較低。 K-menas的優缺點: 優點: 原理簡單 速度快 ...
摘要:摘要前文數據挖掘與機器學習技術入門實戰與大家分享了分類算法,在本文中將為大家介紹聚類算法和關聯分析問題。比如,聚類算法可以實現公司客戶價值自動劃分,網頁自動歸類等。 摘要:前文數據挖掘與機器學習技術入門實戰與大家分享了分類算法,在本文中將為大家介紹聚類算法和關聯分析問題。分類算法與聚類到底有何區別?聚類方法應在怎樣的場景下使用?如何使用關聯分析算法解決個性化推薦問題?本文就為大家揭曉答...
閱讀 2505·2023-04-25 19:31
閱讀 2239·2021-11-04 16:11
閱讀 2805·2021-10-08 10:05
閱讀 1515·2021-09-30 09:48
閱讀 2315·2019-08-30 15:56
閱讀 2406·2019-08-30 15:56
閱讀 2174·2019-08-30 15:53
閱讀 2268·2019-08-30 15:44