聚类结果不好怎么办_机器学习 聚类算法

应用:客户价值判断模型RFM(Recency Frequency Monetary)常常和聚类算法一起使用,聚类可以用于降维和矢量化(vector quantization),可以将高维特征压缩到一列当中,常常用于图像、声音、视频等非结构化数据,可以大幅压缩数据量

9d757cd84c1ab434c30d590a67a8a064.png
聚类vs分类

一、手写Kmeans算法

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

#导入数据集
iris = pd.read_csv('iris.txt',header = None)
iris.head()
iris.shape #(150,5)

314ff787f02a39ae03d1fd4a70b5e2d2.png

#构建距离的计算公式(注意量纲的统一)

def distEclud(arrA,arrB):
        """
    函数功能:计算两个数据集之间的欧式距离
    输入:两个array数据集
    返回:两个数据集之间的欧氏距离(此处用距离平方和代替距离)
    """
    d = arrA-arrB
    distance = np.sum(np.power(d,2),axis = 1)
    return distance

#定义随机投放质心的函数

def randCent(dataSet, k):
        """
    函数功能:随机生成k个质心
    参数说明:
     dataSet:包含标签的数据集
     k:簇的个数
    返回:
     data_cent:K个质心
    """
    n = dataSet.shape[1]
    data_min = dataSet.iloc[:, :n-1].min()
    data_max = dataSet.iloc[:, :n-1].max()
    data_cent = np.random.uniform(data_min,data_max,(k, n-1))
    return data_cent

#定义K-means聚类函数

def kMeans(dataSet, k, distMeas=distEclud, createCent=randCent):
        """
    函数功能:k-均值聚类算法
    参数说明:
     dataSet:带标签数据集
     k:簇的个数
     distMeas:距离计算函数
     createCent:随机质心生成函数
    返回:
     centroids:质心
     result_set:所有数据划分结果
    """
    m,n = dataSet.shape   #m是样本数,n是特征+标签数
    centroids = createCent(dataSet, k) #生成 k个随机质心
    clusterAssment = np.zeros((m,3)) #创建m行3列的容器
    clusterAssment[:, 0] = np.inf  #容器第一列放置最短距离,初始化设为最大值
    clusterAssment[:, 1: 3] = -1   #容器第二列放置本次迭代完之后的簇的编号,第三列放置上次迭代的簇的编号
    result_set = pd.concat([dataSet, pd.DataFrame(clusterAssment)], axis=1,ignore_index = True) #将容器拼接到原数据集上
    clusterChanged = True #循环控制因子
    while clusterChanged:
        clusterChanged = False
        for i in range(m): #对所有样本进行循环
            dist = distMeas(dataSet.iloc[i, :n-1].values, centroids) #计算当前样本到质心之间的距离
            result_set.iloc[i, n] = dist.min(
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值