机器学习sklearn无监督学习聚类算法dbscan(代码片段)

404detective 404detective     2022-12-22     415

关键词:




import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn.cluster import KMeans
from sklearn import datasets
# 生成数据
x1, y1 = datasets.make_circles(n_samples=2000, factor=0.5, noise=0.05)
x2, y2 = datasets.make_blobs(n_samples=1000, centers=[[1.2, 1.2]], cluster_std=[[0.1]])
x = np.concatenate((x1, x2))

# k-means方法聚类
model = KMeans(n_clusters=3)
model.fit(x)
y_pred = model.predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)

# DBSCAN方法聚类
model = DBSCAN(eps=0.2, min_samples=50)
model.fit(x)
y_pred = model.fit_predict(x)
plt.figure()
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

k-means聚类方法,它有一个很大的缺陷,就是它对于简单成团的数据样本聚类效果较好,但是对于复杂的样本数据分布就搞不定了,比如环形分布的样本数据。

应用


先放一下直方图,集中在7、8、20、21、22、23。(6类)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
from sklearn import metrics


def loadData(filePath):
    f = open(filePath)
    lines = f.readlines()
    # print(lines)
    mac2id=dict()
    online_times=[]
    for line in lines:
        # lines[1]
        # 2c929293466b97a6014754607e457d68,U201215025,A417314EEA7B,10.12.49.26,2014-07-20 22:44:18.540000000,2014-07-20 23:10:16.540000000,1558,15,本科生动态IP模版,100元每半年,internet
        # .split(',' )[0]   .split(',' )[1]  .......
        mac=line.split(',' )[2]
        #1558时间单位为秒
        online_time=int(line.split(',')[6])
        # line.split(',')[4]  2014-07-20 22:44:18.540000000
        # .split(' ')[1]      22:44:18.540000000
        # .split(':')[0]      22
        start_time= int(line.split(',')[4].split(' ')[1].split(':')[0])
        # print(mac,online_time,start_time)
        if mac not in mac2id: 
            mac2id[mac]= len(online_times)
            # print(mac2id)                   #'A417314EEA7B': 0, 'F0DEF1C78366': 1, '88539523E88D': 2,,,,
            # print(online_times)            #[(22, 1558), (12, 40261),,,,()]
            online_times.append((start_time,online_time/12000))
        else:
            #如果有相同的MAC地址 则以最后一条为准 实际上没有
            online_times[mac2id[mac]]=[(start_time,online_time)]
            print(online_times)
    
    # print(online_times)   [(22, 1558), (12, 40261),,,,,
    # print(np.array(online_times))   .reshape((-1,2))要两列数据 -1为unspecified value
    #  [[    22   1558]
    #  [    12  40261]
    #  [    22   1721].....]
    #
    real_X=np.array(online_times).reshape((-1,2))
    return real_X

X=loadData("E:\\Desktop\\python_code\\sklearn\\课程数据\\聚类\\\\time2.txt")
# print(X)
db=DBSCAN(eps=0.5 ,min_samples=20,metric='euclidean').fit(X)
labels = db.labels_
print('Labels:',labels)

raito=len(labels[labels[:] == -1]) / len(labels)
print( 'Noise raito: ',format(raito,'.2%'))
n_clusters_= len(set(labels)) - (1 if -1 in labels else 0)
print( ' Est imated number of clusters: %d' % n_clusters_)
print( " Silhouette Coefficient: %0.3f" % metrics.silhouette_score(X, labels))
for i in range(n_clusters_):
    print('Cluster',i,':')
    print(list(X[labels == i,0].flatten())) 

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

plt.show()
# plt.hist(X[:,0],24)
# plt.show()

课程中的代码有问题,对应参数是不会得出课程中的结果。
不断调参,尝试。
经过思考,发现了问题,横轴间距太小,如果调大eps,必然会横向误判。
如果纵向缩小一些。。。
于是尝试进行了归一化,结果与课程相符。

不过课程后面提到用对数变换,不过我貌似那是针对第二个例子。应该也可以。

机器学习sklearn无监督学习聚类算法k-means(代码片段)

importmatplotlib.pyplotaspltfromsklearn.datasets.samples_generatorimportmake_blobsfromsklearn.clusterimportKMeans#生成测试数据#X为样本特征,Y为样本簇类别,共1000个样本,每个样本2个特征,对应x和y轴,共4个簇 查看详情

python与机器学习

...学习的目标机器学习分类pythonscikit-learnscikit-learn常用函数sklearn库的简介无监督学习聚类clustering欧式距离曼哈顿距离马氏距离夹角余弦降维k-means聚类算法DBSCAN密度聚类PCA方法及其应用非负矩阵分解(NMF)基于聚类的“图... 查看详情

机器学习11-分类与监督学习,朴素贝叶斯分类算法(代码片段)

