【发布时间】:2022-01-24 20:00:41
【问题描述】:
首先我将介绍这篇文章的全部内容。
我正在从“使用 SciKit 和 Tensorflow 进行机器学习”一书中学习 NN——从我的母语进行松散的翻译。 在第二章中,本书的作者介绍了一个神经网络,它可以根据各种输入预测房价。
完成本章后,我决定尝试在图表上查看结果并将它们与训练数据进行比较,但为此我需要将 numpy 预测数组转换为 pandas 数据帧,然后将预测与测试数据连接起来.
但是由于某种原因,当我使用plot_test_data = plot_test_data.join(predicted_data_frame)
在转换后的 numpy 矩阵上,pandas 数据框对象中的结果列由 NaN 组成。
测试数据由数千个样本组成,其中 5 个是随机抽取的。
测试数据示例的Dtypes:
test_data.dtypes:
longitiude float64
latitiude float64
housing median age float64
count of rooms float64
count of bedrooms float64
population float64
families float64
median earnings float64
distance to ocean object
dtype: object
根据这个测试数据,使用 SciKit 线性回归模型进行预测,结果数组是一个 numpy 数组。 预测:
[ 85657.90192014 305492.60737488 152056.46122456 186095.70946094
244550.67966089]
现在我正在使用 pandas .DataFrame() 函数转换这个数组,如下所示:
plot_test_data = test_data.drop('distance to ocean', axis=1) # since 'distance to ocean' is
not a numerical value I drop it for plotting purposes
predicted_data_frame = pd.DataFrame(predictions.T, columns=['housing median'])
# and then I join predicted_data_frame and plot_test data:
plot_test_data = plot_test_data.join(predicted_data_frame)
但是合并的predicted_data_frame pandas 对象中的结果列由 NaN 组成;
即使housing median 列由 float64 类型组成:
plot_test_data:
longitiude float64
latitiude float64
housing median age float64
count of rooms float64
count of bedrooms float64
population float64
families float64
median earnings float64
housing median float64
dtype: object
我不知道如何解决这个问题,老实说,我发现知道如何可视化我的未来模型的预测很重要,这样它们就可以在他们将要做的任何事情中证明是有用的,我已经搜索过谷歌搜索类似的问题,但我觉得我没有找到答案(或者我不明白)。 所以我真的很感激你的帮助。
提前谢谢你:)
我已尽力描述问题所在,希望可以理解。
编辑:
好的,join() 函数需要一个“密钥”,所以我这样做了:
plot_test_data = test_data.drop('distance to ocean', axis=1)
predicted_data_frame = pd.DataFrame(predictions.T, columns=['housing
median'])
# new object meant to have the unique key for the usage of merge/join
# func
add_to_plot_test_data = test_data[['longitiude']].copy()
# since it does not have the 'key' to proceed with join or merge
# I used concat()
add_to_plot_test_data = pd.concat([add_to_plot_test_data,
predicted_data_frame], axis=1)
# merging two dataframes to get 'housing median' column
plot_test_data =
plot_test_data.merge(add_to_plot_test_data,on='longitiude',how='outer')
但不幸的是它根本不起作用,结果是:
#######
add_to_plot_test_data
#######
longitiude housing median
0 NaN 85657.901920
1 NaN 305492.607375
2 NaN 152056.461225
3 NaN 186095.709461
4 NaN 244550.679661
2908 -119.04 NaN
12655 -121.46 NaN
14053 -117.13 NaN
15502 -117.23 NaN
20496 -118.70 NaN
问题是我不知道如何将列“加入”这些行。
【问题讨论】:
-
join通过密钥完成其工作。这两者是否具有相同的键值?对于plot_test_data中的每一行,predictions中是否只有一项?也许你只需要plot_test_data['housing median'] = predictions.T。 -
啊,我不知道。谢谢。我会尝试对其进行实验,完成后我会告诉你它是如何进行的。
-
@TimRoberts 我想我知道问题出在哪里。但不幸的是,我不知道如何解决它。由于 test_data 正在被随机洗牌,因此随机选择了 5 个“值”到集合中。当我在新创建的名为 'add_to_test_plot_data' 的对象上使用 'pd.concat()' 时,它意味着让 '.join()' 函数起作用,我看到了这个:^(post edit)