如何从零实现面向分类数据的Kmeans,替换make_blobs使用大洲数据集聚类?
测试模块修改方案
核心修改逻辑
直接替换原有make_blobs模拟数据生成逻辑,接入你预处理完成的大洲特征向量即可,无需改动你自己实现的Kmeans核心代码。
具体修改步骤
- 替换数据生成代码
原有测试模块中类似如下的模拟数据生成段:
from sklearn.datasets import make_blobs # 生成模拟聚类数据 X, _ = make_blobs(n_samples=200, centers=5, n_features=1, random_state=42)
直接替换为你的真实数据读取、特征提取逻辑:
import pandas as pd # 若你的dataframe已经加载到内存,可跳过读文件步骤 dataframe = pd.read_csv("你的大洲数据集文件路径.csv") # 提取单特征,转numpy数组适配自定义Kmeans的输入要求 X = dataframe.iloc[:, 3:4].values
- 适配聚类数K
你已完成的大洲编码共8个分类,直接将聚类数设置为8即可,无需跟随模拟数据的centers参数取值:
# 原代码:kmeans = KMeans(n_clusters=3) # 修改为 kmeans = KMeans(n_clusters=8)
完整修改后的测试模块示例
import pandas as pd # 保留你自定义实现的Kmeans导入逻辑 from custom_kmeans import KMeans # 1. 加载预处理完成的数据集 dataframe = pd.read_csv("continent_dataset.csv") # 2. 提取编码后的大洲单特征 # 若还未完成编码,可先执行映射: # continent_map = {'North America':0,'Europe':1,'Asia':2,'Africa':3,'South America':4, 'Oceania':5,'Seven seas (open ocean)':6, 'Antarctica':7} # dataframe['continent_code'] = dataframe['大洲字段名'].map(continent_map) X = dataframe.iloc[:, 3:4].values # 3. 执行Kmeans聚类 kmeans = KMeans(n_clusters=8) cluster_labels = kmeans.fit_predict(X) # 输出结果验证 print("聚类结果标签:", cluster_labels)
注意事项
- 单离散特征聚类的结果默认会将相同大洲编码的样本归为同一簇,你可以统计每个簇内占比最高的原大洲编码,验证聚类的匹配准确率。
- 你通过
iloc[:,3:4]提取的特征本身为二维结构,无需额外reshape即可适配大多数Kmeans实现的输入要求。
内容的提问来源于stack exchange,提问作者Omkar Salokhe
相关产品推荐
相关产品推荐

