目前使用以下指令进行划分测试集以及训练集
,但是输出检查后发现测试集和训练集的比例是对的,但是被试和他所以对应的特征值是混乱的,并且特征名和特征值也对应不上,现在的诉求是不知道是这样划分测试集和训练集的方法是错的,还是输出过程中有弄错了,一直没有办法解决这个问题
目前使用以下指令进行划分测试集以及训练集
引自免费微信小程序:皆我百晓生
根据您提供的信息,看起来在将特征与对应的 subj 列合并时出现了混淆。这可能是因为在第1行和第2行代码中对 x_train
和 x_test
的处理方式不正确。为了确保每个测试样本都保留其原始的 subj 列,我们需要先将 subj 列从原始数据集中提取出来,然后分别将其添加到训练集和测试集的数据帧中。以下是修改后的代码:
import pandas as pd
from sklearn.model_selection import train_test_split
# 假设你的原始数据集为 df,其中包含 subj 列和其它特征列
df = pd.read_csv('your_dataset.csv') # 替换为实际数据文件路径
# 提取 subj 列
subjs = df['subj']
# 划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(df.drop(['subj', 'group'], axis=1), df['group'], test_size=0.2, random_state=42)
# 将 subj 列添加回训练集和测试集
x_train_with_subj = pd.concat([subjs.iloc[x_train.index], pd.DataFrame(x_train, columns=x_train.columns)], axis=1)
x_test_with_subj = pd.concat([subjs.iloc[x_test.index], pd.DataFrame(x_test, columns=x_test.columns)], axis=1)
# 创建包含 subj、特征和标签的训练集、测试集 DataFrame
train_data = pd.concat([x_train_with_subj, pd.Series(y_train, name='group')], axis=1)
test_data = pd.concat([x_test_with_subj, pd.Series(y_test, name='group')], axis=1)
# 保存训练集和测试集数据到 Excel 文件
output_folder = r"D:\graduate\1\artical\ADNI_radiomic\ext_feature\ext_results\"
train_output_path = os.path.join(output_folder, 'train_data.xlsx')
test_output_path = os.path.join(output_folder, 'test_data.xlsx')
train_data.to_excel(train_output_path, index=False)
test_data.to_excel(test_output_path, index=False)
这段代码首先从原始数据集中提取出 subj 列,然后按照你原来的逻辑划分子集。接下来,我们使用 iloc
根据索引将 subj 列添加回训练集和测试集。这样可以确保每个样本的 subj 列与其相应的特征保持一致。
请注意,你需要替换 'your_dataset.csv'
为你的实际数据文件路径。另外,如果你的数据集已经包含了预处理(例如标准化)步骤,那么确保在提取 x_train
和 x_test
之前完成这些预处理操作。