机器学习(五) -- 无监督学习(1) --聚类2

系列文章目录及链接

上篇:机器学习(五) -- 无监督学习(1) --聚类1
下篇:


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。

由于作者时间不算富裕,有些内容的《算法实现》部分暂未完善,以后有时间再来补充。见谅!

文中为方便理解,会将接口在用到的时候才导入,实际中应在文件开始统一导入。


 三、**算法实现

四、接口实现

1、K-means

1.1、API

sklearn.cluster.KMeans导入:
from sklearn.cluster import KMeans语法:
KMeans(n_clusters=8,init=‘k-means++’,n_init='warn', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')
参数:n_clusters:开始的聚类中心数量,默认=8,init:初始化方法,默认为‘k-means ++属性:
KMeans.cluster_centers_:簇中心的坐标
KMeans.labels_:每个样本的标签方法:
KMeans.fit(x)
KMeans.predict(x)
KMeans.fit_predict(x)计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

1.2、流程

1.2.1、获取数据
from sklearn.datasets import load_irisfrom sklearn.cluster import KMeans# 获取数据
iris = load_iris()
1.2.2、数据预处理
# 划分数据集
x=iris.data
y=iris.target
1.2.3、特征工程
1.2.4、模型训练
# 实例化学习器
kmeans = KMeans(n_clusters=3, random_state=1473, n_init='auto')# 模型训练
kmeans.fit(x)
1.2.5、模型评估
# 用模型计算测试值,得到预测值
y_pre = kmeans.predict(x)# 可视化
plt.figure(figsize=(14,7))
plt.subplot(121)
# 绘制iris原本的类别
plt.scatter(x[:, 0], x[:, 1], c=y)plt.subplot(122)
# 绘制kmeans聚类结果
plt.scatter(x[:, 0], x[:, 1], c=y_pre)
plt.show()
from sklearn.metrics import jaccard_score, fowlkes_mallows_score, adjusted_rand_score, davies_bouldin_score
print('K均值聚类模型的Jaccard系数:', jaccard_score(y, y_pre,average='micro'))
print('K均值聚类模型的FM系数:', fowlkes_mallows_score(y, y_pre))
print('K均值聚类模型的调整Rand指数:', adjusted_rand_score(y, y_pre))
print('K均值聚类模型的DB指数:', davies_bouldin_score(x, kmeans.labels_))

1.2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

2、K-Medoids

make_blobs的API:

        生成聚类数据集

sklearn.datasets.make_blobs导入:
from sklearn.datasets import make_blobs方法:
x, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],cluster_std=[0.4, 0.2, 0.2, 0.2],random_state=1473)x为样本特征,y为样本簇类别n_samples:样本数,默认=100;n_features:样本特征数(样本维度),默认=2;centers:族中心个数,可以是数字,也可以是点坐标,默认=3;cluster_std:簇标准差,默认=10;

2.1、获取数据

from sklearn.datasets import make_blobs# 获取数据
x,y = make_blobs(n_samples=150, centers=3, n_features=2, random_state=1734)# 可视化
plt.figure()
plt.scatter(x[:, 0], x[:, 1], c='b')
plt.show()

2.2、数据预处理

2.3、特征工程

2.4、模型训练

class KMedoids1:def __init__(self,k=3,max_iter=100):self.k = kself.max_iter = max_iterdef euclidean_distance(self, x1, x2):return np.sqrt(np. sum( (x1 - x2) **2))def fit(self, X):n_samples,n_features = X.shape#初始化聚类中心,从样本点中随机选取k个点作为聚类中心centers = np.sort(np.random.choice(n_samples,self.k,replace=False))medoids = X[centers]for i in range(self.max_iter) :#计算每个样本点到每个聚类中心之间的距离distances = np.zeros((n_samples,self.k))for j in range(self.k):distances[:,j] = np.apply_along_axis(self.euclidean_distance,1,X,medoids[j])#找到距离每个聚类中心最近的点,作为新的聚类中心closest_centroid = np.argmin(distances,axis=1)for j in range(self.k):medoids[j] = np.median( X[closest_centroid == j],axis=0)self.medoids = medoidsself.labels = closest_centroidreturn self
kmedoids=KMedoids1(3)
kmedoids.fit(x)

