Python中KMeans聚类神经数据无报错但无法运行问题求助
解决M1 Mac上KMeans聚类神经数据的执行问题
首先明确:你看到的Intel MKL警告是兼容性问题——M1是ARM架构,而MKL是为Intel x86芯片优化的库,这个警告本身不会导致程序卡死,真正的问题大概率出在数据或参数设置上,以下是具体排查和解决步骤:
1. 先排查数据本身的问题
加载数据后,先确认数据是否符合KMeans的输入要求:
- 添加代码检查数据的基本属性:
import numpy as np import pickle from sklearn.cluster import KMeans fileName = 'test_array.pickle' with open(fileName, 'rb') as file: output = pickle.load(file) print('Decomposition successful') # 检查数据形状、类型 print(f"数据形状: {output.shape}, 数据类型: {output.dtype}") # 检查是否有缺失值、无穷值 print(f"存在缺失值: {np.isnan(output).any()}") print(f"存在无穷值: {np.isinf(output).any()}")
如果数据里有NaN或inf,KMeans会直接卡住;如果数据类型不是数值型(比如object),也会导致执行失败。
2. 调整KMeans参数
你当前设置的n_init=1风险很高:KMeans的初始质心只选1次,若初始点选得极差,可能陷入无意义的迭代甚至卡死。建议修改参数:
# 改用默认的n_init(现在sklearn默认是'n_init=auto',会自动选合适的次数) kmeans = KMeans(n_clusters=2, init='k-means++', n_init='auto', verbose=2) kmeans.fit(output.reshape(-1,1)) print('K means works')
verbose=2会输出更详细的迭代过程,能帮你判断程序是真卡死还是在正常迭代。
3. 解决MKL警告(可选,消除干扰)
如果不想看到这个警告,可以在代码开头添加屏蔽逻辑:
import warnings warnings.filterwarnings("ignore", category=UserWarning, message=r"Intel MKL WARNING.*")
或者更彻底的方案:安装适配M1的scikit-learn版本,用conda从Apple官方源安装:
conda install -c apple scikit-learn
这个版本会用Apple的Accelerate框架代替MKL,从根源上消除ARM架构的兼容性警告。
4. 内存问题应对(如果数据量极大)
如果你的神经数据数组非常庞大,M1的内存可能不足以支撑标准KMeans的全量计算,可以改用MiniBatchKMeans,它用分批数据迭代,内存占用低很多:
from sklearn.cluster import MiniBatchKMeans kmeans = MiniBatchKMeans(n_clusters=2, n_init='auto', verbose=1, batch_size=1000) kmeans.fit(output.reshape(-1,1)) print('MiniBatch K means works')
内容的提问来源于stack exchange,提问作者ciara gibbs
相关产品推荐
相关产品推荐

