人工智能——DBSCAN密度聚类,阿里P7大牛亲自教你

本文介绍了使用DBSCAN算法对上网时间和上网时长进行聚类分析,展示了Python代码示例,并对比了不同聚类效果。通过案例演示了如何利用DBSCAN进行数据分组,包括参数调整和结果可视化。
摘要由CSDN通过智能技术生成

print(“Silhouette Coefficient: %0.3f” % metrics.silhouette_score(X, labels))

for i in range(n_clusters_): #打印各簇标号以及各簇内数据

print('Cluster ', i, ‘:’)

print(list(X[labels == i].flatten()))

#*5.画直方图,分析实验结果==============================**

plt.hist(X, 24)

plt.show()

3.3 结果

 

 转换直方图分析

 观察:上网时间大多聚集在22:00和23:00

3.4 拓展

数据分布 vs 聚类:

3-1. 上网时间聚类,创建DBSCAN算法实例,并进行训练,获得标签(上面已经分析过了)

3-2. 上网时长聚类,创建DBSCAN算法实例,并进行训练,获得标签:

结果:

Label表示样本的类别,-1表示DBSCAN划分为噪声。

(1)按照上网时长DBSCAN聚了5类,右图所示,显示了每个聚类的样本数量、聚

类的均值、标准差。

(2)时长聚类效果不如时间的聚类效果明显。

4 案例2(Python实现)


4.1 代码

from sklearn.datasets import make_blobs:聚类数据生成器

import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets

from sklearn.cluster import DBSCAN

#matplotlib inline

X1, y1=datasets.make_circles(n_samples=5000, factor=.6,

noise=.05)

X2, y2 = datasets.make_blobs(n_samples=1000, n_features=2, centers=[[1.2,1.2]], cluster_std=[[.1]],

random_state=9)

X = np.concatenate((X1, X2)) #矩阵合并

#展示样本数据分布

plt.scatter(X[:, 0], X[:, 1], marker=‘o’)

plt.show()

#eps和min_samples 需要进行调参

y_pred = DBSCAN(eps = 0.1, min_samples = 10).fit_predict(X)

#分类结果

plt.scatter(X[:, 0], X[:, 1], c=y_pred)

plt.show()

4.2 结果

h2       

5 案例3(Python原码实现)


5.1 代码

python中的zip()函数详解函数详解")

python中的map函数

#*导入相关库=========**

import numpy as np

import numpy.random as random

from numpy.core.fromnumeric import * #查看矩阵或者数组的维数

import matplotlib.pyplot as plt

#*计算两个向量之间的欧式距离**

def calDist(X1 , X2 ):

sum = 0

for x1 , x2 in zip(X1 , X2): #转换成浮点型

sum += (x1 - x2) ** 2

return sum ** 0.5

#*获取一个点的ε-邻域(记录的是索引)===**

def getNeibor(data , dataSet , e):

res = []

for i in range(shape(dataSet)[0]):

if calDist(data , dataSet[i])<e:

res.append(i)

return res

#*=密度聚类算法=====================**

def DBSCAN(dataSet , e , minPts):

coreObjs = {}#初始化核心对象集合

C = {}

n = shape(dataSet)[0]

#找出所有核心对象,key是核心对象的index,value是ε-邻域中对象的index

for i in range(n):

neibor = getNeibor(dataSet[i] , dataSet , e)

if len(neibor)>=minPts:

coreObjs[i] = neibor

oldCoreObjs = coreObjs.copy()

k = 0#初始化聚类簇数

notAccess = list(range(n))#初始化未访问样本集合(索引)

while len(coreObjs)>0:

OldNotAccess = []

OldNotAccess.extend(notAccess)

cores = coreObjs.keys()

#随机选取一个核心对象

randNum = random.randint(0,len(cores))

cores=list(cores)

core = cores[randNum]

queue = []

queue.append(core)

notAccess.remove(core)

while len(queue)>0:

q = queue[0]

del queue[0]

if q in oldCoreObjs.keys() :

delte = [val for val in oldCoreObjs[q] if val in notAccess]#Δ = N(q)∩Γ

queue.extend(delte)#将Δ中的样本加入队列Q

notAccess = [val for val in notAccess if val not in delte]#Γ = Γ\Δ

k += 1

C[k] = [val for val in OldNotAccess if val not in notAccess]

for x in C[k]:

if x in coreObjs.keys():

del coreObjs[x]

return C

#*=预处理数据================**

def loadDataSet(filename):

dataSet = []

fr = open(filename)

for line in fr.readlines():

curLine = line.strip().split(‘,’)

fltLine = map(float, curLine)

dataSet.append(list(fltLine))

return dataSet

def draw(C , dataSet):

color = [‘r’, ‘y’, ‘g’, ‘b’, ‘c’, ‘k’, ‘m’]

for i in C.keys():

X = []

Y = []

datas = C[i]

for j in range(len(datas)):

X.append(dataSet[datas[j]][0])

Y.append(dataSet[datas[j]][1])

plt.scatter(X, Y, marker=‘o’, color=color[i % len(color)], label=i)

plt.legend(loc=‘upper right’)

plt.show()

#*主函数===**

def main():

dataSet = loadDataSet(“密度聚类.csv”)

print(dataSet)

C = DBSCAN(dataSet, 0.11, 5)

draw(C, dataSet)

if name == ‘main’:

main()

5.2 结果

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值