2.5、模型评估

plt.figure()
plt.scatter(x[:, 0], x[:, 1], c=kmedoids.labels, cmap='viridis', marker='o', label='Data points')
plt.scatter(kmedoids.medoids[:,0],kmedoids.medoids[:,1], c='red', marker='X', s=100, label='Medoids')
plt.title('K-medoids聚类')
plt.xlabel('特征 1')
plt.ylabel('特征 2')
plt.show()

2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

3、层次聚类--AGNES

2.1、API

sklearn.cluster.AgglomerativeClustering导入:
from sklearn.cluster import AgglomerativeClustering语法:
AgglomerativeClustering(n_clusters=2, *, affinity='euclidean', memory=None, connectivity=None, compute_full_tree='auto', linkage='ward', distance_threshold=None)
参数:n_clusters:指定聚类的簇数。affinity:指定距离度量的方式,可以是预定义的(如"euclidean"、"l1"、"l2"、"manhattan"等)或者自定义的距离度量函数。linkage:指定连接方式,用于计算两个簇之间的距离,可以是预定义的字符串(如" single"、"ward"、"complete"、"average"等)或者自定义的连接函数。connectivity:指定连接矩阵,用于限制哪些样本可以连接到一起的布尔数组或可调用对象。compute_full_tree:指定是否计算完整的层次聚类树。distance_threshold:指定停止合并簇的距离阈值。memory:指定内存缓存的路径,以便加速计算。compute_distances:指定是否在计算连接矩阵时计算距离矩阵。属性:方法:

2.2、流程

2.2.1、获取数据
from scipy.cluster.hierarchy import linkage          #导入linage函数用于层次聚类
from scipy.cluster.hierarchy import dendrogram       #dendrogram函数用于将聚类结果绘制成树状图
from scipy.cluster.hierarchy import fcluster         #fcluster函数用于提取出聚类的结果
from sklearn.datasets import make_blobs              #make_blobs用于生成聚类算法的测试数据
from sklearn.cluster import AgglomerativeClustering  #自底向上层次聚类算法# 获取数据
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4, random_state=1473)# 可视化
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c='b')
plt.show()

 

2.2.2、数据预处理
2.2.3、特征工程
2.2.4、模型训练
#层次聚类实现
Z = linkage(X,  method='ward', metric='euclidean')
print(Z.shape)
print(Z[: 5])
2.2.5、模型评估
# 用模型计算测试值,得到预测值# 
#画出树状图
plt.figure()
dendrogram(Z, truncate_mode='lastp', p=20, show_leaf_counts=False, leaf_rotation=90, leaf_font_size=15,show_contracted=True)
plt.show()

#根据临界距离返回聚类结果
d = 15
labels_1 = fcluster(Z, t=d, criterion='distance')
print(labels_1[: 100])  # 打印聚类结果
print(len(set(labels_1)))  # 看看在该临界距离下有几个 cluster#根据聚类数目返回聚类结果
k = 3
labels_2 = fcluster(Z, t=k, criterion='maxclust')
print(labels_2[: 100])
list(labels_1) == list(labels_2)  # 看看两种不同维度下得到的聚类结果是否一致#聚类的结果可视化,相同的类的样本点用同一种颜色表示
plt.figure()
plt.scatter(X[:, 0], X[:, 1], c=labels_2, cmap='prism')
plt.show()

 

2.2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

