快速入门Python机器学习(29)

简介: 快速入门Python机器学习(29)

1.5 DBSCAN


1.5.1原理

DBSCAN(Density-based spatial clustering of application with nose):基于密度的有噪音应用空间聚类。

密度大的地方是一类,密度小的地方是分界线。不需要事先指明簇的个数。

流程

while(存在没有被访问过的点) :
    选择任意一个点
    for (遍历该点<eps的所有点) :<="" span="">
        if(点的个数<= min_sample):
            标记为噪音(noise),这个点不属于任何簇
        else:
            这个点标记为核心样本(核心点),分配一个簇标签
        for (该点在距离eps内的邻居) &&(邻居存在核心样本):
            if (没有分配一个簇):
                将刚才创建的簇分配给它
            elif(核心样本) :
                依次访问它的邻居


名词

  • 核心点
  • 核心点距离eps内的点(边界点)
  • 噪音


1.5.2类参数、属性和方法


class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)


属性

属性

类别

介绍

core_sample_indices_

ndarray of shape (n_core_samples,)

核心样本的指数

components_

ndarray of shape (n_core_samples, n_features)

通过培训找到的每个核心样本的副本

labels_

ndarray of shape (n_samples)

将数据集中每个点的标签进行聚类以fit()。噪声样本的标签为-1


方法

fit(X[, y, sample_weight])

根据特征或距离矩阵执行DBSCAN聚类。

fit_predict(X[, y, sample_weight])

从要素或距离矩阵执行DBSCAN聚类,并返回聚类标签。

get_params([deep])

获取此估计器的参数。

set_params(**params)

设置此估计器的参数。


1.5.3make_blobs数据进行DBSCAN算法分析

def dbscan_for_blobs():
        myutil = util()
        epss=[0.5,2,0.5]
        min_sampless=[5,5,20]
        for (eps,min_samples) in zip(epss,min_sampless):
                db = DBSCAN(eps=eps,min_samples=min_samples)
                blobs = make_blobs(random_state=1,centers=1)
                X = blobs[0]
                clusters = db.fit_predict(X)
                title = "eps="+str(eps)+",min_samples="+str(min_samples)
                myutil.draw_scatter_for_Clustering(X,"",clusters,title,"DBSN")

image.png

image.png

eps指定划分为一簇样本的距离有多远,越大,聚类覆盖面越大(默认0.5)。eps加大,簇变大。

min_sample聚类核心点的个数, min_sample越大,核心点个数越小,噪音也就越大; min_sample越小,核心点个数越多,噪音也就越少。默认min_sample=2

min_samples越大,核心点个数越小,噪音也就越大

#绘制不同eps,min_sample下的DBSCAN分布
    mglearn.plots.plot_dbscan()
    plt.show(


输出

min_samples: 2 eps: 1.000000  cluster: [-1  0  0 -1  0 -1  1  1  0  1 -1 -1]
min_samples: 2 eps: 1.500000  cluster: [0 1 1 1 1 0 2 2 1 2 2 0]
min_samples: 2 eps: 2.000000  cluster: [0 1 1 1 1 0 0 0 1 0 0 0]
min_samples: 2 eps: 3.000000  cluster: [0 0 0 0 0 0 0 0 0 0 0 0]
min_samples: 3 eps: 1.000000  cluster: [-1  0  0 -1  0 -1  1  1  0  1 -1 -1]
min_samples: 3 eps: 1.500000  cluster: [0 1 1 1 1 0 2 2 1 2 2 0]
min_samples: 3 eps: 2.000000  cluster: [0 1 1 1 1 0 0 0 1 0 0 0]
min_samples: 3 eps: 3.000000  cluster: [0 0 0 0 0 0 0 0 0 0 0 0]
min_samples: 5 eps: 1.000000  cluster: [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
min_samples: 5 eps: 1.500000  cluster: [-1  0  0  0  0 -1 -1 -1  0 -1 -1 -1]
min_samples: 5 eps: 2.000000  cluster: [-1  0  0  0  0 -1 -1 -1  0 -1 -1 -1]
min_samples: 5 eps: 3.000000  cluster: [0 0 0 0 0 0 0 0 0 0 0 0]

image.png


1.5.4 DBSCAN分析鸢尾花数据

def dbscan_for_iris():
        myutil = util()
        X,y = datasets.load_iris().data,datasets.load_iris().target
        dbscan = DBSCAN(min_samples=0.5,eps=1)
        dbscan.fit(X)
        result = dbscan.fit_predict(X)
        title = "鸢尾花"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"DBSN")


输出

鸢尾花原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
鸢尾花 DBSN 训练簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]

