【机器学习】聚类算法-k-means No.14

1、非监督学习的特点

只有特征值,没有目标值(物以类聚,人以群分)

2、聚类过程

  1. 随机设置K个特征空间内的点作为初始的聚类中心;
  2. 对于其他每个点分别计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别;
  3. 接着对着标记的聚类中心,重新计算出每个聚类的新中心点(平均值);
  4. 如果计算得出的中心点与原中心点一致,则聚类结束,否则继续进行第二步计算。

3、k-means API

sklearn.cluster.KMeans

4、案例:k-means对Instacart Market用户聚类

数据地址:https://www.kaggle.com/c/instacart-market-basket-analysis/data

from sklearn.decomposition import PCA
import pandas as pd
from sklearn.cluster import KMeans
from matplotlib import pyplot as plt

def Instacart_PCA():
    '''
    主成分分析:用户对物品类别的喜好细分降维,对用户进行聚类
    :return: None
    '''

    # 读取四张表的数据
    prior = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\order_products__prior.csv")
    products = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\products.csv")
    orders = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\orders.csv")
    aisles = pd.read_csv("C:\\Users\\Administrator\\Desktop\\机器学习\\Instacart\\aisles.csv")

    # 合并四张表到一张表中(用户物品类别)
    _mg = pd.merge(prior, products, on=['product_id', 'product_id'])
    _mg = pd.merge(_mg,orders,on=['order_id', 'order_id'])
    mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

    # 查看已经合并表中前10个
    print(mt.head(10))

    # 交叉表(特殊的分组工具):构建行,列的二维矩阵
    cross = pd.crosstab(mt['user_id'],mt['aisle'])

    # 由于列中特征太多,存在很多冗余的数据,进行主成分分析
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(cross)

    print(data)
    # print(data.shape)
    # 为方便演示,减小样本数量
    x = data[:500]
    print(x.shape)
    # 假设用户一共分为四个类别
    km = KMeans(n_clusters=4)
    km.fit(x)
    predict = km.predict(x)

    # 显示聚类结果
    plt.figure(figsize=(10,10))

    # 建立四个颜色的列表
    colored = ['orange', 'green', 'blue', 'purple']

    colr = [colored[i] for i in predict]

    plt.scatter(x[:, 1], x[:, 20], color=colr)

    plt.xlabel('1')
    plt.ylabel('20')
    plt.show()


    return None


if __name__== "__main__":
    Instacart_PCA()

5、聚类性能评估指标

(1)轮廓系数

b_i>>a_i:趋近于1效果最好

b_i<<a_i:趋近于-1,效果最差

轮廓系数的值介于[-1,1],越趋近于1代表内聚度和分离度都相对较优

(2)性能评估指标API

sklearn.metrics.sihouette_sscore

print("聚类效果:", silhouette_score(x,predict))

6、KMeans总结

特点分析:采用迭代算法,直观易懂并且非常实用

缺点:容易收敛到局部最优解(多次聚类)

注意:一般聚类在分类之前做。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-Jonn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值