gpt4 book ai didi

python - 如何在使用/一次热编码运行 Scikit 模型后检索原始变量

转载 作者:太空狗 更新时间:2023-10-30 01:32:09 25 4
gpt4 key购买 nike

我已经从 scikit-learn 成功运行了逻辑回归模型 SGDClassifier包但不能轻易解释模型的系数(通过 SGDClassifier.coef_ 访问),因为输入数据是通过 scikit-learn 的 OneHotEncoder 转换的.

我的原始输入数据 X 的形状是 (12000,11):

X = np.array([[1,4,3...9,4,1],
[5,9,2...3,1,4],
...
[7,8,1...6,7,8]
])

然后我应用了一种热编码:

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
X_OHE = enc.fit_transform(X).toarray()

生成形状为 (12000, 696) 的数组:

X_OHE = np.array([[1,0,1...0,0,1],
[0,0,0...0,1,0],
...
[1,0,1...0,0,1]
])

然后我使用生成形状数组 (1,696) 的 SGDClassifier.coef_ 访问模型的系数:

coefs = np.array([[-1.233e+00,0.9123e+00,-2.431e+00...-0.238e+01,-1.33e+00,0.001e-01]])

如何将系数值映射回 X 中的原始值,这样我就可以说“如果变量 foo 的值为 bar,目标变量增加/减少 bar_coeff"?

如果您需要有关数据或模型参数的更多信息,请告诉我。谢谢。

我在 SO 上发现了一个 Unresolved 问题:How to retrieve coefficient names after label encoding and one hot encoding on scikit-learn?

最佳答案

查看此用户对 OneHotEncoder 的详细说明后 here ,我能够创建一种(有点 hack-y)方法将模型系数关联回原始数据集。

假设您已经正确设置了OneHotEncoder:

from sklearn.preprocessing import OneHotEncoder
from scipy import sparse

enc = OneHotEncoder()
X_OHE = enc.fit_transform(X) # X and X_OHE as described in question

并且您已经成功运行了 GLM 模型,比如说:

from sklearn import linear_model

clf = linear_model.SGDClassifier()
clf.fit(X_train, y_train)

它有系数clf.coef_:

print clf.coef_
# np.array([[-1.233e+00,0.9123e+00,-2.431e+00...-0.238e+01,-1.33e+00,0.001e-01]])

您可以使用以下方法将 X_OHE 中编码的 1 和 0 追溯到 X 中的原始值。我建议阅读上面提到的关于 OneHotEncoding 的详细解释(链接在顶部),否则下面的内容看起来像是胡言乱语。但简而言之,下面的代码迭代了 X_OHE 中的每个 feature 并使用 enc 内部的 feature_indices 参数来进行翻译。

import pandas as pd
import numpy as np
results = []

for i in range(enc.active_features_.shape[0]):
f = enc.active_features_[i]

index_range = np.extract(enc.feature_indices_ <= f, enc.feature_indices_)
s = len(index_range) - 1
f_index = index_range[-1]
f_label_decoded = f - f_index

results.append({
'label_decoded_value': f_label_decoded,
'coefficient': clf.coef_[0][i]
})

R = pd.DataFrame.from_records(results)

其中R是这样的(我原来编码了公司部门的名称):

coefficient label_decoded_value
3.929413 DepartmentFoo1
3.718078 DepartmentFoo2
3.101869 DepartmentFoo3
2.892845 DepartmentFoo4
...

因此,现在您可以说,“当员工在部门 'Foo1' 时,目标变量增加 3.929413。

关于python - 如何在使用/一次热编码运行 Scikit 模型后检索原始变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45041387/

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