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 代码
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 结果
5 案例3(Python原码实现)
5.1 代码
python中的zip()函数详解函数详解")
#*导入相关库=========**
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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。