2.2.7、对比不同方法聚类效果
from time import time
import numpy as np
from sklearn.datasets import make_blobs
from scipy.cluster.hierarchy import linkage, fcluster
from sklearn.metrics.cluster import adjusted_mutual_info_score
import matplotlib.pyplot as plt#生成样本点
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels = make_blobs(n_samples=750, centers=centers,cluster_std=0.4, random_state=0)#可视化聚类结果
def plot_clustering(X, labels, title=None):plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='prism')if title is not None:plt.title(title, size=17)plt.axis('off')plt.tight_layout()#进行 Agglomerative 层次聚类
linkage_method_list = ['single', 'complete', 'average', 'ward']plt.figure(figsize=(10, 8))
ncols, nrows = 2, int(np.ceil(len(linkage_method_list) / 2))
plt.subplots(nrows=nrows, ncols=ncols)
for i, linkage_method in enumerate(linkage_method_list):print('method %s:' % linkage_method)start_time = time()Z = linkage(X, method=linkage_method)labels_pred = fcluster(Z, t=3, criterion='maxclust')print('Adjust mutual information: %.3f' % adjusted_mutual_info_score(labels, labels_pred))print('time used: %.3f seconds' % (time() - start_time))plt.subplot(nrows, ncols, i + 1)plot_clustering(X, labels_pred, '%s linkage' % linkage_method)
plt.show()

 

4、密度聚类--DBSCAN

4.1、API

sklearn.cluster.DBSCAN导入:
from sklearn.cluster import DBSCAN语法:
DBSCAN(eps=0.5, min_samples=5, metric='euclidean', algorithm='auto', leaf_size=30, p=None, n_jobs=1)
参数:eps:两个样本之间的最大距离,即扫描半径min_samples :作为核心点的话邻域(即以其为圆心,eps为半径的圆,含圆上的点)中的最小样本数(包括点本身)。metric :度量方式,默认为欧式距离,还有metric=‘precomputed’(稀疏半径邻域图)algorithm:近邻算法求解方式,有四种:‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’leaf_size:叶的大小,在使用BallTree or cKDTree近邻算法时候会需要这个参数n_jobs :使用CPU格式,-1代表全开属性:
DBSCAN.core_sample_indices_:核心样本指数。(此参数在代码中有详细的解释)
DBSCAN.labels_:数据集中每个点的集合标签给,噪声点标签为-1。
DBSCAN.components_ :核心样本的副本方法:
DBSCAN.fit(x)
DBSCAN.predict(x)
DBSCAN.fit_predict(x)计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)

 make_circles的API:

生成数据集,形成一个二维的大圆,包含一个小圆

sklearn.datasets.make_circles导入:
from sklearn.datasets import make_circles方法:
x, y = make_circles(n_samples=5000, factor=.6, noise=.05, random_state=1473)x为样本特征,y为样本簇类别n_samples:样本数,默认=100;factor:0 < double <1 默认值0.8,内外圆之间的比例因子noise:设置噪声,小的话比较集中

4.2、流程

4.2.1、获取数据
from sklearn import datasets
from sklearn.cluster import DBSCAN# 获取数据
# 生成两簇非凸数据
x1, y2 = make_blobs(n_samples=1000, n_features=2,centers=[[1.2, 1.2]], cluster_std=[[.1]],random_state=9)# 一簇对比数据
x2, y1 = datasets.make_circles(n_samples=5000, factor=.6, noise=.05)
x = np.concatenate((x1, x2))
plt.scatter(x[:, 0], x[:, 1], marker='o')
plt.show()

 

4.2.2、数据预处理
4.2.3、特征工程
4.2.4、模型训练
# 实例化学习器
dbs = DBSCAN(eps=0.1, min_samples=12).fit(x)
print('DBSCAN模型:\n', dbs)# 模型训练+预测
ds_pre = dbs.fit_predict(x)

4.2.5、模型评估
# 用模型计算测试值,得到预测值# 
# 绘制DBSCAN模型聚类结果
plt.scatter(x[:, 0], x[:, 1], c=ds_pre)
plt.title('DBSCAN', size=17)
plt.show()

 

4.2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。

5、高斯混合模型(GMM)

5.1、API

sklearn.cluster.KMeans导入:
from sklearn.cluster import KMeans语法:
KMeans(n_clusters=8,init=‘k-means++’)n_clusters:开始的聚类中心数量init:初始化方法,默认为'k-means ++’labels_:默认标记的类型,可以和真实值比较(不是值比较)

5.2、流程

5.2.1、获取数据

