山东济南网站建设公司,广西桂林为什么穷,深圳网站seo设计,网站后台密码如何破解聚类任务 聚类任务是一种无监督学习任务#xff0c;其目的是将一组数据点划分成若干个类别或簇#xff0c;使得同一个簇内的数据点之间的相似度尽可能高#xff0c;而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式#xff0c;发现异常点和离… 聚类任务 聚类任务是一种无监督学习任务其目的是将一组数据点划分成若干个类别或簇使得同一个簇内的数据点之间的相似度尽可能高而不同簇之间的相似度尽可能低。聚类算法可以帮助我们发现数据中的内在结构和模式发现异常点和离群值简化数据表示以及为进一步的分析提供基础。聚类任务在现实世界中有很多应用场景以下是其中的一些例子 市场细分聚类可以帮助将市场分成不同的细分市场以便更好地针对消费者需求制定营销策略。 图像分析聚类可以用于图像分析例如将相似的图像分组。 模式识别聚类可以用于发现数据中的模式和关系例如在医疗领域中可以使用聚类来发现疾病之间的关系。 推荐系统聚类可以用于推荐系统中以将用户分组并向他们推荐相似的产品或服务。 K-Means算法 K-Means是一种基于聚类的无监督机器学习算法其目的是将一组数据点分为k个不同的簇使得每个数据点与其所属簇的中心点也称质心的距离最小化。以下是K-Means的工作原理 初始化随机选择k个数据点作为初始质心。 分配对每个数据点,计算其与每个质心的距离并将其分配给距离最近的质心所代表的簇。 重新计算质心对于每个簇重新计算其质心位置即将该簇中所有数据点的坐标求平均。 重复执行第2,3步直到所有数据点的簇分配不再改变或达到预设的最大迭代次数为止。
下面是用K-Means算法完成聚类的简单Demo下面的demo中K设置为2.
from sklearn.cluster import KMeans
import numpy as np
# create some sample data
X np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# create a KMeans object with 2 clusters
kmeans KMeans(n_clusters2, random_state0)
# fit the KMeans object to the data
kmeans.fit(X)
# print the centroids of the two clusters
print(kmeans.cluster_centers_)
# predict the cluster labels for the data points
labels kmeans.predict(X)
# print the predicted cluster labels for the data points
print(labels)
执行结果cluster_centers_:[[1. 2.][4. 2.]], labels:[0 0 0 1 1 1]
上面的Demo中使用到KMeans函数KMeans函数是一种聚类分析算法用于将数据集分成多个簇。其主要作用是将相似的数据点分到同一个簇中同时将不同的数据点分到不同的簇中。KMeans算法通过迭代寻找最优的聚类结果可以对数据进行分组、分类和聚类分析。该函数包含多个输入参数各个参数含义如下 n_clusters聚类的数量簇的个数即K值。默认值为8。如果知道数据的实际类别数目可以将其设置为该数目否则可以通过手动设置不同的聚类数量来寻找最佳解。 init初始化质心的方法。默认为k-means表示使用一种改进的贪心算法来选取初始质心。也可以设置为随机选择初始质心的random方法。 max_iter最大迭代次数。默认值为300。当质心移动的距离小于阈值或达到最大迭代次数时算法停止。 tol质心移动的阈值。默认值为1e-4。当质心移动的距离小于该阈值时算法停止。 n_init随机初始化的次数。默认值为10。由于KMeans算法易受初始质心的影响因此可以通过多次运行算法并选择最好的结果来减少随机性的影响。 algorithmKMeans算法实现的方式。默认为auto表示由算法自动选择最佳的实现方式full表示使用标准的KMeans算法elkan表示使用改进的Elkan算法。对于大规模数据集建议使用elkan实现方式。 上面的Demo例子是对List数据进行聚类接下来看看如何使用K-means方法对足球队进行聚类下面的例子中读取了csv文件中的原始数据csv文件中存放了不同球队在三次比赛中的排名。
# coding: utf-8
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd
import numpy as np
# 输入数据
data pd.read_csv(./kmeans/data.csv, encodinggbk)
train_x data[[2019年国际排名, 2018世界杯, 2015亚洲杯]]
kmeans KMeans(n_clusters3)
# 规范化到[0,1]空间
min_max_scaler preprocessing.MinMaxScaler()
train_x min_max_scaler.fit_transform(train_x)
# kmeans算法
kmeans.fit(train_x)
predict_y kmeans.predict(train_x)
# 合并聚类结果插入到原数据中
result pd.concat((data, pd.DataFrame(predict_y)), axis1)
result.rename({0: u聚类}, axis1, inplaceTrue)
print(result)
采用K-means方法进行聚类假设K3聚类后的结果如下所示可以看到把球队分到了012三种不同类型中。 对图像进行聚类 上面的例子是对数据进行聚类下面看看如何对图像进行聚类下面的Demo例子中将weixin登陆的图标按不同像素下的颜色分成了2类。
# -*- coding: utf-8 -*-
# 使用K-means对图像进行聚类显示分割标识的可视化
import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans
from sklearn import preprocessing# 加载图像并对数据进行规范化
def load_data(filePath):# 读文件f open(filePath, rb)data []# 得到图像的像素值img image.open(f)# 得到图像尺寸width, height img.sizefor x in range(width):for y in range(height):# 得到点(x,y)的三个通道值c1, c2, c3 img.getpixel((x, y))data.append([c1, c2, c3])f.close()# 采用Min-Max规范化mm preprocessing.MinMaxScaler()data mm.fit_transform(data)return np.asarray(data), width, height# 加载图像得到规范化的结果img以及图像尺寸
img, width, height load_data(./kmeans/weixin.jpg)# 用K-Means对图像进行2聚类
kmeans KMeans(n_clusters3)
kmeans.fit(img)
label kmeans.predict(img)
# 将图像聚类结果转化成图像尺寸的矩阵
label label.reshape([width, height])
# 创建个新图像pic_mark用来保存图像聚类的结果并设置不同的灰度值
pic_mark image.new(L, (width, height))
for x in range(width):for y in range(height):# 根据类别设置图像灰度, 类别0 灰度值为255 类别1 灰度值为127pic_mark.putpixel((x, y), int(256 / (label[x][y] 1)) - 1)
pic_mark.save(./kmeans/weixin_mark1.jpg, JPEG)
下图中第一张图是原图第二张图是分类K2的结果。可以看到因为只进行了2种类型区分新生成的图片中纯白色是原图中深蓝色的代表黑灰色是原图中白亮色的代表。说明聚类正确。 图三是K16的分类结果当分类K16时和原图就很接近了K16的分类代码细节如下所示
# -*- coding: utf-8 -*-
# 使用K-means对图像进行聚类并显示聚类压缩后的图像
import numpy as np
import PIL.Image as image
from sklearn.cluster import KMeans
from sklearn import preprocessing
import matplotlib.image as mpimg# 加载图像并对数据进行规范化
def load_data(filePath):# 读文件f open(filePath, rb)data []# 得到图像的像素值img image.open(f)# 得到图像尺寸width, height img.sizefor x in range(width):for y in range(height):# 得到点(x,y)的三个通道值c1, c2, c3 img.getpixel((x, y))data.append([(c1 1) / 256.0, (c2 1) / 256.0, (c3 1) / 256.0])f.close()return np.asarray(data), width, height# 加载图像得到规范化的结果imgData以及图像尺寸
img, width, height load_data(./kmeans/weixin.jpg)
# 用K-Means对图像进行16聚类
kmeans KMeans(n_clusters16)
label kmeans.fit_predict(img)
# 将图像聚类结果转化成图像尺寸的矩阵
label label.reshape([width, height])
# 创建个新图像img用来保存图像聚类压缩后的结果
img image.new(RGB, (width, height))
for x in range(width):for y in range(height):c1 kmeans.cluster_centers_[label[x, y], 0]c2 kmeans.cluster_centers_[label[x, y], 1]c3 kmeans.cluster_centers_[label[x, y], 2]img.putpixel((x, y),(int(c1 * 256) - 1, int(c2 * 256) - 1, int(c3 * 256) - 1))
img.save(./kmeans/weixin_new.jpg) 上面介绍了如何使用K-Means算法完成文本类或者图片类聚类任务在实际项目中K-Means算法应用非常广泛主要应用在如下的业务场景中。 市场营销K-Means算法可以对市场消费者进行分类以便公司更好地了解他们的需求和行为制定更有效的营销策略。 图像处理K-Means算法可以用于对图像像素进行聚类以实现图像压缩和图像分割等功能。 自然语言处理K-Means算法可以用于对文本数据进行聚类以实现语义分析和文本分类等功能。 生物信息学K-Means算法可以用于对生物数据进行聚类以实现基因分类和蛋白质分类等功能。 金融领域K-Means算法可以用于对金融数据进行聚类以实现风险评估和资产管理等功能。
上面提到K-Means算法可以对图像像素进行聚类以实现图像压缩的功能下面的例子中就采用K-Means算法对图片像素进行聚类从而实现压缩的效果。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from PIL import Image# 加载图片
img Image.open(./kmeans/baby.jpg)
img_data np.array(img)# 将三维的图片数组变成二维的像素点数组
pixels img_data.reshape((img_data.shape[0] * img_data.shape[1], img_data.shape[2]))
# 使用K-Means聚类算法对像素点进行聚类
kmeans KMeans(n_clusters16, random_state0)
labels kmeans.fit_predict(pixels)# 将每个像素点替换为所属聚类的中心点
new_pixels kmeans.cluster_centers_[labels]# 将一维的像素点数组还原为图片数组的形式
new_img_data new_pixels.reshape((img_data.shape[0], img_data.shape[1], img_data.shape[2]))# 显示原始图片和压缩后的图片
fig, (ax1, ax2) plt.subplots(1, 2, figsize(12, 6))
fig.suptitle(Image Compression using K-Means Clustering)ax1.set_title(Original Image)
ax1.imshow(img_data)ax2.set_title(Compressed Image)
ax2.imshow(new_img_data.astype(uint8))plt.show()
原图和压缩后的图片结果如下所示