机器学习-聚类

目录

鸢尾花聚类

提取数据,转化格式

以前两个特征为例分析,对数据进行标准化

确定K值

手肘法

轮廓系数

总结:

类型转化

标准化

标准化是什么?

为什么要标准化?

手肘法

手肘法是什么?

[如何使用手肘法 ?](#如何使用手肘法 ?)

[计算不同 k 的 SSE](#计算不同 k 的 SSE)

[绘制SSE随 k 变化的曲线](#绘制SSE随 k 变化的曲线)

[找曲线拐点对应的 kk 即为最优聚类数](#找曲线拐点对应的 kk 即为最优聚类数)

轮廓系数

轮廓系数是什么?


鸢尾花聚类

提取数据,转化格式

python 复制代码
# 以下代码是导入这个数据集
# 注意data返回的是一个字典
from sklearn.datasets import load_iris
import numpy as np
import pandas as pd

data = load_iris()
data
python 复制代码
#输入的类型是字典,因此我们需要转换类型
x=data['data']
y=data['target']
iris=pd.DataFrame(x,columns=['sepal_length','sepal_width','petal_length','petal_width'])
iris['target']=y

以前两个特征为例分析,对数据进行标准化

python 复制代码
#提取数据(以前两列为例)
X = iris[['sepal_length','sepal_width']]
#标准化(因为特征之间可能有不同的量纲,但是每个特征都应该平等)
Xstd = (X - X.mean()) / X.std()

确定K值

手肘法

python 复制代码
from sklearn.cluster import KMeans
#使用手肘法确定K值
#存储所有样本的簇内距离平方求和(与簇内中心的欧式距离)
result_list = []
#假设我们的类别是2-11(没有1,因为只有一个簇的话没有意义)
for i in range(2,12):
    #新建聚类模型,递增我们的聚类中心个数
    model = KMeans(n_clusters = i,random_state = 1)
    #训练一模型
    model.fit(Xstd)
    #取出样本的簇内距离平方求和
    result_list.append(model.inertia_)
python 复制代码
#画手肘图
import matplotlib.pyplot as plt
xs = list(range(2,12))
plt.plot(xs, result_list)
plt.xticks(xs) 
plt.show()

显然在3的时候,斜率变缓了,说明sse是簇内各点到簇内中心的距离明显的斜率变缓,因此K=3

轮廓系数

python 复制代码
from sklearn import metrics
for i in range(2,12):
    #新建聚类模型,改变我们的聚类中心个数
    mode2 = KMeans(n_clusters = i,random_state = 1)
    #训练一下模型
    mode2.fit(Xstd)
    #获取kmeans聚类的结果
    labels = mode2.labels_
    #print(labels)
    #得到轮廓系数
    res = metrics.silhouette_score(Xstd,labels)
    print(i,'的轮廓系数:',res)

可见2和3的轮廓系数偏大,综合手肘图选择K=3

绘制散点图

python 复制代码
 #新建聚类数为3的聚类模型
model_final = KMeans(n_clusters = 3,random_state = 1)
#训练模型
model_final.fit(Xstd)
#获取kmeans聚类的结果
labels = model_final.labels_
iris['labels'] = labels
iris
python 复制代码
#聚类的结果散点图
for label in list(set(list(iris['labels']))):
    df = iris[iris['labels'] == label]
    plt.plot(df['Sepal.Length'],df['Sepal.Width'],'o',label = label)
plt.legend()
plt.show()
python 复制代码
#真实数据的结果散点图
for label in list(set(list(iris['target']))):
    df = iris[iris['target'] == label]
    plt.plot(df['sepal_length'],df['sepal_width'],'o',label = label)
plt.legend()
plt.show()

可以看出聚类的结果还是可以的

总结:

类型转化

因为原数据是字典类型,所以我们需要先转化类型为DataFrame

iris=pd.DataFrame(x,columns=['sepal_length','sepal_width','petal_length','petal_width'])

标准化

标准化是什么?

为什么要标准化?

手肘法

手肘法是什么?

如何使用手肘法 ?

计算不同 k 的 SSE

对 k从1到预设最大值(如10),分别运行K-Means并记录SSE。

绘制SSE随 k 变化的曲线
找曲线拐点对应的 kk 即为最优聚类数

轮廓系数

轮廓系数是什么?

衡量分离性和紧密度

在确定K值得时候,先用手肘法,然后再求轮廓系数,综合选取K

相关推荐
生命是有光的2 小时前
【机器学习】机器学习算法
人工智能·机器学习
Blossom.1182 小时前
把 AI 塞进「自行车码表」——基于 MEMS 的 3D 地形预测码表
人工智能·python·深度学习·opencv·机器学习·计算机视觉·3d
小鹿的工作手帐5 小时前
有鹿机器人:为城市描绘清洁新图景的智能使者
人工智能·科技·机器人
TechubNews6 小时前
香港数字资产交易市场蓬勃发展,监管与创新并驾齐驱
人工智能·区块链
DogDaoDao7 小时前
用PyTorch实现多类图像分类:从原理到实际操作
图像处理·人工智能·pytorch·python·深度学习·分类·图像分类
小和尚同志7 小时前
450 star 的神级提示词管理工具 AI-Gist,让提示词不再吃灰
人工智能·aigc
金井PRATHAMA8 小时前
大脑的藏宝图——神经科学如何为自然语言处理(NLP)的深度语义理解绘制新航线
人工智能·自然语言处理
Y|8 小时前
GBDT(Gradient Boosting Decision Tree,梯度提升决策树)总结梳理
决策树·机器学习·集成学习·推荐算法·boosting
大学生毕业题目8 小时前
毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·cnn·pyqt·电塔·危险物品
星期天要睡觉8 小时前
深度学习——卷积神经网络CNN(原理:基本结构流程、卷积层、池化层、全连接层等)
人工智能·深度学习·cnn