基于K-means Clustering聚类算法对电商商户进行级别划分(含Octave仿真)

简介: 基于K-means Clustering聚类算法对电商商户进行级别划分(含Octave仿真)

在从事电商做频道运营时,每到关键时间节点,大促前,季度末等等,我们要做的一件事情就是品牌池打分,更新所有店铺的等级。例如,所以的商户分入SKA,KA,普通店铺,新店铺这4个级别,对于不同级别的商户,会给予不同程度的流量扶持或广告策略。通常来讲,在一定时间段内,评估的维度可以有:UV,收订金额,好评率,销退金额,广告位点击率,转化率,pc端流量、手机端流量、客单价......等n多个维度,那么如何在这n多个维度中找到一种算法,来将我们的品牌划分到4个级别中呢?今天所讨论的K-means聚类算法是其中一种,基于某电商频道296个品牌的周销量真实数据,我们来进行品牌池划分。

从GNUOctave编译脚本示例,显示照明函数及其变化的图形

首先, K-means聚类算法可以描述为如下几步:

1、随机选取K个质心(centroids);

2、计算每个数据点距离K个质心的距离,选择距离最小的一个质心作为该数据点的所属组。例如,某数据点距离#3质心最近,那么它就属于#3组。

3、更新质心的坐标,将每个组的数据点坐标相加求平均值,得出新的质心位置并更新。

4、重复第二和第三步n次。

其中,K和n是提前指定的。

 

为了将K-means运行过程可视化,我们只取296的品牌的2个维度:UV与收订金额。主控代码如下:

%% ================= Part 1: load data ====================
fprintf('load parameters.\n\n');
pkg load io;
tmp = xlsread('data.xlsx');
id=tmp(:,1);
X=tmp(:,2:3);
%% =================== Part 2: set parameters ======================
K = 4;
max_iters = 10;
%% =================== Part 3: K-Means Clustering ======================
fprintf('\nRunning K-Means clustering on example dataset.\n\n');
initial_centroids = kMeansInitCentroids(X,K);
% Run K-Means algorithm. The 'true' at the end tells our function to plot
% the progress of K-Means
[centroids, idx] = runkMeans(X, initial_centroids, max_iters, true);
fprintf('\nK-Means Done.\n\n');

K-Means Clustering Algorithm核心代码:

function [centroids, idx] = runkMeans(X, initial_centroids, ...
                                      max_iters, plot_progress)
[m n] = size(X);
K = size(initial_centroids, 1);
centroids = initial_centroids;
previous_centroids = centroids;
idx = zeros(m, 1);
% Run K-Means
for i=1:max_iters
    % Output progress
    fprintf('K-Means iteration %d/%d...\n', i, max_iters);
    if exist('OCTAVE_VERSION')
        fflush(stdout);
    end
    % For each example in X, assign it to the closest centroid
    idx = findClosestCentroids(X, centroids);
    % Given the memberships, compute new centroids
    centroids = computeCentroids(X, idx, K);
end
end

选择最近质心的算法:

function idx = findClosestCentroids(X, centroids)
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
m = size(X,1);
for(i = 1:m)
  distance = -1;
  index = -1;
  for(j=1:K)
    e = X(i,:)-centroids(j,:);
    d_tmp = e*e';
    if(distance == -1)
      distance = d_tmp;
      index = j;
    else
      if (d_tmp<distance)
        distance = d_tmp;
        index = j;
      endif
    endif
  endfor
  idx(i) = index;
endfor
end

重新计算质心及初始化质心的算法:

function centroids = computeCentroids(X, idx, K)
[m n] = size(X);
centroids = zeros(K, n);
num = zeros(K,1);
for(i = 1:m)
  c = idx(i,:);
  centroids(c,:) += X(i,:);
  num(c,:)++;
endfor
centroids = centroids./num;
function centroids = kMeansInitCentroids(X, K)
centroids = zeros(K, size(X, 2));
randidx = randperm(size(X, 1));
centroids = X(randidx(1:K), :);
end

经过十次迭代后,分组的结果如下:

在我本地的原始数据表格中,共有约20个维度来衡量每个店铺的运行情况,根据K-means聚类算法可以很轻松的将它们归类,虽然无法将其进行可视化操作,但原理与二维K-means完全相同。

相关文章
|
5月前
|
算法
基于MPPT算法的光伏并网发电系统simulink建模与仿真
本课题基于MATLAB/Simulink搭建光伏并网发电系统模型,集成PV模块、MPPT算法、PWM控制与并网电路,实现最大功率跟踪与电能高效并网。通过仿真验证系统在不同环境下的动态响应与稳定性,采用SVPWM与电流闭环控制,确保输出电流与电网同频同相,满足并网电能质量要求。
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
6月前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
300 15
|
5月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
6月前
|
机器学习/深度学习 分布式计算 算法
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
【风场景生成与削减】【m-ISODATA、kmean、HAC】无监督聚类算法,用于捕获电力系统中风场景生成与削减研究(Matlab代码实现)
250 0
|
6月前
|
算法 数据建模 调度
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
【INC-MPPT】增量导纳算法追踪光伏的最大功率点用于光伏的并网接入研究(Simulink仿真实现)
169 0
|
5月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
503 0
|
5月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
330 2
|
6月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
308 3