python 数据分析k-means聚类分析

简介: python 数据分析k-means聚类分析

常见的数据分析模型有回归,分类,聚类
此次介绍的是无监督学习方面的聚类分析代码

所有代码可直接运行

1 读取数据方法

其实pandas有更方便的pd.readcsv方法实现快速读取csv数据集,还有其它方法读取各种数据集

import numpy as np

def loadDataSet(filename):
    """
    读取数据集
    Args:
        filename:文件名
    Return:
        dataMat:数据样本矩阵
    """
    dataMat=[]
    with open(filename,'rb') as f:
        for line in f:
            line=line.decode('utf-8').strip()
            eles=list(map(float,line.split(',')))
            dataMat.append(eles)
    return dataMat

2 计算样本聚类方法

"""计算俩向量的欧式距离
Args:
    vecA:向量A
    vecB:向量B
Returns:
    欧式距离
def distEclud(vecA,vecB):
    """计算俩向量的欧式距离
    Args:
        vecA:向量A
        vecB:向量B
    Returns:
        欧式距离
    """
    return np.sqrt(np.sum(np.power((vecA-vecB),2)))

3生成聚类中心矩阵

def randCent(dataSet,k):
    """
    随机生成k个聚类中心
    Args:
        dataSet:数据集
        k:簇类目
    Returns:
        centroids:聚类中心矩阵
    """
    m,_=dataSet.shape
    centroids=dataSet.take(np.random.choice(m,k),axis=0)
    return centroids 

4 k-mians聚类

def kMeans(dataSet,k,maxIter=5):
    """
    k-means
    Args:
        dataSet:数据集
        k:簇类数
    Returns:
        centroids 聚类中心矩阵
        clusterAssment:点分配结果
    """
    #随机初始化聚类中心
    centroids=randCent(dataSet,k)
    init_centroids=centroids.copy()
    
    m,n=np.shape(dataSet)
    #点分配结果,第一列指明样本所在的簇,第二列指明样本到聚类中心的距离
    clusterAssment=np.mat(np.zeros((m,2)))
    
    #标识聚类中心是否仍在改变
    clusterChanged=True
    #直至聚类中心不在变化
    iterCount=0
    while clusterChanged and iterCount<maxIter:
        iterCount+=1
        clusterChanged=False
        #分配样本到簇
        for i in range(m):
            #计算第i个样本到各个簇类中心的距离
            minIndex=0
            minDist=np.inf
            for j in range(k):
                dist=distEclud(dataSet[i,:],centroids[j,:])
                if (dist<minDist):
                    minIndex=j
                    minDist=dist
            #任何一个样本的类簇分配发生变化则认为改变
            if (clusterAssment[i,0]!=minIndex):
                clusterChanged=True
            clusterAssment[i,:]=minIndex,minDist**2
            
        #刷新聚类中心,移动聚类中心到所在簇的均值位置
        for cent in range(k):
            #通过数组过滤获得簇中的点
            ptsInCluster=dataSet[np.nonzero(
                clusterAssment[:,0].A==cent)[0]]
            if ptsInCluster.shape[0]>0:
                #计算均值并移动
                centroids[cent,:]=np.mean(ptsInCluster,axis=0)
    return centroids,clusterAssment,init_centroids

5 画图展示结果

import matplotlib.pyplot as pl

%matplotlib inline

dataMat=np.mat(loadDataSet('../data/price_diff.csv'))
m,n=np.shape(dataMat)
m,n
#注意,这里我们只设定了对多四个簇的样式,所有前面如果set_k超过4,后面会出现index_error
patterns=['o','D','^','s']
colors=['b','g','y','black']
fig=pl.figure()
title='kmeans with k={}'.format(set_k)
ax=fig.add_subplot(111,title=title)
for k in range(clusterCount):
    #绘制聚类中心
    ax.scatter(centroids[k,0],centroids[k,1],color='r',marker='+',linewidth=20)
    #绘制初始聚类中心
    ax.scatter(init_centroids[k,0],init_centroids[k,1],color='purple',marker='*',linewidths=10)
    for i in range(m):
        #绘制属于该聚类中心的样本
        ptsInCluster=dataMat[np.nonzero(clusterAssment[:,0].A==k)[0]]
        ax.scatter(ptsInCluster[:,0].flatten().A[0],ptsInCluster[:,1].flatten().A[0],marker=patterns[k],color=colors[k])

在这里插入图片描述

目录
相关文章
|
5天前
|
数据可视化 数据挖掘 Python
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(下)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
12 0
|
5天前
|
数据可视化 API 开发者
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化(上)
Python时间序列分析苹果股票数据:分解、平稳性检验、滤波器、滑动窗口平滑、移动平均、可视化
16 0
|
5天前
|
机器学习/深度学习 数据可视化 安全
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化(下)
Python随机森林、线性回归对COVID-19疫情、汇率数据预测死亡率、病例数、失业率影响可视化
14 1
|
4天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】金融数据分析中的机器学习应用
【4月更文挑战第30天】本文探讨了机器学习在金融数据分析中的应用,如股价预测、信用评分、欺诈检测、算法交易和风险管理,并以Python为例展示了如何进行股价预测。通过使用机器学习模型,金融机构能更准确地评估风险、识别欺诈行为并优化交易策略。Python结合scikit-learn库简化了数据分析过程,助力金融从业者提高决策效率。随着技术发展,机器学习在金融领域的影响力将持续增强。
|
4天前
|
机器学习/深度学习 存储 数据采集
【Python 机器学习专栏】PCA(主成分分析)在数据降维中的应用
【4月更文挑战第30天】本文探讨了主成分分析(PCA)在高维数据降维中的应用。PCA通过线性变换找到最大化方差的主成分,从而降低数据维度,简化存储和计算,同时去除噪声。文章介绍了PCA的基本原理、步骤,强调了PCA在数据降维、可视化和特征提取上的优势,并提供了Python实现示例。PCA广泛应用在图像压缩、机器学习和数据分析等领域,但降维后可能损失解释性,需注意选择合适主成分数量及数据预处理。
|
4天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】K-means 聚类算法在 Python 中的实现
【4月更文挑战第30天】K-means 是一种常见的聚类算法,用于将数据集划分为 K 个簇。其基本流程包括初始化簇中心、分配数据点、更新簇中心并重复此过程直到收敛。在 Python 中实现 K-means 包括数据准备、定义距离函数、初始化、迭代和输出结果。虽然算法简单高效,但它需要预先设定 K 值,且对初始点选择敏感,可能陷入局部最优。广泛应用在市场分析、图像分割等场景。理解原理与实现对应用聚类分析至关重要。
|
4天前
|
vr&ar Python
Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
Python自激励阈值自回归(SETAR)、ARMA、BDS检验、预测分析太阳黑子时间序列数据
11 0
|
4天前
|
Python
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
10 0
|
4天前
|
机器学习/深度学习 Python
【Python机器学习专栏】时间序列数据的特征工程
【4月更文挑战第30天】本文探讨了时间序列数据的特征工程,强调其在捕捉季节性、揭示趋势、处理异常值和提升模型性能中的重要性。介绍了滞后特征、移动窗口统计特征、时间戳特征、频域特征和波动率特征等方法,并提供了Python实现示例。通过有效特征工程,可提高时间序列分析的准确性和预测可靠性。
|
4天前
|
机器学习/深度学习 计算机视觉 Python
【Python 机器学习专栏】图像数据的特征提取与预处理
【4月更文挑战第30天】本文探讨了图像数据的特征提取与预处理在机器学习中的重要性。图像数据具有大容量、信息丰富和冗余性高的特点。特征提取涉及颜色、纹理和形状特征;预处理包括图像增强、去噪和分割。Python的OpenCV和Scikit-image库在处理这些任务时非常有用。常见的特征提取方法有统计、变换和基于模型的方法,而预处理应注意保持图像真实性、适应性调整及验证评估。有效的特征提取和预处理能提升模型性能,Python工具使其更高效。