我想在pandas DataFrame上对模型进行评分,然后在同一个DataFrame中创建一个包含该模型预测的列。应该命名新列,以便它引用适当的模型,以便可以使用多个模型多次执行此操作。我可以在R中使用deparse
和substitute
这样做:
df <- data.frame(a=1:5+rnorm(1:5), b=6:10+rnorm(1:5), y=11:15+rnorm(1:5))
ols <- lm(df$y ~ df$a + df$b)
func <- function(df, model){
new_col <- paste0(deparse(substitute(model)), '_predictions')
df[, new_col] <- predict(model, df)
return(df)
}
func(df, ols)
a b y ols_predictions
1 1.569142 7.735250 11.90998 12.99388
2 0.828704 4.468299 12.16632 12.01042
3 2.270323 8.135620 14.25781 13.51283
4 1.847564 9.602450 13.76106 13.46148
5 5.776140 10.723743 16.08072 16.19727
Python中的等价物是什么?
答案 0 :(得分:1)
这可能会有所帮助。
在 R代码中,您可以放弃deparse
并获得相同的结果:
new_col <- paste0(substitute(model), '_predictions')
解析 Python :
import pandas as pd
from sklearn import datasets
from sklearn import linear_model
data = datasets.load_boston()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.DataFrame(data.target, columns=["MEDV"])["MEDV"]
lm = linear_model.LinearRegression()
ols = lm.fit(X,y)
def my_func(df, model):
name = [k for k,v in globals().items() if v is model][1]
new_col = name + "_predictions"
df[new_col] = model.predict(X)
return df
my_func(X, ols)
<强>结果强>:
ATTN :请记住,Python的工作方式与R不同,并且可能会有几个指向内存中同一对象的指针,这可能会导致错误。