小编Ser*_*nov的帖子

Pandas 聚合以与 nan 一起计数

pandas 计数聚合忽略了 nan 的计数。我需要一个包含它们的计数。Numpy 具有某些但不是所有 nan 修改聚合的聚合,我是否必须使用自定义聚合,或者是否有一种我找不到的方法可以做到这一点?

这是针对 groupby 的,我想要正常的 NaN 功能来表示平均值,但对于计数来说很奇怪。在代码中

In [1]: import numpy

In [2]: import pandas as pd

In [3]: df = pd.DataFrame([[0,float('nan')],[0,float('nan')],[0,float('nan')]])

In [4]: df.groupby(0).agg(['count', 'mean'])
Out[4]:
      1
  count mean
0
0     0  NaN
Run Code Online (Sandbox Code Playgroud)

我希望输出为 3 Nan 而不是 0 NaN。

numpy pandas

6
推荐指数
1
解决办法
4565
查看次数

如何在Yarn下限制Hadoop集群中资源的动态自我分配?

在我们在Yarn下运行的Hadoop集群中,我们遇到的问题是,一些"聪明"的人可以通过在pySpark Jupyter笔记本中配置Spark作业来吃掉更大的资源块:

conf = (SparkConf()
        .setAppName("name")
        .setMaster("yarn-client")
        .set("spark.executor.instances", "1000")
        .set("spark.executor.memory", "64g")
        )

sc = SparkContext(conf=conf)
Run Code Online (Sandbox Code Playgroud)

这导致了这样一种情况,即这些人真正挤出其他人不那么"聪明".

有没有办法禁止用户自行分配资源并将资源分配仅留给Yarn?

hadoop hadoop-yarn apache-spark pyspark

6
推荐指数
1
解决办法
1070
查看次数

scikit-learn:cross_val_predict 仅适用于分区

我正在努力研究如何在 sklearn 中实现 TimeSeriesSplit。

下面链接中的建议答案产生了相同的 ValueError。

sklearn TimeSeriesSplit cross_val_predict 仅适用于分区

这里是我的代码中的相关位:

from sklearn.model_selection import cross_val_predict
from sklearn import svm

features = df[df.columns[0:6]]
target = df['target']

clf = svm.SVC(random_state=0)

pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))
Run Code Online (Sandbox Code Playgroud)
ValueError                                Traceback (most recent call last)
<ipython-input-57-d1393cd05640> in <module>()
----> 1 pred = cross_val_predict(clf, features, target, cv=TimeSeriesSplit(n_splits=5).split(features))

/home/jedwards/anaconda3/envs/py36/lib/python3.6/site-packages/sklearn/model_selection/_validation.py in cross_val_predict(estimator, X, y, groups, cv, n_jobs, verbose, fit_params, pre_dispatch, method)
    407 
    408     if not _check_is_permutation(test_indices, _num_samples(X)):
--> 409         raise ValueError('cross_val_predict only works for partitions')
    410 
    411     inv_test_indices …
Run Code Online (Sandbox Code Playgroud)

python time-series scikit-learn cross-validation

6
推荐指数
1
解决办法
4894
查看次数

RandomForest 多类的 SHAP TreeExplainer:什么是 shap_values[i]?

我正在尝试绘制 SHAP 这是我的代码rnd_clfRandomForestClassifier

import shap 
explainer = shap.TreeExplainer(rnd_clf) 
shap_values = explainer.shap_values(X) 
shap.summary_plot(shap_values[1], X) 
Run Code Online (Sandbox Code Playgroud)

我理解这shap_values[0]是消极的也是shap_values[1]积极的。

但是对于多类 RandomForestClassifier 呢?我有rnd_clf以下分类之一:

[“Gusto”、“Kestrel 200 SCI 老式公路自行车”、“Vilano 铝合金公路自行车 21 速 Shimano”、“Fixie”]。

如何确定哪个索引shap_values[i]对应于输出的哪个类别?

python random-forest scikit-learn shap

6
推荐指数
1
解决办法
1万
查看次数

SHAP 不适用于 LightGBM 分类特征

我的模型使用LGBMClassifier. 我想用 Shap (Shapley) 来解释特征。然而,Shap 在分类特征上给了我错误。例如,我有一个功能“吸烟者”,其值包括“是”和“否”。我从 Shap 收到错误:

ValueError: could not convert string to float: 'Yes'.
Run Code Online (Sandbox Code Playgroud)

我是否缺少任何设置?

顺便说一句,我知道我可以使用 one-hot 编码来转换分类特征,但我不想这样做,因为LGBMClassifier可以在没有 one-hot 编码的情况下处理分类特征。

示例代码如下:(shap版本为0.40.0,lightgbm版本为3.3.2)

import pandas as pd
from lightgbm import LGBMClassifier #My version is 3.3.2
import shap #My version is 0.40.0

