非监督学习简单介绍

本文介绍了非监督学习的基本概念,重点讲解了聚类算法,如K-means、层次聚类和DBSCAN,以及降维技术PCA和t-SNE。这些方法用于发现数据的内在结构和模式,降低复杂度,帮助理解高维数据。
摘要由CSDN通过智能技术生成

非监督学习简单介绍

非监督学习是机器学习中的一种方法,其目标是基于数据的内在结构和关系,从而在无标签数据中识别样本的潜在结构和模式。非监督学习的目的是发现未知结构,无需使用任何预先定义的目标变量,这与监督学习的目标相反。

非监督学习的主要方法包括聚类、降维等技术。

聚类

聚类是一种非监督学习方法,它将给定的数据集中的样本分成不同的组或簇,每个簇包含相似的数据点。聚类可以帮助我们在数据集中发现潜在的模式和结构,从而加深对数据集的理解。

聚类是非监督学习中最常见的方法之一,其目的是将数据集中的观测样本分组或者簇。 对于同一簇中的样本尽可能的相似,而不同簇之间的样本则相差较大。

常用的聚类算法包括 K-means、Hierarchical聚类和DBSCAN。

K-means

K-means算法是一种最简单和流行的聚类算法,其工作原理如下:

  1. 首先,选择需要分组的数量(即簇数k)。
  2. 随机选择k个样本点作为聚类中心。
  3. 将所有的样本点分配到距离最近的聚类中心。
  4. 更新每个簇的聚类中心位置。
  5. 重复运行步骤3和4,直到满足收敛条件为止。

代码实现:

from sklearn.cluster import KMeans
import numpy as np

# 数据集
X = np.array([[5, 3], [10, 15], [15, 12], [24, 10], [30, 45], [85, 70], [71, 80], [60, 78], [55, 52], [80, 91]])
plt.scatter(x[:,0],x[:,1], s = 50)
plt.show()

# 聚类数,使用K-Means算法对数据进行聚类
kmeans = KMeans(n_clusters=2)

# 训练模型
kmeans.fit(X)

# 可视化聚类效果
plt.scatter(x[:,0],x[:,1], c = kmeans.labels_, s=50)
plt.show()

# 打印聚类中心
print(kmeans.cluster_centers_)

# 预测簇
print(kmeans.labels_)

Hierarchical聚类

层次聚类也叫分级聚类,可以是自下向上或自上而下的方法,利用不同的相似度度量来生成一棵树形的层次结构。

代码实现:

from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
import numpy as np

# 数据集
X = np.array([[5, 3], [10, 15], [15, 12], [24, 10], [30, 45], [85, 70], [71, 80], [60, 78], [55, 52], [80, 91]])

# 层次聚类
linked = linkage(X, 'single')

# 绘制谱系树
plt.figure(figsize=(10, 7))
dendrogram(linked, orientation='top', distance_sort='descending', show_leaf_counts=True)
plt.show()

DBSCAN

DBSCAN算法确定簇的数量而不是预设定好的。该算法将一个给定的数据集划分到不同的簇中。对于每个簇,它的形状可以是任意形状。除此之外,该算法还能识别出噪声数据点。

代码实现:

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt

# 数据集
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)

# DBSCAN聚类
dbscan = DBSCAN(eps=0.2, min_samples=5)
clusters = dbscan.fit_predict(X)

# 绘图聚类
plt.scatter(X[:, 0], X[:, 1], c=clusters, s=50, cmap='viridis');
plt.show()

以上代码首先生成了一个包含6个数据点的人工数据集,并将其可视化。然后,使用K-Means算法将数据分成两类,并将聚类结果可视化。

降维

降维也是非监督学习中非常重要的一部分,其目标是将高维数据映射到低维空间。 降维可以帮助我们更好地理解数据,同时还能减少特征的数量,这样也就使得机器学习算法的计算量更小,从而更快地训练模型。

常用的降维算法包括PCA和t-SNE。

PCA

PCA(主成分分析)是一种将高维数据转换为低维数据的线性算法。它通过找到数据中主要的变化方向,创建新的低维特征。

代码实现:

from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt

# 数据集
iris = load_iris()
X = iris.data
y = iris.target

# 可视化数据
plt.scatter(x[:0],x[:,1],c = y, s = 50)
plt.show()

# PCA分析,使用pca算法降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

# 绘制结果
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, s=50, cmap='viridis')
plt.show()

t-SNE

t-SNE(t-Distributed Stochastic Neighbor Embedding)是目前最流行的非线性降维算法之一。 它能够将高维数据点映射到低维空间,并尽可能保留高维数据点之间的局部结构。

代码实现:

from sklearn.datasets import load_digits
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
import seaborn as sns

# 数据集
digits = load_digits()
X = digits.data
y = digits.target

# t-SNE分析
tsne = TSNE(n_components=2, perplexity=30, verbose=2)
X_tsne = tsne.fit_transform(X)

# 绘制结果
plt.figure(figsize=(10, 10))
sns.scatterplot(X_tsne[:, 0], X_tsne[:, 1], hue=y, legend='full', palette='Spectral')
plt.title('t-SNE')
plt.show()

其他非监督学习技术

除了聚类和降维算法外,还有许多其他非监督学习技术,如异常检测、关联规则、深度学习自编码器等。 它们的应用场景各不相同,可以根据需要选择合适的技术。

结论

本教程介绍了非监督学习中最常见的聚类和降维算法,以及其他一些非监督学习技术。 相信读者对非监督学习有了更深入的了解,并能够将其应用到实际的问题中去。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百年孤独百年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值