ML学习笔记-2021-08-27-无监督学习K-means算法

4.6 无监督学习-K-means 算法

  1. 目标
    说明K-means算法原理
    说明K-means的性能评估标准轮廓系数
    说明K-means的优缺点

  2. 应用
    instacart用户聚类

4.6.1 什么是无监督学习

没有目标值——无监督学习
在这里插入图片描述

4.6.2 无监督学习包含算法

  1. 聚类:K-means
  2. 降维:降维

4.6.3 K-means 原理

在这里插入图片描述

步骤
在这里插入图片描述

4.6.4 API

在这里插入图片描述

4.6.5 案例:k-means对instacart market 用户聚类

"""
无监督学习:
    PCA降维
    聚类算法 K-means
        目标: 一开始数据是整个的, 然后需要分成 K 个组
        步骤: 见截图
        判定结果: 下一次的中心点和上次的基本上一样, 就可以结束cluster
        中心点求法:(平均值算法)
"""
from sklearn.cluster import KMeans
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.metrics import silhouette_score  # 所有模型评估都在metrics里面
# 对用户的商品进行个分类来推荐商品, 资源文件里面的instacart


# 先降维
def decomposition():
    order_product = pd.read_csv("../../resources/instacart/order_products__prior.csv")
    aisles = pd.read_csv("../../resources/instacart/aisles.csv")
    orders = pd.read_csv("../../resources/instacart/orders.csv")
    products = pd.read_csv("../../resources/instacart/products.csv")
    # 先合并表
    table_1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"])  # 让aisles 和product_id一起
    table_2 = pd.merge(table_1, order_product, on=["product_id", "product_id"])
    table_3 = pd.merge(table_2, orders, on=["order_id", "order_id"])
    # 交叉表
    result_table = pd.crosstab(table_3["user_id"], table_3["aisle"])
    # print(result_table)  # 处理后的最终数据
    result_table = result_table[:10000]  # 只取10000组数据, 防止后面预测的时候内存爆炸
    transfer = PCA(n_components=0.95)
    data_new = transfer.fit_transform(result_table)
    print("数据样本", data_new.shape)
    print("PCA降维结果:\n", data_new)
    return data_new


def KMeans_test():
    data = decomposition()

    # 预估器流程:
    estimator = KMeans(n_clusters=3, init='k-means++')
    estimator.fit(data)

    predict = estimator.predict(data)  # 分成的组, 0 1 2
    print("展示前300个用户的类别", predict[:300])

    # 模型评估:
    """
    引入轮廓系数分析和对应公式, 见截图
    """
    score = silhouette_score(data, predict)  # 小心你的内存爆炸.....
    print("模型轮廓系数为(1 最好, -1 最差):", score)

    return None


if __name__ == '__main__':
    KMeans_test()


4.6.6 K-means 性能评估 轮廓系数

  1. 轮廓系数的公式

在这里插入图片描述
2. 分析
高内聚,低耦合。内部距离最小化,外部距离最大化。
模型轮廓系数为(1 最好, -1 最差)
在这里插入图片描述
3.API
在这里插入图片描述

4.6.7 K-means 总结

特点分析:采用迭代式算法,直观易懂,并且实用
缺点:容易收敛到局部最优解(多次聚类)
注意:聚类一般在分类之前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值