gpt4 book ai didi

python - 通过将 sklearn.predict 传递给 df.apply 对 Pandas 数据帧进行行式预测

转载 作者:行者123 更新时间:2023-12-01 23:24:03 25 4
gpt4 key购买 nike

假设我们有一个 Pandas 数据框和一个 scikit-learn 模型,并使用该数据框进行训练(拟合)。有没有办法进行逐行预测?用例是使用 sklearn 模型使用预测函数填充数据框中的空值。

我预计这可以使用 pandas apply 函数(轴=1)实现,但我不断收到维度错误。

使用 Pandas 版本“0.22.0”和 sklearn 版本“0.19.1”。

简单的例子:

import pandas as pd
from sklearn.cluster import kmeans

data = [[x,y,x*y] for x in range(1,10) for y in range(10,15)]

df = pd.DataFrame(data,columns=['input1','input2','output'])

model = kmeans()
model.fit(df[['input1','input2']],df['output'])

df['predictions'] = df[['input1','input2']].apply(model.predict,axis=1)

由此产生的维度误差:

ValueError: ('Expected 2D array, got 1D array instead:\narray=[ 1. 
10.].\nReshape your data either using array.reshape(-1, 1) if your data has
a single feature or array.reshape(1, -1) if it contains a single sample.',
'occurred at index 0')

对整个列运行预测效果很好:

df['predictions'] = model.predict(df[['input1','input2']])

但是,我希望能够灵活地按行使用此功能。

我首先尝试了各种方法来 reshape 数据,例如:

def reshape_predict(df):
return model.predict(np.reshape(df.values,(1,-1)))

df[['input1','input2']].apply(reshape_predict,axis=1)

它只是返回没有错误的输入,而我希望它返回单列输出值(作为数组)。

解决方案:

感谢 Yakym 提供了有效的解决方案!根据他的建议尝试了一些变体,最简单的解决方案是简单地将行值括在方括号中(我之前尝试过这个,但没有用于预测的 0 索引,没有运气)。

df['predictions'] = df[['input1','input2']].apply(lambda x: model.predict([x])[0],axis=1)

最佳答案

稍微详细一点,您可以通过向值添加新的新轴将每一行转换为二维数组。然后,您必须使用 0 索引访问预测:

df["predictions"] = df[["input1", "input2"]].apply(
lambda s: model.predict(s.values[None])[0], axis=1
)

关于python - 通过将 sklearn.predict 传递给 df.apply 对 Pandas 数据帧进行行式预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50772060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com