将预测与输入数据联系起来

数据挖掘 熊猫 麻木的
2022-03-12 15:31:55

我有一个文件列表,我使用 KNN 算法对这些文件进行分类。

dataset = pd.read_csv(file)
training_samples = get_sample_number(dataset)
X_train = dataset.iloc[:training_samples, 5:9]
y_train = dataset.iloc[:training_samples, 9]
X_test = dataset.iloc[training_samples:, 5:9]

# Feature Scaling
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)

# Fitting classifier to the training set
classifier = KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2)
classifier.fit(X_train, y_train)

y_pred = classifier.predict(X_test)

现在我的 y_pred 数组中有我的类别。但我想将结果保存在我读取数据集的文件中。如何将预测链接到文件(或数据集)中的正确行?

2个回答

首先正如“timleathart”提到的,您需要通过更改此行来修复您的代码:

X_test = sc.fit_transform(X_test)

到:

X_test = sc.transform(X_test)

对于您的问题:

  • 您已经拥有用于训练的样本数量(training_samples)。因此,您只需遍历 y_pred 并将值保存在数据集中从“training_samples”开始的新列中作为行索引。

首先也是最重要的:我强烈建议不要修改您的原始数据文件。它带来了您的工作流程将变得不可重复的风险。

为了坚持你的结果,我建议你做这样的事情:

in_fname = '{}.csv'.format(filename)
out_fname = '{}_SCORED.csv'.format(filename)
dataset = pd.read_csv(in_fname)

... do stuff

dataset.loc[training_samples:, 'scores'] = y_pred
dataset.to_csv(out_fname, header=True, index=False)    

如果您真的想覆盖原始数据,只需设置in_fname=out_fname. 但我建议不要这样做。