You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCaret处理EEG数据运行PCA报random_state错误如何解决

问题根因

你遇到的报错是PyCaret 2.2.3和scikit-learn 0.24.2的版本兼容性问题:

  • PyCaret 2.2.3的聚类模块setup函数内部,调用sklearn数据拆分相关逻辑时,默认硬编码传入了random_state参数,同时没有设置shuffle=True
  • 而scikit-learn从0.23版本开始,当shuffle=False时传入random_state就会抛出你遇到的ValueError,但是PyCaret 2.2.3的setup没有对外暴露shuffle、random_state的入参,所以你自行添加参数会报“不支持的关键字参数”错误。

解决方案

方案1:适配现有环境修复PyCaret逻辑

找到本地PyCaret安装路径下的clustering.py文件,一般路径为Lib/site-packages/pycaret/clustering.py,找到内部调用train_test_split的代码段,要么删除传入的random_state参数,要么在该调用处新增shuffle=True参数即可修复。
修复后可正常运行原有代码:

from pycaret.clustering import *
# 加silent=True可跳过交互确认步骤
pca_data = setup(data=raw_df, pca=True, pca_method='linear', pca_components=2, silent=True)

后续可直接调用PyCaret内置的plot_model函数绘制前两个主成分的分布图。


方案2:跳过PyCaret直接用sklearn实现(更轻量,适配当前验证需求)

如果仅需要完成PCA提取、绘图、α波相关性验证,完全不需要引入PyCaret整套框架,几行代码即可实现所有需求:

步骤1:导入依赖

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from scipy.stats import pearsonr

步骤2:生成10Hz参考α波

你的数据采样率为125Hz,共1140个样本,生成对应时序的10Hz正弦波作为参考:

fs = 125
t = np.arange(len(raw_df)) / fs
ref_alpha = np.sin(2 * np.pi * 10 * t)

步骤3:执行PCA计算

# PCA要求输入数据先标准化
scaler = StandardScaler()
scaled_data = scaler.fit_transform(raw_df)

# 提取前2个主成分
pca = PCA(n_components=2)
pca_result = pca.fit_transform(scaled_data)
pc1 = pca_result[:,0]
pc2 = pca_result[:,1]

# 输出主成分解释度
print(f"PC1解释方差占比:{pca.explained_variance_ratio_[0]:.2%}")
print(f"PC2解释方差占比:{pca.explained_variance_ratio_[1]:.2%}")

步骤4:绘制前两个主成分分布

plt.figure(figsize=(8,6))
plt.scatter(pc1, pc2, s=10, alpha=0.7)
plt.xlabel(f"PC1({pca.explained_variance_ratio_[0]:.2%} 方差解释率)")
plt.ylabel(f"PC2({pca.explained_variance_ratio_[1]:.2%} 方差解释率)")
plt.title("前两个主成分分布")
plt.grid(alpha=0.3)
plt.show()

步骤5:验证主成分与10Hzα波的相关性

corr_pc1, p_pc1 = pearsonr(pc1, ref_alpha)
corr_pc2, p_pc2 = pearsonr(pc2, ref_alpha)

print(f"PC1与10Hz正弦波相关系数:{corr_pc1:.3f},p值:{p_pc1:.3f}")
print(f"PC2与10Hz正弦波相关系数:{corr_pc2:.3f},p值:{p_pc2:.3f}")

该方案完全绕开了PyCaret的版本兼容问题,代码更可控,完全满足当前的PCA概念验证需求。


内容的提问来源于stack exchange,提问作者the-mad-neuroscientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:57:04