1.理解分类与监督学习、聚类与无监督学习。简述分类与聚类的联系与区别。简述什么是监督学习与无监督学习。分类与聚类的区别:是否有已知分类的条件。分类没有,聚类有。监督学习:已知某些类别的情况下,即具有事先... 查看详情

机器学习1011.分类与监督学习,朴素贝叶斯分类算法

1.理解分类与监督学习、聚类与无监督学习。简述分类与聚类的联系与区别。简述什么是监督学习与无监督学习。 简述分类与聚类的联系与区别:聚类分析是研究如何在没有训练的条件下把样本划分为若干类。在分类中,已... 查看详情

机器学习sklearn无监督学习降维算法pca(代码片段)

importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromsklearn.datasetsimportmake_blobsfromsklearn.decompositionimportPCA#X为样本特征,Y为样本簇类别,共1000个样本,每个样本3个特征,共4个簇 查看详情

机器学习sklearn无监督学习降维算法pca(代码片段)

importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromsklearn.datasetsimportmake_blobsfromsklearn.decompositionimportPCA#X为样本特征,Y为样本簇类别,共1000个样本,每个样本3个特征,共4个簇 查看详情

1.2:无监督学习导学

...学习。无监督学习最常应用的场景是聚类和降维。聚类(sklearn.cluster模块)定义聚类(clustering),就是根据数据的“相似性”将数据分为多类的过程。评估两个不同样本之间的“相似性”,通常使用的方法就是计算两... 查看详情

05_无监督学习--聚类模型--k均值(代码片段)

...p;npimport matplotlib.pyplot as plt# 这里直接 sklearn 里的数据集from sklearn.dat 查看详情

机器学习sklearn无监督学习降维算法nmfnon-negativematrixfactorization(代码片段)

importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromsklearn.datasetsimportmake_blobsfromsklearn.decompositionimportNMFfromsklearn.datasetsimportload_irisiris=load_iris()iris_X= 查看详情

机器学习sklearn无监督学习降维算法nmfnon-negativematrixfactorization(代码片段)

importmatplotlib.pyplotaspltfrommpl_toolkits.mplot3dimportAxes3Dfromsklearn.datasetsimportmake_blobsfromsklearn.decompositionimportNMFfromsklearn.datasetsimportload_irisiris=load_iris()iris_X= 查看详情

机器学习-聚类clustering

简介前面介绍的线性回归,SVM等模型都是基于数据有标签的监督学习方法,本文介绍的聚类方法是属于无标签的无监督学习方法。其他常见的无监督学习还有密度估计,异常检测等。聚类就是对大量未知标注的数据集,按照数据... 查看详情

吴恩达机器学习学习笔记——1.5无监督学习

...在一起,聚类算法将数据集分成不同的聚类。也就是说,机器不知道这些数据点具体是什么属性,到底是干什么的,但是可以将具有相同属性的数据点归为一类。3无监督学习的应用:大型计算机集群:找出趋于协同工作的机器... 查看详情

机器学习-聚类kmeans(代码片段)

图解K-Means算法本文中介绍的是一种常见的无监督学习算法,名字叫做K均值算法:K-Means算法。K-Means算法在无监督学习,尤其是聚类算法中是最为基础和重要的一个算法。它实现起来非常简单。聚类效果也很不错的ÿ... 查看详情

分类与监督学习,朴素贝叶斯分类算法

...习:有监督学习是在建立模型之前已经给出训练数据集,机器根据训练数据集训练出模型并对新数据进行预测。无 查看详情

机器学习——11.分类与监督学习,朴素贝叶斯分类算法

1.理解分类与监督学习、聚类与无监督学习。简述分类与聚类的联系与区别。联系:都是对数据进行划分的方法区别:分类就是“贴标签”,在事先已有的类中按这些类的性质来进行划分,要做的就是将每一条记录分别属... 查看详情

机器学习中的聚类算法

1.概述根据所拥有的数据,可以使用三种不同的机器学习方法,包括监督学习、半监督学习和无监督学习。在监督学习中,根据已标记数据,因此可以确定输出是关于输入的某种(隐函数)的正确值。通过... 查看详情

机器学习sklean无监督学习聚类算法k-means(代码片段)

importmatplotlib.pyplotaspltfromsklearn.datasets.samples_generatorimportmake_blobsfromsklearn.clusterimportKMeans#生成测试数据#X为样本特征,Y为样本簇类别,共1000个样本,每个样本2个特征,对应x和y轴,共4个簇 查看详情

无监督聚类算法该如何评价

      学过机器学习的小伙伴应该都很清楚:几乎所有的机器学习理论与实战教材里面都有非常详细的理论化的有监督分类学习算法的评价指标。例如:正确率、召回率、精准率、ROC曲线、AUC曲线。但是几乎没有任何... 查看详情