机器学习——非监督算法(聚类分析)

文章目录

  • 1.核心思想
  • 2.聚类算法 API
  • 3.案例分析
  • 4.优缺点分析

1.核心思想

  • 1.聚类算法中有超参数 K,理解为将数据划分为几个类别,一般现实实现时,知道划分类别的个数。例 K=3 时

  • 2.随机在数据当中抽取 3个样本,当做三个类别的中心点(k1,k2,k3)

  • 3.计算其余的点分别到这三个中心店的距离,每一个样本有三个距离(a,b,c),对每一个样本从(k1,k2,k3)中间选出距离最近的一个点作为自己的标记,形成一个族群;

  • 4.分别计算这三个族群的平均值;把这三个平均值与之前的三个旧中心点进行比较。如果相同,则结束聚类;如果不同,则把这三个平均值点作为新的中心点,重复步骤 3;

  • 聚类评估标准:轮廓系数
    s c i = b i − a i m a x ( b i , a i ) sc_i=\frac{b_i-a_i}{max(b_i,a_i)} sci=max(bi,ai)biai
    注:对于每个 i i i为已聚类数据中的样本, b i b_i bi i i i到其他族群的所有样本的距离的最小值, a i a_i ai i i i到本身族群的距离平均值;
    最后计算得出所有样本的轮廓系数平均值
    例如:

  • 对于蓝色样本中的某个样本蓝1,求出蓝1与剩余蓝色类别的距离平均值作为 a i a_i ai

  • 求出蓝1与红色类别所有点的距离 b 红 b_红 b,蓝 1 与绿色类别所有点的距离 b 绿 b_绿 b绿,对于 b 红 , b 绿 b_红,b_ 绿 b,b绿比较其最小值作为 b i b_i bi

  • 按照上述公式得到蓝1 样本的轮廓系数;

  • 对每个点求出其轮廓系数,再取平均值,得到全局轮廓系数即为聚类效果评估系数;

  • 最终结果区间为[-1,1],其中越趋近于1,则聚类效果越好;
    机器学习——非监督算法(聚类分析)_第1张图片

2.聚类算法 API

  • 聚类算法 API
    sklearn.clusters.KMeans(n_clusters=8,init='k-means++')

    • n_clusters:开始的聚类中心数量;
    • init:初始化方法,默认为’k-means++’
  • 聚类评估 API
    `sklearn.metrics.silhouette_score(X,labels)

    • **X:**特征值
    • **labels:**被聚类标记的目标值

3.案例分析

import pandas as pd
import numpy as np
#读取数据
prior=pd.read_csv('order_products__prior.csv')
aisles=pd.read_csv('aisles.csv')
products=pd.read_csv('products.csv')
orders=pd.read_csv('orders.csv')
#合并数据
prod_ais=pd.merge(aisles,products)
prod_ais_prior=pd.merge(prod_ais,prior)
df=pd.merge(prod_ais_prior,orders)
#形成交叉表
cross=pd.crosstab(df['user_id'],df['aisle'])

#进行主成分提取
from sklearn.decomposition import PCA
pca=PCA(n_components=0.9)
data=pca.fit_transform(cross)

#聚类分析
from sklearn.cluster import KMeans
km=KMeans(n_clusters=4)
km.fit(data)
predict=km.predict(data)

#显示聚类结果
from matplotlib import pyplot as plt
plt.figure(figsize=(10,10))
#建立四个颜色列表
colored=['orange','green','blue','purple']
color1=[colored[i] for i in predict]
plt.scatter(data[:,1],data[:,20],color=color1)
plt.xlabel('x1')
plt.ylabel('y')
plt.savefig('聚类图形')
plt.show()

#聚类效果评估
from sklearn.metrics import silhouette_score
ss=silhouette_score(data,predict)
print('最终聚类效果评分为:',round(ss*100,2),'分,总分100分'

在特征1下的绘图
机器学习——非监督算法(聚类分析)_第2张图片

4.优缺点分析

  • 优点:
    采用迭代算法,直观易懂并且非常实用;

  • 缺点:
    容易收敛到具备最优解;

你可能感兴趣的:(机器学习)