我正在使用Python的PyALE函数创建累积局部效果图。我正在使用RandomForestProgression函数来构建模型。
我可以创建1D ALE图。然而,当我尝试使用相同的模型和训练数据创建2D ALE图时,我会得到一个Value Error。
这是我的密码。
ale(training_data, model=model1, feature=["feature1", "feature2"])
我可以用以下代码绘制特征1和特征2的1D ALE图。
ale(training_data, model=model1, feature=["feature1"], feature_type="continuous")
ale(training_data, model=model1, feature=["feature2"], feature_type="continuous")
数据帧中的任何列都不存在缺失值或无限值。
2D ALE绘图命令出现以下错误。
ValueError: Input contains NaN, infinity or a value too large for dtype('float32').
这是函数的链接https://pypi.org/project/PyALE/#description
我不知道为什么会出现这个错误。我希望能在这方面得到一些帮助。
谢谢你,
Rohin
这个问题在PyALE包的v11.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)