image.png


1.5.5 DBSCAN分析红酒数据

def dbscan_for_wine():
        myutil = util()
        X,y = datasets.load_wine().data,datasets.load_wine().target
        dbscan = DBSCAN(min_samples=0.5,eps=50)
        dbscan.fit(X)
        result = dbscan.fit_predict(X)
        title = "红酒"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"DBSN")


输出

红酒原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
红酒 DBSN 训练簇标签为:
[0 0 0 1 2 1 3 3 0 0 1 3 3 0 1 3 3 0 4 2 2 2 0 0 2 2 0 3 2 0 3 1 0 3 0 2 2 0 0 2 2 0 0 2 2 0 0 0 0 3 0 3 0 5 0 0 0 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 6 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]

image.png


1.5.6 DBSCAN分析乳腺癌数据

def dbscan_for_breast_cancer():
        myutil = util()
        X,y = datasets.load_breast_cancer().data,datasets.load_breast_cancer().target
        dbscan = DBSCAN(min_samples=0.5,eps=100)
        dbscan.fit(X)
        result = dbscan.fit_predict(X)
        title = "乳腺癌"
        myutil.draw_scatter_for_Clustering(X,y,result,title,"DBSN")


输出

乳腺癌原始数据集分配簇标签为:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0…1 1 1 1 1 1 1 0 0 0 0 0 0 1]
乳腺癌 DBSN 训练簇标签为:
[ 0  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  2  1  1  1  1  3 …1 15  1  1  1  1  1  1  7  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1…1  1  1  1  1  1  1  1  1  1  1  1 23  1  1  1  1]

image.png


1.5.7 DBSCAN分析两个月亮数据

#两个月亮
def dbscan_for_two_moon():
        myutil = util()
        X, y = datasets.make_moons(n_samples=200,noise=0.05, random_state=0)
        scaler = StandardScaler()
        scaler.fit(X)
        X_scaled = scaler.transform(X)
        # 打印处理后的数据形态
        print("处理后的数据形态:",X_scaled.shape)
        # 处理后的数据形态: (200, 2) 200个样本 2类    
        dbscan = DBSCAN()
        result=dbscan.fit_predict(X_scaled)
        title = "两个月亮"
        #绘制簇分配结果
        myutil.draw_scatter_for_Clustering(X,y,result,title,"DBSCAN")


输出

处理后的数据形态: (200, 2)
两个月亮原始数据集分配簇标签为:
[0 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1]
两个月亮 DBSCAN 训练簇标签为:
[0 1 1 0 1 1 0 1 0 1 0 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 1 0 1 0 0 1 0 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 0 0 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1 0 0 1 1 0 1 1 1 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 0 0 0 0 0 0 1 0 1 1 0 1]

image.png

目录
相关文章
|
4天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
18 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
6天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
17 2
|
8天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
23 1
|
8天前
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
25 1
|
14天前
|
机器学习/深度学习 数据采集 算法
Python机器学习:Scikit-learn库的高效使用技巧
【10月更文挑战第28天】Scikit-learn 是 Python 中最受欢迎的机器学习库之一,以其简洁的 API、丰富的算法和良好的文档支持而受到开发者喜爱。本文介绍了 Scikit-learn 的高效使用技巧,包括数据预处理(如使用 Pipeline 和 ColumnTransformer)、模型选择与评估(如交叉验证和 GridSearchCV)以及模型持久化(如使用 joblib)。通过这些技巧,你可以在机器学习项目中事半功倍。
21 3
|
19天前
|
机器学习/深度学习 人工智能 算法
机器学习基础:使用Python和Scikit-learn入门
机器学习基础:使用Python和Scikit-learn入门
26 1
|
25天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
6月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
239 14
|
6月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
114 1
|
6月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)