机器学习 - 无监督学习
机器学习 - 无监督学习
Section titled “机器学习 - 无监督学习”在监督学习 (supervised learning) 中,正如您可能已经看到的,我们通过提供标记数据 (labeled data) X 来指导机器预测目标 Y。例如,在回归 (regression) 中,我们预测连续值 (continuous values);在分类 (classification) 中,我们将数据点分配到预定义类别 (predefined categories)。但是,当我们有海量未标记数据 (unlabeled data),并且没有预定义标签或类别时会发生什么?机器如何理解这些数据(也许是数 TB),并揭示内在的结构或分组?这就是无监督学习 (Unsupervised Learning) 发挥作用的地方。
考虑一个包含客户购买历史 (customer purchase histories) 的大型电子商务数据集。无监督学习可以在没有这些细分事先知识的情况下,根据客户的购买模式 (buying patterns) 识别出不同的客户细分 (distinct customer segments)。这使得企业能够制定有针对性的营销活动 (targeted marketing campaigns)。其他例子包括金融交易中的异常检测 (anomaly detection) 或将相似新闻文章分组。实质上,对于大量未标记数据集 X,我们问机器:“X 中存在哪些内在模式或结构?”,“你能将 X 划分为有意义的组吗?”,或者“X 中有哪些常见的共现特征?”。这些问题旨在从数据中发现隐藏的见解。
这种探索性方法是无监督学习的核心。
无监督学习的常用算法
Section titled “无监督学习的常用算法”让我们讨论无监督机器学习中最广泛使用的用于数据分组的算法之一:聚类 (clustering)。
K-Means 聚类
Section titled “K-Means 聚类”想象一家在线零售公司想要更好地了解其客户群 (customer base)。他们拥有购买历史、浏览行为 (browsing behavior) 和人口统计信息 (demographics) 的数据,但没有预定义的客户类型。K-means 聚类 (K-means clustering) 可以帮助自动将行为相似的客户分组,从而实现定向营销活动。例如,一个簇可能是“频繁高价值购物者”,另一个可能是“偶尔寻求折扣者”。这有助于制定量身定制的消息并改善客户互动 (customer engagement)。同样,它也可以用于文档聚类 (document clustering)、图像分割 (image segmentation) 和异常检测 (anomaly detection)。
让我们概念性地理解 k-means 如何工作:
- k-means 中的“k”指的是你想要找到的簇 (clusters) 的数量。你需要事先指定这个数字。
- 算法旨在将数据点划分到“k”个不同、不重叠的簇中。
- 每个簇都有一个中心点,称为“质心” (centroid)(即“均值” (mean))。数据点被分配到离它们最近的质心所在的簇。
k-means 算法通常遵循以下迭代步骤 (iterative steps):
-
初始化
-
: 选择 ‘k’ 个初始簇质心。这些质心可以从数据点中随机选择,或者使用更复杂的策略。
-
分配步骤
-
: 将每个数据点分配到最近的质心(例如,使用欧几里得距离 (Euclidean distance))。这形成了 ‘k’ 个簇 (clusters)。
-
更新步骤
-
: 重新计算每个簇的质心,作为分配给该簇的所有数据点的均值 (mean)。
-
重复
-
: 重复步骤 2 和 3,直到质心在迭代之间不再显著变化,或者达到最大迭代次数。
k-means 的一个关键方面是选择合适的“k”值。像肘部法则 (Elbow Method) 或轮廓系数分析 (Silhouette Analysis) 这样的技术可以帮助指导这个决定,你可以在网上找到许多关于这些方法的资源。在应用 k-means 之前,对特征进行缩放 (scale your features)(例如,使用标准化 (standardization))也是一个最佳实践,因为它对不同特征的数值大小敏感 (sensitive to the magnitudes)。
以下是使用流行的 Scikit-learn 库的一个概念性 Python 示例:
# Conceptual example of using k-meansfrom sklearn.cluster import KMeansfrom sklearn.preprocessing import StandardScalerimport numpy as np
# Sample data (features)X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
# It's good practice to scale data for k-meansscaler = StandardScaler()X_scaled = scaler.fit_transform(X)
# Initialize KMeans with k=2 clusters# n_init='auto' helps in finding a good initializationkmeans = KMeans(n_clusters=2, random_state=42, n_init='auto')
# Fit the model to the scaled datakmeans.fit(X_scaled)
# Get cluster labels for each data pointprint(f"Cluster labels: {kmeans.labels_}")
# Get cluster centroids (in scaled space)print(f"Cluster centroids (scaled):\n {kmeans.cluster_centers_}")簇识别 (Cluster identification) 是指算法根据物品的特征将其分组的过程,而无需事先指导这些分组应该是什么样子。与分类 (classification) 的主要区别在于,在分类中,你提供定义类别的标记样本 (labeled examples)。而在聚类 (clustering) 中,算法从数据本身发现这些类别或“簇” (clusters)。
聚类有时被称为“无监督分类” (unsupervised classification),因为它旨在将物品分配到组,类似于分类,但它是在没有预定义类别标签的情况下进行的。
在探讨了监督学习 (supervised learning) 和无监督学习 (unsupervised learning) 之后,我们现在可以转向理解更复杂的模型。人工神经网络 (Artificial Neural Networks, ANNs) 可用于监督和无监督任务,它们是现代机器学习中的基础概念 (foundational concept),接下来我们将讨论它们。