python文本聚类kmeans++实践
时间: 2025-05-06 21:06:47 浏览: 34
### Python KMeans++ 文本聚类 实践教程 示例代码
#### 准备工作
为了实现文本聚类,首先需要安装必要的库。可以使用 `pip` 安装所需的包:
```bash
pip install numpy scikit-learn pandas matplotlib jieba
```
#### 导入所需模块并加载数据
在开始之前,导入所有必需的Python库,并准备用于聚类的数据集。
```python
import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import jieba
import pandas as pd
import matplotlib.pyplot as plt
```
#### 数据预处理
对于中文文本,通常会先进行分词操作。这里定义了一个简单的函数来读取文档并将每篇文章转换成由词语组成的列表[^3]。
```python
def load_and_tokenize(file_path):
"""Load text file and tokenize it using Jieba."""
try:
with open(file_path, 'r', encoding='utf-8') as f:
documents = f.readlines()
tokenized_docs = []
for doc in documents:
words = '/'.join(jieba.cut(doc.strip(), cut_all=False))
tokenized_docs.append(words)
return tokenized_docs
except FileNotFoundError:
print(f"无法找到文件 {file_path}")
return None
```
#### 特征提取
采用TF-IDF向量化器将文本转化为数值特征矩阵,以便后续能够被机器学习模型所接受。
```python
vectorizer = TfidfVectorizer(max_df=0.95, min_df=2, stop_words=None)
X_tfidf = vectorizer.fit_transform(load_and_tokenize('sourceData/周杰伦.txt'))
```
#### 使用KMeans++初始化参数执行聚类
通过设置`init="k-means++"`选项指定使用改进版的初始质心选取策略——即KMeans++算法;并通过调整其他超参优化效果。
```python
num_clusters = 3 # 可根据实际情况设定簇的数量
km_model = KMeans(n_clusters=num_clusters, init='k-means++', max_iter=100, n_init=10, random_state=42)
clusters = km_model.fit_predict(X_tfidf)
```
#### 结果评估与展示
计算轮廓系数以衡量聚类质量的好坏程度,并绘制散点图直观呈现不同类别之间的分布情况。
```python
silhouette_avg = silhouette_score(X_tfidf, clusters)
print(f'平均轮廓系数: {silhouette_avg}')
plt.scatter(range(len(clusters)), clusters, c=clusters, cmap='viridis')
plt.title('Text Clustering Results')
plt.xlabel('Document Index')
plt.ylabel('Cluster Label')
plt.show()
for i in range(num_clusters):
cluster_center_indices = (clusters == i).nonzero()[0]
sample_texts = [" ".join(vectorizer.get_feature_names_out()[index]
for index in X_tfidf[doc_id].indices)
for doc_id in cluster_center_indices[:5]]
print(f'\nCluster #{i}:')
print("\n".join(sample_texts))
```
上述流程涵盖了从数据获取到最终可视化的整个过程,在实际应用中可根据具体场景灵活调整各个部分的具体配置和细节[^2][^4]。
阅读全文
相关推荐
















