如何使用Scikit-learn KMeans处理外部生成的相关矩阵
解决Scikit-learn KMeans聚类时的字符串转浮点错误
你的错误是因为KMeans只能处理纯数值数据,而CSV里的ABBV大概率是行/列的标签(比如股票代码),属于非特征的标识信息,必须先和数值特征分离。以下是具体解决步骤:
读取CSV并保留标签:用Pandas读取文件时,把含字符串的列设为索引,避免混入特征数据:
import pandas as pd # 假设第一列是字符串标签,设置为行索引 df = pd.read_csv('你的相关矩阵文件.csv', index_col=0)分离数值特征与标签:提取纯数值的特征矩阵,同时保存标签用于后续对应结果:
# 提取数值数据 feature_data = df.values # 保存原始标签(比如ABBV这类标识) item_labels = df.index.tolist()运行KMeans聚类:用纯数值数据训练模型:
from sklearn.cluster import KMeans # 根据需求设置聚类数,这里以3为例 kmeans = KMeans(n_clusters=3, random_state=42) cluster_labels = kmeans.fit_predict(feature_data)关联聚类结果与原始标签:把聚类结果和对应的字符串标签整合,方便查看:
result_df = pd.DataFrame({ 'Item': item_labels, 'Cluster': cluster_labels }) print(result_df)
如果CSV中除了行/列标签外,还有其他字符串列混入特征中,可以用以下方式过滤出纯数值特征:
# 只保留数值类型的列 numeric_df = df.select_dtypes(include=['float64', 'int64']) # 再提取特征数据 feature_data = numeric_df.values
内容的提问来源于stack exchange,提问作者Stumbling Through Data Science
相关产品推荐
相关产品推荐