#The training data
X_train = pd.DataFrame()
X_train["Age"] = [50, 20, 60, 30]
X_train["Smoker"] = ["Yes", "No", "No", "Yes"]

#Target: whether the person had a certain disease
y_train = [1, 0, 0, 0]
#I did convert …
Run Code Online (Sandbox Code Playgroud)

python lightgbm shap

6
推荐指数
1
解决办法
3313
查看次数

使用 Shap 获取预测解释的正确方法是什么?

我刚开始使用shap,所以我仍在努力理解它。基本上,我有一个简单的sklearn.ensemble.RandomForestClassifier使用model.fit(X_train,y_train),等等。训练后,我想获得 Shap 值来解释对未见数据的预测。根据文档和其他教程,这似乎是要走的路:

explainer = shap.Explainer(model.predict, X_train)
shap_values = explainer.shap_values(X_test)
Run Code Online (Sandbox Code Playgroud)

然而,这需要很长时间才能运行(我的数据大约需要 18 小时)。如果我将第一行中的 替换为,即model.predictmodel

explainer = shap.Explainer(model, X_train)
shap_values = explainer.shap_values(X_test)
Run Code Online (Sandbox Code Playgroud)

它显着缩短了运行时间(减少至约 40 分钟)。所以这让我想知道在第二种情况下我实际上得到了什么?

重申一下,我只是想能够解释新的预测,而且对我来说这似乎很奇怪,它会如此昂贵 - 所以我确信我做错了什么。

python machine-learning scikit-learn shap

6
推荐指数
1
解决办法
3625
查看次数

如何找到哪个库阻止更新 conda 中的包?

我已经使用数据科学库设置了几个环境,例如pandas, numpy, matplotlib, scikit-learn, tensorflow etc..

但是我无法将某些软件包更新到最新版本。

例如

conda update pandas
Run Code Online (Sandbox Code Playgroud)

会告诉我我有可用的最新版本,但我确定最新版本是1.+(我的是 0.25

有没有办法查看哪些包阻止了特定包的更新?

python python-3.x pandas anaconda conda

5
推荐指数
1
解决办法
124
查看次数

LightGBM错误:ValueError:为了提前停止,至少需要一个数据集和评估指标进行评估

我正在尝试使用 gridsearch 训练 LightGBM,当我尝试训练模型时出现以下错误。

ValueError: For early stopping, at least one dataset and eval metric is required for evaluation
Run Code Online (Sandbox Code Playgroud)

我提供了验证数据集和评估指标。不知道为什么我仍然遇到这个问题。这是我的代码。

train_data  = rtotal[rtotal['train_Y'] == 1]
test_data   = rtotal[rtotal['train_Y'] == 0]

trainData, validData = train_test_split(train_data, test_size=0.007, random_state = 123)

#train data prep
X_train = trainData.iloc[:,2:71]
y_train = trainData.loc[:,['a_class']]

#validation data prep
X_valid = validData.iloc[:,2:71]
y_valid = validData.loc[:,['a_class']]

#X_test
X_test = test_data.iloc[:,2:71]

import lightgbm as lgb
from sklearn.model_selection import GridSearchCV

gridParams = {
    'learning_rate': [0.005],
    'n_estimators': [40],
    'num_leaves': [16,32, 64],
    'objective' : …
Run Code Online (Sandbox Code Playgroud)

python machine-learning python-3.x scikit-learn lightgbm

5
推荐指数
1
解决办法
2万
查看次数

在 LightGBM 中使用“predict_contrib”来获取 SHAP 值

LightGBM文档中指出,可以设置predict_contrib=True来预测 SHAP 值。

我们如何提取 SHAP 值(除了使用shap包之外)?

我努力了

model = LGBM(objective="binary",is_unbalance=True,predict_contrib=True)
model.fit(X_train,y_train)
pred_shap = opt_model.predict(X_train) #Does not get SHAP-values
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用

python machine-learning lightgbm shap

5
推荐指数
1
解决办法
8014
查看次数

二元分类中的特征重要性并仅提取其中一类的 SHAP 值

假设我们有一个二元分类问题,我们有两个类别 1 和 0 作为我们的目标。我的目标是使用树分类器来预测给定特征的 1 和 0。此外,我可以使用 SHAP 值对预测 1 和 0 的特征重要性进行排名。到现在为止一切都很好!

现在假设我想知道仅预测 1 的特征的重要性,那里推荐的方法是什么?我可以将我的数据分成两部分(名义上:)df_tot = df_zeros + df_onesdf_ones在我的分类器中使用,然后为此提取 SHAP 值,但是这样做目标将只有 1,因此模型并没有真正学会分类任何东西。所以我想知道如何解决这样的问题?

python classification machine-learning shap

5
推荐指数
1
解决办法
1256
查看次数