Python中的新闻标题聚类:从文本数据到无监督学习的实战

作者:暴富20212024.02.18 06:36浏览量:15

简介:本文将介绍如何使用Python进行新闻标题聚类,通过文本数据和无监督学习技术,将相似的新闻标题分组在一起。我们将使用K-means聚类算法和TF-IDF向量化器进行实际操作。最后,我们将解释如何评估聚类结果并可视化展示。

一、准备工作
在开始聚类之前,我们需要安装一些Python库,包括NumPy、scikit-learn和matplotlib。你可以使用以下命令来安装这些库:

  1. ```python
  2. pip install numpy scikit-learn matplotlib
  3. ```

二、数据预处理
首先,我们需要将新闻标题转换为向量形式,以便算法能够理解它们。我们可以使用TF-IDF(Term Frequency-Inverse Document Frequency)向量化器来完成这项任务。TF-IDF是一种常见的文本向量化方法,它将每个单词的频率与逆文档频率相乘,以反映单词在文档中的重要性。

  1. ```python
  2. from sklearn.feature_extraction.text import TfidfVectorizer
  3. # 创建数据集
  4. data = [['Apple unveils new iPhone', 'Apple introduces iPhone 12'],
  5. ['Samsung launches Galaxy S21', 'Samsung unveils Galaxy S21'],
  6. ['Microsoft Surface Laptop 4 launched', 'Microsoft unveils new laptop']]
  7. # 创建TF-IDF向量化器对象并拟合数据集
  8. vectorizer = TfidfVectorizer().fit(data)
  9. ```

三、聚类算法
接下来,我们将使用K-means聚类算法将相似的新闻标题分组在一起。K-means是一种常见的无监督学习算法,它通过迭代来最小化每个聚类中点的平方距离之和。

  1. ```python
  2. from sklearn.cluster import KMeans
  3. # 创建KMeans对象并拟合数据集
  4. model = KMeans().fit(vectorizer.transform(data))
  5. ```

四、评估聚类结果
评估聚类结果的一种方法是计算每个聚类的平均距离。我们可以使用以下代码来计算每个聚类中所有点之间的平均距离:

  1. avg_dist = np.mean([model.cluster_centers_[cluster][:, np.newaxis]
  2. .astype(int) for cluster in range(model.n_clusters)])
  3. print('Average distance:', avg_dist)

五、可视化聚类结果
最后,我们可以使用matplotlib库将聚类结果可视化。我们可以使用scatterplot函数来绘制每个聚类中的点,并使用颜色表示不同的聚类。以下是可视化聚类结果的代码:

  1. import matplotlib.pyplot as plt
  2. plt.scatter(vectorizer.transform(data)[:, 0], vectorizer.transform(data)[:, 1], c=model.labels_, cmap='viridis')
  3. plt.show()

在这个例子中,我们将两个不同的聚类用不同的颜色表示。点的大小和形状可以根据需要自定义。如果你想要查看聚类中心点的位置,你可以在scatterplot中添加一个圆圈来表示每个聚类的中心点。