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天前
|
机器学习/深度学习 数据采集 算法
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
有多种方法可以处理时间序列数据中的噪声。本文将介绍一种在我们的研究项目中表现良好的方法,特别适用于时间序列概况中数据点较少的情况。
20 1
数据稀缺条件下的时间序列微分:符号回归(Symbolic Regression)方法介绍与Python示例
|
2天前
|
机器学习/深度学习 数据挖掘 大数据
大数据时代的“淘金术”:Python数据分析+深度学习框架实战指南
在大数据时代,数据被视为新财富源泉,而从海量信息中提取价值成为企业竞争的核心。本文通过对比方式探讨如何运用Python数据分析与深度学习框架实现这一目标。Python凭借其强大的数据处理能力及丰富库支持,已成为数据科学家首选工具;而TensorFlow和PyTorch等深度学习框架则为复杂模型构建提供强有力的技术支撑。通过融合Python数据分析与深度学习技术,我们能在各领域中发掘数据的无限潜力。无论是商业分析还是医疗健康,掌握这些技能都将为企业和社会带来巨大价值。
21 6
|
1天前
|
数据可视化 数据挖掘 Python
惊呆了!Python数据分析师如何用Matplotlib、Seaborn秒变数据可视化大师?
在数据驱动时代,分析师们像侦探一样在数字海洋中寻找线索,揭示隐藏的故事。数据可视化则是他们的“魔法棒”,将复杂数据转化为直观图形。本文将带你探索Python数据分析师如何利用Matplotlib与Seaborn这两大神器,成为数据可视化大师。Matplotlib提供基础绘图功能,而Seaborn在此基础上增强了统计图表的绘制能力,两者结合使数据呈现更高效、美观。无论是折线图还是箱形图,这两个库都能助你一臂之力。
12 4
|
1天前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
14 3
|
2天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
11 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
8天前
|
算法 Python
揭秘!Python数据魔术师如何玩转线性回归,让你的预测精准到不可思议
【9月更文挑战第13天】在数据科学领域,线性回归以其优雅而强大的特性,将复杂的数据关系转化为精准的预测模型。本文将揭秘Python数据魔术师如何利用这一统计方法,实现令人惊叹的预测精度。线性回归假设自变量与因变量间存在线性关系,通过拟合直线或超平面进行预测。Python的scikit-learn库提供了简便的LinearRegression类,使模型构建、训练和预测变得简单直接。
23 5
|
6天前
|
机器学习/深度学习 数据可视化 搜索推荐
使用Python实现深度学习模型:智能睡眠监测与分析
使用Python实现深度学习模型:智能睡眠监测与分析
27 2
|
7天前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现深度学习模型:智能饮食建议与营养分析
使用Python实现深度学习模型:智能饮食建议与营养分析
32 3
|
9天前
|
数据采集 传感器 数据可视化
利用Python进行数据分析与可视化
【9月更文挑战第11天】在数字化时代,数据已成为企业决策和科学研究的关键。本文将引导读者了解如何使用Python这一强大的工具进行数据分析和可视化,帮助初学者理解数据处理的流程,并掌握基本的可视化技术。通过实际案例,我们将展示如何从原始数据中提取信息,进行清洗、处理,最终以图形方式展现结果,使复杂的数据变得直观易懂。
|
10天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
28 5