Python:层次聚类分析——基于基站定位数据商圈分析

《Python数据分析与挖掘实战》书中本章无原始数据,文中仅展示了聚类分析了各人群聚集区特征(商圈特征,做营销策划住宅区、CBD商场、办公楼这还用聚类分析吗,直接肉眼也能辨别吧,这就是所有的人流特征和规律?)也是没什么实际用处,而且数据源数据预处理过程才是挖掘重点吧,避重就轻。

记录学习一下两点

  • 数据标准化方式(归一化、标准化、正规化)
  • 聚类分析算法

归一化:无量纲化,提升模型的收敛速度、精度;需考虑标准化前后模型是否同解等价

正则化:一般是为解决模型过拟合问题,除降低特征维度外可选用的方法就是给模型目标函数加入正则化项(即惩罚项,如L1范数(如Lasso),L2范数(如ridge))


数据标准化

离差标准化(0-1标准化/max-min标准化)

Z标准化(标准差标准化,Z-score标准化)

小数定点标准化,归一化

聚类分析算法

比较经典的有k-means层次聚类法。

层次聚类法

层次聚类法基本过程如下:

  • 每一个样本点视为一个簇;
  • 计算各个簇之间的距离,最近的两个簇聚合成一个新簇;
  • 重复以上过程直至最后只有一簇。

层次聚类不指定具体的簇数,而只关注簇之间的远近,最终会形成一个树形图。

sklearn模块中

1 from sklearn.cluster import AgglomerativeClustering as AC
2 #sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=‘euclidean‘, memory=None, connectivity=None, compute_full_tree=‘auto‘, linkage=‘ward‘)
3 #affinity距离算法
4 #linkage合并的策略
5 model=AC(n_clusters=3,linkage=‘ward‘)
6 #linkage : {“ward”, “complete”, “average”}, optional, default: “ward”
7 # “euclidean”, “l1”, “l2”, “manhattan”, “cosine”, or ‘precomputed’. If linkage is “ward”, only “euclidean” is accepted
8 model.fit(data_normal)

linkage criteria 确定用于合并的策略的度量:

  • Ward 最小化所有聚类内的平方差总和。这是一种 variance-minimizing (方差最小化)的优化方向, 这是与k-means 的目标函数相似的优化方法,但是用 agglomerative hierarchical(聚类分层)的方法处理。
  • Maximum 或 complete linkage 最小化聚类对两个样本之间的最大距离。
  • Average linkage 最小化聚类两个聚类中样本距离的平均值。

scipy模块中

from scipy.cluster.hierarchy import linkage,dendrogram  # scipy中的层次聚类

Z=linkage(data_normal,method=‘ward‘,metric=‘euclidean‘)
#method={ ‘single’,‘complete’, ‘average’, ‘weighted’, ‘centroid’, ‘median’,‘ward’ }
#metric={ ‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’}
P=dendrogram(Z,0) #系统树图
plot.show()  # 画出聚类图

K-means聚类法

k-means通常被称为 Lloyd’s algorithm(劳埃德算法),其中的k就是最终聚集的簇数。k-means基本过程如下:

  • 首先任取(你没看错,就是任取)k个样本点作为k个簇的初始中心;
  • 对每一个样本点,计算它们与k个中心的距离,把它归入距离最小的中心所在的簇;
  • 等到所有的样本点归类完毕,重新计算k个簇的中心;
  • 重复以上过程直至样本点归入的簇不再变动。

sklearn模块中

1 sklearn.cluster.KMeans(n_clusters=8, init=‘k-means++‘, n_init=10, max_iter=300, tol=0.0001, precompute_distances=‘auto‘, verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm=‘auto‘)
2
3 from sklearn.cluster import KMeans
4 kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
5 kmeans.labels_ #kmeans[1]
6 kmeans.cluster_centers_  #kmeans[0]

scipy模块中

from scipy.cluster.vq import vq, kmeans, whiten

