机器学习——聚类算法

简介: 机器学习——聚类算法

下面是一个例子,根据啤酒中配料含量的不同进行聚类,以划分出不同品牌的啤酒


1、导入数据并处理


import pandas as pd
beer = pd.read_csv('data.txt', sep=' ')
beer

image.png

image.png

X = beer[["calories","sodium","alcohol","cost"]]
# 当需要用K-means来做聚类时导入KMeans函数
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3).fit(X)
km2 = KMeans(n_clusters=2).fit(X)
# 直接在数据中添加cluster和cluster2两列
beer['cluster'] = km.labels_
beer['cluster2'] = km2.labels_
beer.sort_values('cluster')

image.png

image.png


2、计算划分后各维均值


# 下面的错误的写法,plotting已经被提了出来
## from pandas.tools.plotting import scatter_matrix
from pandas.plotting import scatter_matrix
%matplotlib inline
cluster_centers = km.cluster_centers_
cluster_centers_2 = km2.cluster_centers_
beer.groupby("cluster").mean()

image.png

beer.groupby("cluster2").mean()

image.png


3、绘图分析


下面是calories和Alcohol两个维度上的聚类结果


# 设置中心点
centers = beer.groupby("cluster").mean().reset_index()
# 绘制3堆的聚类效果
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 14
# 设置四种颜色
import numpy as np
colors = np.array(['red', 'green', 'blue', 'yellow'])
# 绘图
plt.scatter(beer["calories"], beer["calories"],c=colors[beer["cluster"]])
plt.scatter(centers.calories, centers.alcohol, linewidths=3, marker='+', s=300, c='black')
plt.xlabel("Calories")
plt.ylabel("Alcohol")
Text(0, 0.5, 'Alcohol')

image.png


把聚类后两两特征的散点图分别进行绘制


  • K = 3时的结果
scatter_matrix(beer[["calories","sodium","alcohol","cost"]],s=100, alpha=1, c=colors[beer["cluster"]], figsize=(10,10))
plt.suptitle("With 3 centroids initialized")
Text(0.5, 0.98, 'With 3 centroids initialized')

image.png


  • K = 2时的结果
scatter_matrix(beer[["calories","sodium","alcohol","cost"]],s=100, alpha=1, c=colors[beer["cluster2"]], figsize=(10,10))
plt.suptitle("With 2 centroids initialized")
Text(0.5, 0.98, 'With 2 centroids initialized')

image.png


4、轮廓系数分析


由于以上的k = 2或者3时的区别不大,可以引入轮廓系数进行分析,这是评价聚类效果好坏的方式。

image.png

  • 计算样本i到同簇其他样本的平均距离ai。ai 越小,说明样本i越应该被聚类到该簇。将ai 称为样本i的簇内不相似度。
  • 计算样本i到其他某簇Cj 的所有样本的平均距离bij,称为样本i与簇Cj 的不相似度。定义为样本i的簇间不相似度:bi =min{bi1, bi2, …, bik}
  • si接近1,则说明样本i聚类合理
  • si接近-1,则说明样本i更应该分类到另外的簇
  • 若si 近似为0,则说明样本i在两个簇的边界上。
from sklearn import metrics
score_scaled = metrics.silhouette_score(X,beer.scaled_cluster)
score = metrics.silhouette_score(X,beer.cluster)
print(score_scaled, score)
scores = []
for k in range(2,20):
    labels = KMeans(n_clusters=k).fit(X).labels_
    score = metrics.silhouette_score(X, labels)
    scores.append(score)
plt.plot(list(range(2,20)), scores)
plt.xlabel("Number of Clusters Initialized")
plt.ylabel("Sihouette Score")
0.6731775046455796 0.6731775046455796
Text(0, 0.5, 'Sihouette Score')

image.png


从图中可以看出,当n_clusters = 2时,轮廓系数更接近与1,更合适。但是在聚类算法中,评估方法只作为参考,真正数据集来时还是具体分析一番。


在使用sklearn工具包进行建模时,换一个算法非常便捷,只需要更改函数即可。。


from pandas.plotting import scatter_matrix
# 改为DBSCAN算法
from sklearn.cluster import DBSCAN
db = DBSCAN(eps=10, min_samples=2).fit(X)
labels = db.labels_
beer['cluster_db'] = labels
beer.sort_values('cluster_db')
beer.groupby('cluster_db').mean()
scatter_matrix(X, c=colors[beer.cluster_db], figsize=(10,10), s=100)
array([[<matplotlib.axes._subplots.AxesSubplot object at 0x00000199EA98E0C8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EABFFA08>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EA9D49C8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAA0E408>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAA46DC8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAA807C8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAAB9148>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAAEDFC8>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAAF7BC8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAB31D88>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAB9B388>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAD933C8>],
       [<matplotlib.axes._subplots.AxesSubplot object at 0x00000199EADCD4C8>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAE06608>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAE3F708>,
        <matplotlib.axes._subplots.AxesSubplot object at 0x00000199EAE79808>]],
      dtype=object)

image.png


目录
相关文章
|
16天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
11天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
40 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
1月前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
59 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
21天前
|
机器学习/深度学习 人工智能 算法
探索机器学习中的决策树算法
【10月更文挑战第29天】本文将深入浅出地介绍决策树算法,一种在机器学习中广泛使用的分类和回归方法。我们将从基础概念出发,逐步深入到算法的实际应用,最后通过一个代码示例来直观展示如何利用决策树解决实际问题。无论你是机器学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供有价值的见解和指导。
|
1月前
|
机器学习/深度学习 算法 数据可视化
机器学习的核心功能:分类、回归、聚类与降维
机器学习领域的基本功能类型通常按照学习模式、预测目标和算法适用性来分类。这些类型包括监督学习、无监督学习、半监督学习和强化学习。
41 0
|
1月前
|
机器学习/深度学习 算法 数据处理
EM算法对人脸数据降维(机器学习作业06)
本文介绍了使用EM算法对人脸数据进行降维的机器学习作业。首先通过加载ORL人脸数据库,然后分别应用SVD_PCA、MLE_PCA及EM_PCA三种方法实现数据降维,并输出降维后的数据形状。此作业展示了不同PCA变种在人脸数据处理中的应用效果。
35 0
|
1月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
8天前
|
算法 数据安全/隐私保护 索引
OFDM系统PAPR算法的MATLAB仿真,对比SLM,PTS以及CAF,对比不同傅里叶变换长度
本项目展示了在MATLAB 2022a环境下,通过选择映射(SLM)与相位截断星座图(PTS)技术有效降低OFDM系统中PAPR的算法实现。包括无水印的算法运行效果预览、核心程序及详尽的中文注释,附带操作步骤视频,适合研究与教学使用。
|
17天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。
下一篇
无影云桌面