K-Means不同含量果汁饮料的聚类(聚类算法)

实验内容

某企业通过采集企业自身流水线生产的一种果汁饮料含量的数据集,来实现K-Means算法。通过聚类以判断该果汁饮料在一定标准含量偏差下的生产质量状况,对该饮料进行类别判定。

数据集:

该数据集共有样本59个,变量2个,包括juice(该饮料的果汁含量偏差)、sweet(该饮料的糖分含量偏差),单位均为mg/ml。
所有特征变量都为与标准含量相比的偏差,该数据集没有目标类别标签变量。

数据集展示图:
在这里插入图片描述

实验要求

1.加载数据集,读取数据,探索数据。(数据集路径:…/beverage.csv)
2.样本数据转化(可将pandasframe格式的数据转化为数组形式),并进行可视化(绘制散点图),观察数据的分布情况,从而可以得出k的几种可能取值。
3.针对每一种k的取值,进行如下操作:
(1)进行K-Means算法模型的配置、训练。
(2)输出相关聚类结果,并评估聚类效果。
这里可采用CH指标来对聚类有效性进行评估。在最后用每个k取值时评估的CH值进行对比,可得出k取什么值时,聚类效果更优。
注:这里缺乏外部类别信息,故采用内部准则评价指标(CH)来评估。 (metrics.calinski_harabaz_score())
(3)输出各类簇标签值、各类簇中心,从而判断每类的果汁含量与糖分含量情况。
(4)聚类结果及其各类簇中心点的可视化(散点图),从而观察各类簇分布情况。(不同的类表明不同果汁饮料的果汁、糖分含量的偏差情况。)

参考思路:设置k的取值范围;对不同取值k进行训;计算各对象离各类簇中心的欧氏距离,生成距离表;提取每个对象到其类簇中心的距离,并相加;依次存入距离结果;绘制不同看、值对应的总距离值折线图。

实验代码

#导入包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.cluster import KMeans


#1.加载数据集,读取数据,探索数据。(数据集路径:data/data76878/4_beverage.csv)
data=pd.read_csv("E:/python/SpyderCode/work/4_beverage.csv")
data.info()
print(data.columns)
print(data.head())

#2.样本数据转化(可将pandasframe格式的数据转化为数组形式),并进行可视化(绘制散点图),
#观察数据的分布情况,从而可以得出k的几种可能取值。
df=pd.DataFrame(data)
X=df.iloc[:,0:1]
y=df.iloc[:,1:2]
df=np.array(df)
X=np.array(X)
y=np.array(y)

plt.figure(figsize=(10,6))
plt.scatter(X,y)
plt.xlabel(u"juice")
plt.ylabel(u"sweet")
plt.title(u"The relation juice and sweet")
plt.show()

#数据划分
#train_X,test_X,train_y,test_y=train_test_split(X,y,test_size=0.1)

#3.针对每一种k的取值,进行如下操作:
score_all=[]

#(1)进行K-Means算法模型的配置、训练。
for i in range(2,8):
    plt.figure(figsize=(10,6))
    model=KMeans(n_clusters=i)
    model.fit(df)
    pre_y=model.fit_predict(df)
    #(2)输出相关聚类结果,并评估聚类效果。
    plt.scatter(X,y,c=pre_y,label=i)
    plt.legend(loc=2)#把说明放在左上角
    plt.xlabel(u'juice')
    plt.ylabel(u'sweet')
    #(3)输出各类簇标签值、各类簇中心,从而判断每类的果汁含量与糖分含量情况。
    centroid=model.cluster_centers_ # 重要属性cluster_centers_,查看质心
    print("K值:",i)
    print("centroid:",centroid)
    #质心可视化
    plt.scatter(centroid[:,0],centroid[:,1],marker="x",c="black",s=50)
    #记录不同k值下聚类的CH评价指标的结果
    score=metrics.calinski_harabasz_score(df, pre_y)
    score_all.append(score)
    print("score=",score)
    plt.show()
    print("-----------------------------")
    

#(4)聚类结果及其各类簇中心点的可视化(散点图),从而观察各类簇分布情况。
#(不同的类表明不同果汁饮料的果汁、糖分含量的偏差情况。)
plt.figure(figsize=(10,6))
plt.plot(range(2,8),score_all)
plt.xlabel(u"juice")
plt.ylabel(u"sweet")
plt.title(u"The solution of juice and sweet")
plt.show()
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值