whitened = whiten(features)
# kmeans聚类前对每个属性特征标准化,除以各自标准差(列)
codebook, distortion = kmeans(whitened, 2) # 标准化后数据及需要聚成类个数
# 返回两个量分别是类中心和损失
label=vq(whitened,codebook)[0] #vq函数根据聚类中心对所有数据进行分类,[0]表示返回两维中的类别

本文用到代码比较简短,附于此以作记录

 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Mon Oct  1 00:20:30 2018
 4
 5 @author: Luove
 6 """
 7
 8 import os
 9 import pandas as pd
10 import numpy as np
11 from scipy.cluster.hierarchy import linkage,dendrogram  # scipy中的层次聚类
12 from sklearn.cluster import AgglomerativeClustering as AC  # sklearn中的层次聚类
13 import matplotlib.pyplot as plt
14 import scipy.cluster.vq
15 os.getcwd()
16 os.chdir(‘D:/Analyze/Python Matlab/Python/BookCodes/Python数据分析与挖掘实战/图书配套数据、代码/chapter14/demo/code‘)
17 filepath=‘../data/business_circle.xls‘
18
19 data=pd.read_excel(filepath)
20 data.head()
21 data=data.iloc[:,1:]
22 data_normal=(data-data.min())/(data.max()-data.min())  # 离差标准化
23
24 Z=linkage(data_normal,method=‘ward‘,metric=‘euclidean‘)
25 P=dendrogram(Z,0)
26 plot.show()
27
28 model=AC(n_clusters=3,linkage=‘ward‘)
29 model.fit(data_normal)
30 data_1=pd.concat([data_normal,pd.Series(model.labels_,index=data.index)],axis=1)
31 data_1.columns=list(data_normal.columns)+[‘聚类类别‘]
32 data_1.shape
33 # 正确显示 中文及负号
34 plt.rcParams[‘font.sans-serif‘]=[‘SimHei‘]
35 plt.rcParams[‘axes.unicode_minus‘]=False
36
37 style=[‘bo-‘,‘ro-‘,‘go-‘]
38 xlabels=[‘工作日人均停留时间‘,‘凌晨人均停留时间‘,‘周末人均停留时间‘,‘日均人流量‘]
39
40 for i in range(3):
41     plt.figure()
42     tmp=data_1[data_1[‘聚类类别‘]==i].iloc[:,:4]
43     for j in range(len(tmp)):
44         plt.plot(range(1,5),tmp.iloc[j,:],style[i])
45     plt.xticks(range(1,5),xlabels,rotation=20)
46     plt.subplots_adjust(bottom=0.15)
47   

Ref:

三种常用数据标准化方法

数据标准化/归一化normalization

聚类分析:k-means和层次聚类

关于聚类及相似度、距离的知识点及kmeans聚类介绍

使用scipy进行层次聚类和k-means聚类

K均值聚类和矢量量化(scipy.cluster.vq

sklearn.cluster.KMeans

sklearn.cluster.AgglomerativeClustering

《数据分析与挖掘实战》:源代码及数据需要可自取:https://github.com/Luove/Data

原文地址:https://www.cnblogs.com/amoor/p/9733973.html

时间: 2024-07-30 09:23:31

Python:层次聚类分析——基于基站定位数据商圈分析的相关文章

Python数据分析-Kobe Bryan生涯数据读取及分析

1.将数据(csv格式)导入jupyter import pandas as pd import matplotlib.pyplot as plt filename='data.csv' raw=pd.read_csv filename print(raw.shape) raw.head()#打印前几行 2.去掉某一列的空值 kobe=raw[pd.notnull(raw['shot_made_flag'])] print(kobe.shape) 3.用matplotlib画图 alpha=0.

LBS移动网络基站定位

LBS基站定位(Location Based Service,简称LBS)一般应用于手机用户,它是基于位置的服务,通过电信.移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务. [1]业务特点 一.要求覆盖率高.一方面要求覆盖的范围足够大.另一方面要求覆盖的范围包括室内.用户大部分时间是在

GSM蜂窝基站定位基本原理浅析

http://mol365.net/post/GSMe89c82e7aa9de59fbae7ab99e5ae9ae4bd8de59fbae69cace58e9fe79086e6b585e69e90.aspx 位置服务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机.掌上电脑等)的标配.随着人们对BLS(Based Location Serices,基于位置的服务)需求的飞速增长,无线定位技术也越来越得到重视.GSM蜂窝基站定位,以其定位速度快.成本低(不需要移动终端上添加额外的硬件

LBS基站定位

LBS基站定位(Location Based Service,简称LBS)一般应用于手机用户,它是基于位置的服务,通过电信.移动运营商的无线电通讯网络(如GSM网.CDMA网)或外部定位方式(如GPS)获取移动终端用户的位置信息(地理坐标,或大地坐标),在GIS(Geographic Information System,地理信息系统)平台的支持下,为用户提供相应服务的一种增值业务.   其业务特点主要有: 一.要求覆盖率高.一方面要求覆盖的范围足够大. 另一方面要求覆盖的范围包括室内.用户大部

NB-IoT是怎么工作的,是否支持基站定位?【转】

转自:http://www.elecfans.com/iot/779658.html 根据我国无线电管理相关要求,明确NB-IoT系统基站应到到属地无线电管理机构办理设台审批,领取无线电台执照.同时,根据台站共存技术条件,对800MHz和900MHz频段NB-IoT系统基站的设置提出了具体要求. 频率是800MHz和900MHz,看图就知道使用范围.大概相当于3G信号的频率,4G信号的频率要达到2000MHz,频率越高,波长越短,传输距离越短,也就是为何远离基站的手机没有4G信号,却有2G信号的

使用百度API实现热点(WIFI)、GPS、基站定位

直接上代码...嘎嘎 /** * 百度基站定位错误返回码 */ // 61 : GPS定位结果 // 62 : 扫描整合定位依据失败.此时定位结果无效. // 63 : 网络异常,没有成功向服务器发起请求.此时定位结果无效. // 65 : 定位缓存的结果. // 66 : 离线定位结果.通过requestOfflineLocaiton调用时对应的返回结果 // 67 : 离线定位失败.通过requestOfflineLocaiton调用时对应的返回结果 // 68 : 网络连接失败时,查找本地

Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要哪些组件的支持? 四.如何安装? 五.Golang.Java.Python.PHP之间通过Thrift实现跨语言调用 1) Golang 客户端和服务端的实现及交互 2) python 客户端的实现与golang 服务端的交互 3) php 客户端的实现与golang 服务端的交互 4) java

Python黑客编程基础3网络数据监听和过滤

Python黑客编程3网络数据监听和过滤 课程的实验环境如下: •      操作系统:kali Linux 2.0 •      编程工具:Wing IDE •      Python版本:2.7.9 •      涉及到的主要python模块:pypcap,dpkt,scapy,scapy-http 涉及到的几个python网络抓包和分析的模块,dpkt和scapy在kali linux 2.0 中默认已经被安装,如果你的系统中没有需要手动安装一下,下面是软件包安装的简单说明. 在kali下

Python:使用基于事件驱动的SAX解析XML

SAX的特点: 是基于事件的 API 在一个比 DOM 低的级别上操作 为您提供比 DOM 更多的控制 几乎总是比 DOM 更有效率 但不幸的是,需要比 DOM 更多的工作 基于对象和基于事件的接口 您可能已经知道语法分析器有两类接口 - 基于对象的(如:DOM)和基于事件(如:SAX)的接口. DOM是基于对象的语法分析器的标准 API. 作为基于对象的接口,DOM 通过在内存中显示地构建对象树来与应用程序通信.对象树是 XML 文件中元素树的精确映射. DOM 易于学习和使用,因为它与基本