# API导入
from sklearn.mixture import GaussianMixture# 获取数据
# 生成模拟数据
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)

5.2.2、数据预处理

5.2.3、特征工程

5.2.4、模型训练

# 实例化学习器
gmm = GaussianMixture(n_components=4)# 模型训练
gmm.fit(X)

5.2.5、模型评估

# 预测测试集结果
clusters = gmm.predict(X)# 可视化
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap='viridis', marker='o', s=50)
plt.title("Gaussian Mixture Model Clustering")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.show()

 

5.2.6、结果预测

经过模型评估后通过的模型可以代入真实值进行预测。


旧梦可以重温,且看:机器学习(五) -- 无监督学习(1) --聚类1
欲知后事如何,且看:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/49433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2个案例区分是平行眼还是交叉眼,以及平行眼学习方法

案例一&#xff1a; 交叉眼&#xff1a;看到凸出的“灌水”&#xff0c;是交叉眼。PS&#xff1a;看的时候&#xff0c;眼是斗鸡眼&#xff0c;眼睛易疲劳 平行眼&#xff1a;看到凹陷的“灌水”&#xff0c;是平行眼。PS&#xff1a;看的时候眼睛是平视&#xff0c;不容易疲…

springboot校园车辆管理系统-计算机毕业设计源码63557

校园车辆管理系统 摘 要 校园车辆管理系统是当前高校校园管理中的一个重要方面&#xff0c;其有效管理和调度对于提升校园的运行效率和管理水平至关重要。本论文基于Spring Boot框架开发了一套校园车辆管理系统&#xff0c;系统主要包括用户和管理员两大角色&#xff0c;涵盖…

Sprint Boot 2 核心功能(二)

数据访问 1、SQL 1.1、数据源的自动配置-HiKariDataSource 1.1.1、导入JDBC场景 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency>数据库驱动&#xff1…

什么是湖仓一体?湖仓一体解决了什么问题?

目录 一、数据仓库&数据湖&湖仓一体概念辨析 1.数据仓库&#xff08;Data Warehouse&#xff09; 2.数据湖&#xff08;Data Lake&#xff09; 3.湖仓一体&#xff08;Lakehouse&#xff09; 二、湖仓一体的优点 三、湖仓一体要解决什么问题? 四、结语 随着当前大数据…

在spyder中使用arcgis pro的包

历时2天终于搞定了 目标&#xff1a;在anconda中新建一个arcpyPro环境&#xff0c;配置arcgispro3.0中的arcpy 一、安装arcgispro3.0 如果安装完之后打开arcgispro3.0闪退&#xff0c;就去修改注册表&#xff08;在另一台电脑安装arcgispro遇到过&#xff09; 安装成功后可…

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址&#xff0c;其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme&#xff1a;协议&#xff0c;常用的协议有 Http&#xff0c;https&#xff0c;ftp等等&#xff1b; user…

如何借助生成式人工智能引领未来的科技狂潮

如何借助生成式人工智能引领未来的科技狂潮 1. 生成式AI的现状1.1 技术基础1.1.1 深度学习1.1.2 生成对抗网络&#xff08;GANs&#xff09;1.1.3 变分自编码器&#xff08;VAEs&#xff09; 1.2 主要应用1.2.1 语言模型1.2.2 图像生成1.2.3 音频与视频生成 2. 未来的发展趋势2…

DNS服务器的搭建

目录 1、DNS服务器端软件 2、DNS服务器搭建 第⼀步&#xff1a;环境准备 第二步&#xff1a;web主机的搭建 第三步&#xff1a;服务器端配置DNS 第四步&#xff1a;配置DNS主机 第五步&#xff1a; 检查配置文件是否正确 3、搭建完成 回到客户端测试 1、DNS服务器端软…

Java语言程序设计基础篇_编程练习题*15.21(拖动点)

*15.21(拖动点) 绘制一个圆&#xff0c;在圆上有三个随机点。连接这些点构成一个三角形。显示三角形中的角度。使用鼠标沿着圆的边拖动点。拖动的时候&#xff0c;三角形以及角度动态地重新显示&#xff0c;如图15-30b 所示。计算三角形角度的公式参考程序清单4-1 可以参考上…

