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。
在我们在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?
我正在努力研究如何在 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) 我正在尝试绘制 SHAP 这是我的代码rnd_clf是RandomForestClassifier:
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]对应于输出的哪个类别?
我的模型使用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) 我刚开始使用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.predict:model
explainer = shap.Explainer(model, X_train)
shap_values = explainer.shap_values(X_test)
Run Code Online (Sandbox Code Playgroud)
它显着缩短了运行时间(减少至约 40 分钟)。所以这让我想知道在第二种情况下我实际上得到了什么?
重申一下,我只是想能够解释新的预测,而且对我来说这似乎很奇怪,它会如此昂贵 - 所以我确信我做错了什么。
我已经使用数据科学库设置了几个环境,例如pandas, numpy, matplotlib, scikit-learn, tensorflow etc..
但是我无法将某些软件包更新到最新版本。
例如
conda update pandas
Run Code Online (Sandbox Code Playgroud)
会告诉我我有可用的最新版本,但我确定最新版本是1.+(我的是 0.25)
有没有办法查看哪些包阻止了特定包的更新?
我正在尝试使用 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) 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)
这似乎不起作用
假设我们有一个二元分类问题,我们有两个类别 1 和 0 作为我们的目标。我的目标是使用树分类器来预测给定特征的 1 和 0。此外,我可以使用 SHAP 值对预测 1 和 0 的特征重要性进行排名。到现在为止一切都很好!
现在假设我想知道仅预测 1 的特征的重要性,那里推荐的方法是什么?我可以将我的数据分成两部分(名义上:)df_tot = df_zeros + df_ones并df_ones在我的分类器中使用,然后为此提取 SHAP 值,但是这样做目标将只有 1,因此模型并没有真正学会分类任何东西。所以我想知道如何解决这样的问题?
python ×8
shap ×5
scikit-learn ×4
lightgbm ×3
pandas ×2
python-3.x ×2
anaconda ×1
apache-spark ×1
conda ×1
hadoop ×1
hadoop-yarn ×1
numpy ×1
pyspark ×1
time-series ×1