2

我正在使用 Python 的PyALE函数创建累积局部效应图。我正在使用 RandomForestRegression 函数来构建模型。

我可以创建一维 ALE 图。但是,当我尝试使用相同的模型和训练数据创建 2D ALE 图时出现值错误。

这是我的代码。

ale(training_data, model=model1, feature=["feature1", "feature2"])

我可以使用以下代码为 feature1 和 feature2 绘制一维 ALE 图。

ale(training_data, model=model1, feature=["feature1"], feature_type="continuous")

ale(training_data, model=model1, feature=["feature2"], feature_type="continuous")

数据框中的任何列都没有缺失值或无限值。

使用 2D ALE plot 命令时出现以下错误。

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

这是函数https://pypi.org/project/PyALE/#description的链接

我不确定为什么会收到此错误。我将不胜感激这方面的一些帮助。

谢谢,

罗欣

4

1 回答 1

1

问题已在包 PyALE 的 v1.1.2 版本中得到解决。对于那些使用早期版本的人,在 github 的问题线程中提到的解决方法是重置提供给函数的数据集的索引ale。为了完整起见,这里是重现错误和解决方法的代码:

from PyALE import ale
import pandas as pd
import matplotlib.pyplot as plt
import random
from sklearn.ensemble import RandomForestRegressor

# get the raw diamond data (from R's ggplot2)
dat_diamonds = pd.read_csv(
    "https://raw.githubusercontent.com/tidyverse/ggplot2/master/data-raw/diamonds.csv"
)
X = dat_diamonds.loc[:, ~dat_diamonds.columns.str.contains("price")].copy()
y = dat_diamonds.loc[:, "price"].copy()

features = ["carat","depth", "table", "x", "y", "z"]

# fit the model
model = RandomForestRegressor(random_state=1345)
model.fit(X[features], y)

# sample the data
random.seed(1234)
indices = random.sample(range(X.shape[0]), 10000)
sampleData = X.loc[indices, :]

# get the effects.....
# This throws the error
ale_eff = ale(X=sampleData[features], model=model, feature=["z", "table"], grid_size=100)

# This will work, just reset the index with drop=True
ale_eff = ale(X=sampleData[features].reset_index(drop=True), model=model, feature=["z", "table"], grid_size=100)
于 2021-09-02T08:07:03.840 回答