将model.predict()的结果与原始的pandas DataFrame进行合并?

19 浏览
0 Comments

将model.predict()的结果与原始的pandas DataFrame进行合并?

我正在尝试将predict方法的结果与原始数据合并到一个pandas.DataFrame对象中。

from sklearn.datasets import load_iris
from sklearn.cross_validation import train_test_split
from sklearn.tree import DecisionTreeClassifier
import pandas as pd
import numpy as np
data = load_iris()
# 请耐心等待下面的步骤...我试图向你展示我的数据对象的结构...即我如何从原始数据转换为实际数据矩阵,而不是鸢尾花数据集
# 将特征矩阵放入dataframe的列格式中
df = pd.DataFrame(data = data.data)
# 添加结果变量
df['class'] = data.target
X = np.matrix(df.loc[:, [0, 1, 2, 3]])
y = np.array(df['class'])
# 最后,划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.8)
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
# 我现在有了预测结果
y_hats = model.predict(X_test)

为了将这些预测结果与原始的df合并,我尝试如下操作:

df['y_hats'] = y_hats

但是会引发如下错误:

ValueError: Length of values does not match length of index

我知道我可以将df分成train_dftest_df来解决这个问题,但实际上,我需要按照上述路径来创建矩阵Xy(我的实际问题是一个文本分类问题,在将特征矩阵拆分为训练集和测试集之前,我需要对整个特征矩阵进行归一化)。我应该如何将这些预测值与df中相应的行对齐,因为y_hats数组是从零开始索引的,而看起来关于哪些行包含在X_testy_test中的所有信息都丢失了?还是说我只能先将数据框拆分为训练集和测试集,然后再构建特征矩阵?我希望只需要在数据框中的训练集行中填充np.nan值。

0