非监督学习简单介绍

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

非监督学习简单介绍

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

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

聚类

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

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

常用的聚类算法包括 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]。 非监督学习的数据集没有“正确答案”,这意味着模型无法通过与已知结果的对比来调整参数,而是依赖于数据本身的分布和特征。常见的非监督学习任务包括**聚类、降维、关联分析和异常检测**等。例如,聚类算法(如K均值)可以将数据划分为不同的组,以发现数据内部的聚集结构;降维技术(如主成分分析PCA)则用于减少数据维度,同时保留其主要特征[^4]。 ### 非监督学习的应用场景 非监督学习广泛应用于**探索性数据分析**,尤其适用于数据特征不明确、缺乏标签信息或需要发现新知识的场景。以下是一些典型应用场景: - **聚类分析**:将大量数据划分为多个有意义的群组。例如,Google新闻使用聚类算法将相似的新闻文章归类,帮助用户快速获取感兴趣的信息。 - **市场细分**:在市场营销中,企业通过分析客户的购买行为数据,将客户划分为不同的细分群体,从而制定更有针对性的营销策略。 - **基因组学研究**:在生物信息学中,非监督学习被用于DNA微阵列数据分析,以识别具有相似表达模式的基因簇,帮助理解基因功能和调控机制[^3]。 - **社交网络分析**:通过分析用户之间的连接关系,识别社交网络中的社区结构,用于舆情监控、推荐系统等领域。 - **鸡尾酒会问题**:在语音信号处理中,非监督学习用于从嘈杂环境中分离出多个说话人的声音信号,解决“鸡尾酒会问题”。 - **异常检测**:用于识别数据中的异常点或异常行为,广泛应用于欺诈检测、网络入侵检测和设备故障预警等场景。 ### 示例代码:K均值聚类 以下是一个使用Python实现K均值聚类简单示例,展示了如何对二维数据进行聚类分析: ```python from sklearn.cluster import KMeans import numpy as np # 生成随机二维数据 X = np.random.rand(100, 2) # 初始化KMeans模型,设定聚类数为3 kmeans = KMeans(n_clusters=3) kmeans.fit(X) # 输出聚类中心和标签 print("Cluster centers:", kmeans.cluster_centers_) print("Labels:", kmeans.labels_) ``` 该代码使用`scikit-learn`库中的`KMeans`类,对随机生成的二维点进行聚类,最终输出每个样本所属的簇标签以及簇的中心坐标。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

百年孤独百年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值