SD换脸reactor

目前安装最复杂的插件 ReActor&#xff0c; 安装吐了&#xff0c;幸亏自己是屌丝程序员&#xff0c;插件是通过python写的&#xff0c;通过给源代码输出一些信息&#xff0c;最终定位问题&#xff0c;安装成功了。看看他的换脸效果. 图生图 重绘幅度为0 reactor 设置五官图像…

【Django】在vscode中运行调试Django项目(命令及图形方式)

文章目录 命令方式图形方式默认8000端口设置自定义端口 命令方式 python manage.py runserver图形方式 默认8000端口 设置自定义端口

vue3+vite 实现动态引入某个文件夹下的组件 - glob-import的使用

<template><div class"user-content"><HeaderTitle title"用户详情"></HeaderTitle><div class"main-content"><div><UserForm /></div><div><TableList></TableList></d…

基于Python的帕金森病人步态分析

目录 摘要一、引言1.背景知识2.实验目的和意义 二、实验方法1.实验环境2.实验步骤2.1 生成信号&#xff0c;进行手动傅里叶变换以及内置 FFT 函数傅里叶变换2.2 进行手动傅里叶变换以及内置 FFT 函数傅里叶变换2.3 基于傅里叶变换的步态信息分析2.4 基于傅里叶变换的卷积分析 3…

【事半功倍】视频素材播放之不二法门——倍速之法,无级变速

【事半功倍】视频素材播放之不二法门——倍速之法&#xff0c;无级变速 一、一般の三种方式1.1 原生H5 video1.2 Video.js1.3 动态切换播放速度 二、最佳设置三、效果 一、一般の三种方式 1.1 原生H5 video 对于原生HTML5 video 元素&#xff0c;你可以直接使用 playbackRate…

【算法刷题】【力扣】| 最长回文子串|

给你一个字符串 s&#xff0c;找到 s 中最长的 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。示例 2&#xff1a; 输入&#xff1a;s "cbbd" 输出&#x…

智慧学院智能化项目规划设计方案

1. 项目概况 智慧学院智能化项目规划旨在打造集人才培养、科学研究、技术创新等于一体的高端研究生院。项目占地面积广阔&#xff0c;包含教学、科研、学生宿舍、教师宿舍、公共服务和公共配套等多个功能区域。 2. 建设思想 建设思想强调投资合理、统一规划、立足现状、适度…

使用Python 机器学习-5-Python Mini Project–使用深度学习进行乳腺癌分类

一、前言 该文章仅作为个人学习使用 二、正文 项目源代码&#xff1a;Python 项目 - 使用深度学习进行乳腺癌分类 - DataFlair (data-flair.training) 数据集&#xff1a;乳腺组织病理学图像 |卡格尔 (kaggle.com) Python 中的乳腺癌分类项目 了解 Python 中乳腺癌分类项目中使…

【数据结构】二叉树——顺序结构——堆及其实现

一、树 1.1、树的概念和结构 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点组成的一个具有层次关系的集合。 树有一个特殊的节点&#xff0c;称为根节点&#xff0c;根节点没有前驱结点。 除根节点外&#xff0c;其余部分被分为M&…

海康视频WEB插件

引入相关依赖 index.html <script src"/video/web-control_1.2.5.min.js"></script> <script src"/video/jquery-1.12.4.min.js" type"text/javascript"></script> <script src"/video/jsencrypt.min.js" …

[UE 虚幻引擎] DTHmacSha 蓝图HMACSHA加密算法插件说明

本插件可以在虚幻引擎中使用蓝图对字符串和文件进行HMACSHA加密。 1.节点说明 HMACSHA一共有5种加密方式&#xff0c;分辨是 HMAC SHA-1&#xff0c; HMAC SHA-224&#xff0c;HMAC SHA-256&#xff0c;HMAC SHA-384&#xff0c;HMAC SHA-512。 本插件对每种加密方式提供3个节点…