我在jupyter notebook和colab上都尝试运行过,但仍然在fcmeans上遇到这个错误。然而,在另一台笔记本电脑上运行正常。这是用于分割数据集的代码
# 使用Scikit-learn的分层shuffle拆分类进行分层抽样
from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.25, random_state=42)
for train_index, test_index in split.split(data1, data1["class"]):
strat_train_set = data1.loc[train_index]
strat_test_set = data1.loc[test_index]
train_set = strat_train_set.drop("class", axis=1) # 丢弃训练集的标签
train_labels = strat_train_set["class"].copy()
test_set = strat_test_set.drop("class", axis=1) # 丢弃测试集的标签
test_labels = strat_test_set["class"].copy()
那么我在这里遗漏了什么呢?
回答:
问题在于,tr_set
不是numpy.ndarray
。所以你需要做的就是将数据框作为numpy数组传递。
在你的情况下,如果在传递数据到fit
之前使用to_numpy
函数(就像这样fcm.fit(tr_set.to_numpy())
),它就会工作。
这在fcm文档中已经非常清楚了。