ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类

简介: ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类

输出结果

image.png

核心代码


#!/usr/bin/python

# -*- coding:utf-8 -*-

import numpy as np

#ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类

def kmeans(X, k, maxIt):  

 

   numPoints, numDim = X.shape

 

   dataSet = np.zeros((numPoints, numDim + 1))

   dataSet[:, :-1] = X  

 

   centroids = dataSet[np.random.randint(numPoints, size = k), :]  

   #centroids = dataSet[0:2, :]        

   #Randomly assign labels to initial centorid给初始中心随机分配标签

   centroids[:, -1] = range(1, k +1)  

 

   iterations = 0      

   oldCentroids = None  

 

   # Run the main k-means algorithm

   while not shouldStop(oldCentroids, centroids, iterations, maxIt):  

       print ("iteration: \n", iterations)

       print ("dataSet: \n", dataSet)      

       print ("centroids: \n", centroids)  

       # Save old centroids for convergence test. Book keeping.

       oldCentroids = np.copy(centroids)  

       iterations += 1                    

     

       # Assign labels to each datapoint based on centroids

       updateLabels(dataSet, centroids)    

     

       # Assign centroids based on datapoint labels

       centroids = getCentroids(dataSet, k)

     

   # We can get the labels too by calling getLabels(dataSet, centroids)

   return dataSet

# Function: Should Stop

# -------------

# Returns True or False if k-means is done. K-means terminates either

# because it has run a maximum number of iterations OR the centroids

# stop changing.

def shouldStop(oldCentroids, centroids, iterations, maxIt):  

   if iterations > maxIt:  

       return True

   return np.array_equal(oldCentroids, centroids)  

# Function: Get Labels

# -------------

# Update a label for each piece of data in the dataset.

def updateLabels(dataSet, centroids):  

   # For each element in the dataset, chose the closest centroid.

   # Make that centroid the element's label.

   numPoints, numDim = dataSet.shape  

   for i in range(0, numPoints):      

       dataSet[i, -1] = getLabelFromClosestCentroid(dataSet[i, :-1], centroids)  

 

 

def getLabelFromClosestCentroid(dataSetRow, centroids):

   label = centroids[0, -1];                                  

   minDist = np.linalg.norm(dataSetRow - centroids[0, :-1])  

   for i in range(1 , centroids.shape[0]):  

       dist = np.linalg.norm(dataSetRow - centroids[i, :-1])

       if dist < minDist:

           minDist = dist  

           label = centroids[i, -1]

   print ("minDist:", minDist)

   return label

 

     

 

# Function: Get Centroids

# -------------

# Returns k random centroids, each of dimension n.

def getCentroids(dataSet, k):    

   # Each centroid is the geometric mean of the points that

   # have that centroid's label. Important: If a centroid is empty (no points have

   # that centroid's label) you should randomly re-initialize it.

   result = np.zeros((k, dataSet.shape[1]))

   for i in range(1, k + 1):

       oneCluster = dataSet[dataSet[:, -1] == i, :-1]  

       result[i - 1, :-1] = np.mean(oneCluster, axis = 0)

       result[i - 1, -1] = i

 

x1 = np.array([1, 1])

x2 = np.array([2, 1])

x3 = np.array([4, 3])

x4 = np.array([5, 4])

testX = np.vstack((x1, x2, x3, x4))  

result = kmeans(testX, 2, 10)  

print ("final result:")

print (result)


相关文章
|
8月前
|
XML 存储 数据处理
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
|
6月前
|
机器学习/深度学习 计算机视觉 Python
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
`GridSearchCV` 是一种穷举搜索方法,它会对指定的参数网格中的每一个参数组合进行交叉验证,并返回最优的参数组合。
|
8月前
|
数据可视化 算法 数据挖掘
Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化
Python用KShape对时间序列进行聚类和肘方法确定最优聚类数k可视化
|
8月前
|
机器学习/深度学习 Python
深入了解CatBoost:自定义目标函数与度量的高级教程
深入了解CatBoost:自定义目标函数与度量的高级教程【2月更文挑战第18天】
363 1
|
8月前
|
机器学习/深度学习 JavaScript 前端开发
机器学习 - [源码实现决策树小专题]决策树中子数据集的划分(不允许调用sklearn等库的源代码实现)
机器学习 - [源码实现决策树小专题]决策树中子数据集的划分(不允许调用sklearn等库的源代码实现)
64 0
|
8月前
|
机器学习/深度学习 算法 Python
【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)
【Python机器学习】Sklearn库中Kmeans类、超参数K值确定、特征归一化的讲解(图文解释)
437 0
|
机器学习/深度学习 算法 数据挖掘
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
书写自动智慧文本分类器的开发与应用:支持多分类、多标签分类、多层级分类和Kmeans聚类
|
机器学习/深度学习 资源调度 PyTorch
PyTorch实现随机傅里叶特征映射的示例代码
这里我们定义了一个名为RFFeatureMap的类,它继承自PyTorch的nn.Module类。该类接受输入维度input_dim、输出维度output_dim和高斯核参数sigma作为参数。在初始化函数中,我们生成了随机正弦和余弦函数的系数omega和随机偏移量b,并将它们保存在该类的实例变量中。 在前向函数中,我们首先将输入x转换为形状为(batch_size, input_dim)的张量。然后我们通过点乘x和omega的转置,加上偏移量b,并应用余弦函数,计算出特征映射z。最后我们返回特征映射z。
401 0
|
机器学习/深度学习 数据可视化
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名。
【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
|
机器学习/深度学习 算法 Python
TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)—daiding
TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)—daiding

热门文章

最新文章