Pandas to_csv正在从我的目标变量中排除行



我使用一个简单的RandomForestProgsor脚本来预测目标变量。我正试图根据我的训练/验证数据编写一个新的CSV,以包括实际值和预测值。然而,当我导出数据时,"预测值"列缺少大约一半的值,并且显示的值与特征/实际值的相关性不好。看起来这些值是随机化的,然后分配给前半行。

为了进行测试,我一开始就尝试不在验证和训练数据之间划分数据。我仍然发现同样的问题。

import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
#file path
My_File_Path = "//path.csv"
#read the file
My_Data = pd.read_csv(My_File_Path)
#drop the null values
My_Data = My_Data.dropna(axis=0)
#define the target variable
y = My_Data.Annualized_2018_Payments
my_features = ['feature1','feature2','feature3']
#define the features
x = My_Data[my_features]
#set the split data
train_x, val_x, train_y, val_y = train_test_split(x, y, random_state = 1)
forest_model = RandomForestRegressor(random_state = 1)
forest_model.fit(train_x, train_y)
WA_My_preds = forest_model.predict(val_x)
print("MAE for validation data is ", mean_absolute_error(val_y, WA_My_preds))
#print(My_Data.columns)
My_Data_Predicted = My_Data
#My_Data_Predicted.append(prediction_column, ignore_index = False, sort=None)
My_Data_Predicted['Predicted_Value'] = pd.DataFrame(data = forest_model.predict(My_Data_Predicted[my_features]))
print("The average predicted value is ", My_Data_Predicted['Predicted_Value'].mean())
print("The average true value is ", My_Data_Predicted['Annualized_2018_Payments'].mean())
#write to csv
My_Data_Predicted.to_csv("//path….Preds.csv")

我希望每一行都有一列,上面写着"预测值"和随机森林回归器预测的值。但是最后一半的行缺少该值。

对于简短的答案和解决方案:

在测试代码的基础上,你应该试试这一行:

My_Data_Predicted['Predicted_Value'] = forest_model.predict(My_Data_Predicted[my_features])

现在这就是为什么会发生这种情况:

我使用自己的数据集进行了测试,看起来问题是这样的:

My_Data_Predicted['Predicted_Value'] = pd.DataFrame(data = forest_model.predict(My_Data_Predicted[my_features]))

看起来,当你把空行放在这里时,会发生什么:

My_Data = My_Data.dropna(axis=0)

您还删除了索引和行,这没有错,但对您的问题很重要。要测试这一点,请尝试My_Data_Predicted.index.max()获取最高索引,并将其与My_Data_Predicted.shape进行比较,您会发现有跳过的索引。

这是一个问题的原因是,通过使预测列成为数据帧而不是序列,它会自动尝试基于索引合并新数据。问题是,原始数据帧有一个更高的最大索引,其中有一些间隙,而这个用于预测的新数据帧有顺序索引,因此您的一些预测在合并过程中会被丢弃。

下面是一个简单的例子(注意指数):

My_Data_Predicted     predictions      My_Data_Predicted (merged)
index  a  b  c          index  d            index  a  b  c  d
0    1  4  3            0    1              0    1  4  3  1
3    3  2  7            1    2              3    3  2  7  4
4    2  2  2            2    3              4    2  2  2  5
6    4  3  5            3    4              6    4  3  5  NaN
8    6  2  1            4    5              8    6  2  1  NaN

请注意,在合并的数据帧中,最后两个是NaN,因为预测数据帧中没有索引6或8。

所有这些都应该通过传递结果来解决,如果预测如下:

My_Data_Predicted['Predicted_Value'] = forest_model.predict(My_Data_Predicted[my_features])

因为该类型是numpy数组,并且不会尝试在索引上合并。

相关内容

  • 没有找到相关文章

最新更新