我正在使用
在使用
因此我的问题是:在使用sklearns
<强>编辑2-由Venkatachalam请求的真实数据:
sklearns' pipeline
函数进行one hot编码
和建模
,几乎与this帖子完全相同。在使用
Pipeline
后,我无法再获取树的贡献。出现以下错误:
我尝试了一些treeinterpreter参数的调整,但卡住了。AttributeError: 'Pipeline' object has no attribute 'n_outputs_'
因此我的问题是:在使用sklearns
Pipeline
时,有没有任何方法可以从树中获取贡献?<强>编辑2-由Venkatachalam请求的真实数据:
# Data DF to train model
df = pd.DataFrame(
[['SGOHC', 'd', 'onetwothree', 'BAN', 488.0580347, 960 ,841, 82, 0.902497027, 841 ,0.548155625 ,0.001078211, 0.123958333 ,1],
['ABCDEFGHIJK', 'SOC' ,'CON','CAN', 680.84, 1638, 0, 0, 0 ,0 ,3.011140743 ,0.007244358, 1 ,0],
['Hello', 'AA', 'onetwothree', 'SPEAKER', 5823.230967, 2633, 1494 ,338 ,0.773761714 ,1494, 12.70144386 ,0.005743015, 0.432586403, 8]],
columns=['B','C','D','E','F','G','H','I','J','K','L','M', 'N', 'target'])
# Create test and train set (useless, but for the example...)
from sklearn.model_selection import train_test_split
# Define X and y
X = df.drop('target', axis=1)
y = df['target']
# Create Train and Test Sets
X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1)
# Make the pipeline and model
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import OneHotEncoder
import numpy as np
import pandas as pd
from sklearn import set_config
from sklearn.model_selection import ParameterGrid
from sklearn.ensemble import RandomForestRegressor
import matplotlib.pyplot as plt
rfr = Pipeline([('preprocess',
ColumnTransformer([('ohe',
OneHotEncoder(handle_unknown='ignore'), [1])])),
('rf', RandomForestRegressor())])
rfr.fit(X_train, Y_train)
# The New, Real data that we need to predict & explain!
new_data = pd.DataFrame(
[['DEBTYIPL', 'de', 'onetwothreefour', 'BANAAN', 4848.0580347, 923460 ,823441, 5, 0.902497027, 43 ,0.548155625 ,0.001078211, 0.123958333 ],
['ABCDEFGHIJK', 'SOC' ,'CON','CAN23', 680.84, 1638, 0, 0, 0 ,0 ,1.011140743 ,4.007244358, 1 ],
['Hello_NO', 'AAAAa', 'onetwothree', 'SPEAKER', 5823.230967, 123, 32 ,22 ,0.773761714 ,1678, 12.70144386 ,0.005743015, 0.432586403]],
columns=['B','C','D','E','F','G','H','I','J','K','L','M', 'N'])
new_data.head()
# Predicting the values
rfr.predict(new_data)
# Now the error... the contributions:
from treeinterpreter import treeinterpreter as ti
prediction, bias, contributions = ti.predict(rfr[-1], rfr[:-1].fit_transform(new_data))
#ValueError: Number of features of the model must match the input. Model n_features is 2 and input n_features is 3
.transform
而不是fit_transform
。这意味着它将重复使用训练阶段学习到的类别,而不是从给定数据中重新学习。 - Venkatachalam