首页 > 编程语言 >采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)

采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)

时间:2023-08-02 20:23:30浏览次数:38  
标签:csv KMeans 算法 pd PCA data id

实现该项目的流程如下

"""
项目:用户对物品类别的喜好细分(菜篮子分析)

主算法:PCA降维算法
       KMeans算法
    
总思路
    1、导包
    2、获取数据
    3、数据处理
    5、特征工程(使用PCA降维)
   6、使用KMeans算法进行模型训练
   7、模型评估

"""

 

First of all!!导包

# 1、导包

import pandas as pd #读取数据用
from sklearn.decomposition import PCA # PCA算法,用于把一些没必要的特征删除
from sklearn.cluster import KMeans # 用来进行无目标值训练,即无监督学习
from sklearn.metrics import silhouette_score # 衡量无监督学习的模型是否优秀

 

 

然后就是导入数据啦

# 2、获取数据

order_products = pd.read_csv("order_products__prior.csv")
products = pd.read_csv("products.csv")
orders = pd.read_csv("orders.csv")
aisles = pd.read_csv("aisles.csv")

这里提供数据集的下载(百度网盘)(数据很大,不要用流量!!)

链接:https://pan.baidu.com/s/1k-_rvVhc_tjUB8GLFkYlDw
提取码:pq95

 

接着就是最爱的数据处理环节了

# 数据处理
# 合并表:.merge(),连接两个DataFrame并返回连接之后的DataFrame,每个参数有不同的结果,详情请自行搜索
    # 目的是将user_id与aisles连接在一起

tab1 = pd.merge(aisles,products,on=['aisle_id','aisle_id'])
tab2 = pd.merge(order_products,tab1,on=['product_id','product_id'])
tab3 = pd.merge(orders,tab2,on=['order_id','order_id'])

# 找到user_id和aisle之间的关系
# .crosstab()是实现交叉表

data = pd.crosstab(tab3["user_id"],tab3["aisle"])
data = tab[:10000] # 偷懒减数【手动滑稽】

 

下一步是进行降维了

# PCA降维

# 实例化转换器
transfer = PCA(n_components=0.95)

# 调用函数
data_new = transfer.fit_transform(data)

 

接着就是进行模型训练了

# 预估器流程

estimator = KMeans(n_clusters=3) # n_clusters是用来决定分类的类别数
estimator.fit(data_new)

 

最后就是模型评估啦

# 模型评估

# 查看轮廓系数
print("轮廓系数为:",silhouette_score(data_new,estimator.predict(data_new)))

 

以上就是作者对于本项目的一些基本实现啦

(ps:该随笔是作者一边学习一边写的,里面有一些自己的拙见,如果有错误或者哪里可以改正的话,还请大家指出并批评改正!)

 

标签:csv,KMeans,算法,pd,PCA,data,id
From: https://www.cnblogs.com/zrold/p/17601650.html

相关文章

  • 算法-06-冒泡排序
       importrandomdefbubble_sort(li):foriinrange(len(li)-1):forjinrange(len(li)-i-1):ifli[j]>li[j+1]:li[j],li[j+1]=li[j+1],li[j]li=[random.randint(0,20)foriinrange(15)......
  • mule9.0 springappcation.xml
    <?xmlversion="1.0"encoding="UTF-8"?><mulexmlns:scripting="http://www.mulesoft.org/schema/mule/scripting"xmlns:vm="http://www.mulesoft.org/schema/mule/vm"xmlns:db="http://www.mulesoft......
  • 论文解读(APCA)《Adaptive prototype and consistency alignment for semi-supervised d
    [Wechat:Y466551|付费咨询,非诚勿扰]论文信息论文标题:Adaptiveprototypeandconsistencyalignmentforsemi-superviseddomainadaptation论文作者:JihongOuyang、ZhengjieZhang、QingyiMeng论文来源:2023aRxiv论文地址:download 论文代码:download视屏讲解:click1介绍......
  • 算法-05-排序
      ......
  • 算法笔记——ST表
    ST表ST表是一种简单的数据结构,主要用于解决RMQ问题(区间最大/最小值问题)主要应用倍增的思想,可以实现O(nlogn)预处理,O(1)查询1.预处理ST表倍增法递推:用两个等长的小区间拼凑一个大区间f[i][j]表示以第i个数为起点,长度为2^j的区间里的最大值/最小值f[i][j]=max(f[i][j-1],f[i+2^j-1]......
  • [算法题python]822.翻转卡片游戏
    在桌子上有 n 张卡片,每张卡片的正面和背面都写着一个正数(正面与背面上的数有可能不一样)。我们可以先翻转任意张卡片,然后选择其中一张卡片。如果选中的那张卡片背面的数字 x 与任意一张卡片的正面的数字都不同,那么这个数字是我们想要的数字。哪个数是这些想要的数字中最小的......
  • [算法题python]14. 最长公共前缀
    编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。 示例1:输入:strs=["flower","flow","flight"]输出:"fl"示例2:输入:strs=["dog","racecar","car"]输出:""解释:输入不存在公共前缀。 提示:......
  • 代码随想录算法训练营第四十三天| 583. 两个字符串的删除操作 72. 编辑距离
    583.两个字符串的删除操作要求:删除最少的步数,来让这两个字符串相等思路:求末尾的最长公共子序列的长度,然后减去他们的长度代码:1//要求:两个字符串,删除任意一个字符后,让这两个字符相等2//dp[n][m]以n-1结尾的字符串变成节点为m-1为子序列的最大个数3//4//求......
  • C/C++ 数据结构五大核心算法之分治法
    分治法——见名思义,即分而治之,从而得到我们想要的最终结果。分治法的思想是将一个规模为N的问题分解为k个较小的子问题,这些子问题遵循的处理方式就是互相独立且与原问题相同。两部分组成:分(divide):递归解决较小的问题治(conquer):然后从子问题的解构建原问题的解三个步骤:1、......
  • 面试-基本的算法要了如指掌,比如查找、排序、动态规划、分治等
    在了解这些基本算法之前还是得先了解这些基本的数据结构,这些都是要熟记与心的。基本数据结构比如:字符串、链表、二叉树、堆、栈、队列、哈希等字符串stringstr="helloworld";//使用格式//string是类。//str输出的大小,取决于size函数的返回值。链表classListNode{ pu......