论文复现跳转链接如下
点击跳转 🚀 ⭐️
(一)技术学习任务
Ⅰ、机器学习之聚类
1、基本介绍概念
- 监督学习是利用标记数据进行训练,可以用于分类、回归等任务。
- 无监督学习则是利用未标记数据进行训练,可以用于聚类、异常检测等任务(没有对与错,寻找数据的共同特点)。
- 半监督学习则是介于监督学习和无监督学习之间的一种学习方式,利用一小部分已标记数据和大量未标记数据进行训练。
- 强化学习则是利用智能体与环境的交互进行学习,可以用于处理与环境交互的问题。
-
无监督学习 是机器学习的一种重要类型,它专注于从未标记或未分类的数据中发现隐藏的模式和结构。与监督学习不同,无监督学习的数据没有显式的标签或已知的结果变量,其核心目的是探索数据的内在结构和关系。
-
机器学习的二种方法,没有给定事先标记过的训练示例,自动对输入的数据进行分类或分群,
优点:- ①算法不受监督信息(偏见)的约束,可能考虑到新的信息
- ②不需要标签数据,极大程度扩大数据样本
主要应用:聚类分析、关联规则、维度缩减、聚类分析
无监督学习主要包括以下几种任务:
- 聚类:将数据划分为多个群组或簇,使得同一簇内的数据点彼此相似,而不同簇的数据点相异。常见的聚类算法包括K-均值(K-means)、层次聚类(Hierarchical clustering)等。
- 降维:减少数据中的变量数量,提取重要特征,同时保留数据的大部分重要信息。降维有助于提高计算效率、降噪和改进数据可视化。常见的降维算法包括主成分分析(PCA)、t-SNE等。
- 关联规则学习:在大型数据集中发现变量之间的有意义的关系。这有助于市场篮子分析、交叉销售等应用。
- 异常检测:识别数据集中的异常、奇异或不符合预期的数据点。这在欺诈检测、网络安全等领域有重要应用。
- 生成模型:学习数据的分布,以生成新的、与训练数据类似的数据。这有助于数据增强、艺术创作等。
2、聚类分析基本介绍
KMeans聚类:
①根据数据与中心点距离划分类别
②基于类别数据更新中心点
③重复过程直到收敛
特点:
1、实现简单,收敛快
2、需要指定类别数量
均值漂移聚类(Meanshift):
①在中心点一定区域裣索薮据点
②更新中心
③重夏流程到中心点稳定
特点:
1、自动发现类别数量,不需要人工选择
2、需要选择区域半径
DBSCAN算法(基于密度的空间聚类算法)
①基于区域点密度筛选有效数据
②基于有效数据向周边扩张,直到没有新点加入
特点:
1、过滤噪音数据
2、不需要人为选择类别数量
3、数据密度不同时影响结果
3、K均值聚类
- K-均值算法:以空间K个点为中心进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础但也最为重要的算法。
算法流程:
1、选择聚类的个数k
2、确定聚类中心
3、根据点到聚类中心聚类确定各个点所属类别
4、根据各个类别数据更新聚类中心
5、重复以上步骤直到收敛(中心点不再变化)
优点:
1、原理简单,实现容易,收敛速度快
2、参数少,方便使用
缺点:
1、必须设置簇的数量
2、随机选择初始聚类中心,结果可能缺乏一致性
4、K近邻分类模型(KNN)
- 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例,这K个实例的多数属于某个类,就把该输入实例分类到这个类中。
5、均值漂移聚类
- 均值漂移算法:一种基于密度梯度上升的聚类算法(沿着密度上升方向寻找聚类中心点)
算法流程:
1、随机选择未分类点作为中心点
2、找出离中心点距离在带宽之丙的点,记做集合S
3、计算从中心点到集合S中每个元素的偏移向量M
4、中心点以向量M移动
5、重复步骤2-4,直到收敛
6、重复1-5直到所有的点都被归类
7、分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类
6、代码实现
- KMeans算法实现聚类
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# KMeans算法实现聚类
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score
data = pd.read_csv('data.csv')
x = data.drop(['labels'], axis=1)
y = data.loc[:, 'labels']
# print(pd.value_counts(y)) # 查看各个类别的个数
# 数据可视化
plt.figure(figsize=(10, 10))
label0 = plt.scatter(x.loc[:, 'V1'][y == 0], x.loc[:, 'V2'][y == 0])
label1 = plt.scatter(x.loc[:, 'V1'][y == 1], x.loc[:, 'V2'][y == 1])
label2 = plt.scatter(x.loc[:, 'V1'][y == 2], x.loc[:, 'V2'][y == 2])
plt.title('title')
plt.xlabel('v1')
plt.ylabel('v2')
plt.legend((label0, label1, label2), ('label0', 'label1', 'label2'))
# plt.show()
km_model = KMeans(n_clusters=3, random_state=0)
km_model.fit(x)
center = km_model.cluster_centers_
# print("中心点", center)
# print(center[:,0],center[:,1])
plt.scatter(center[:, 0], center[:, 1], color='black')
plt.show()
# 计算准确率
y_predict = km_model.predict(x)
print(accuracy_score(y, y_predict))
# 可视化结果索引
plt.figure(figsize=(10, 10))
label0 = plt.scatter(x.loc[:, 'V1'][y_predict == 0], x.loc[:, 'V2'][y_predict == 0])
label1 = plt.scatter(x.loc[:, 'V1'][y_predict == 1], x.loc[:, 'V2'][y_predict == 1])
label2 = plt.scatter(x.loc[:, 'V1'][y_predict == 2], x.