我正在尝试使用以下内容在IntelliJ Idea中构建Scala/Spark项目build.sbt:
name := "try"
version := "1.0"
scalaVersion := "2.11.8"
val sparkVersion = "2.2.0"
resolvers ++= Seq(
"apache-snapshots" at "http://repository.apache.org/snapshots/"
)
libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % sparkVersion,
"org.apache.spark" %% "spark-sql" % sparkVersion,
"org.apache.spark" %% "spark-mllib" % sparkVersion,
"org.apache.spark" %% "spark-streaming" % sparkVersion,
"org.apache.spark" %% "spark-hive" % sparkVersion
)
Run Code Online (Sandbox Code Playgroud)
并得到一堆警告:
8/6/17
1:29 PM SBT project import
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn] * io.netty:netty:3.9.9.Final is selected over …Run Code Online (Sandbox Code Playgroud) 我使用pandas.cut由IntervalIndex.from_tuples.
剪切按预期工作,但是类别显示为我在IntervalIndex. 有没有办法将类别重命名为不同的标签,例如(小、中、大)?
例子:
bins = pd.IntervalIndex.from_tuples([(0, 1), (2, 3), (4, 5)])
pd.cut([0, 0.5, 1.5, 2.5, 4.5], bins)
Run Code Online (Sandbox Code Playgroud)
结果类别将是:
[NaN, (0, 1], NaN, (2, 3], (4, 5]]
Categories (3, interval[int64]): [(0, 1] < (2, 3] < (4, 5]]
Run Code Online (Sandbox Code Playgroud)
我正在尝试更改[(0, 1] < (2, 3] < (4, 5]]为类似1, 2 ,3or 的东西small, medium ,large。
遗憾的是,在使用 IntervalIndex 时,pd.cut 的标签参数参数会被忽略。
谢谢!
更新:
感谢@SergeyBushmanov,我注意到这个问题仅在尝试更改数据框内的类别标签时才存在(这就是我想要做的)。更新示例:
In [1]: df = pd.DataFrame([0, 0.5, 1.5, 2.5, 4.5], columns …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用这个shap包。我想从我的逻辑回归模型中确定形状值。与 相反TreeExplainer,LinearExplainer需要所谓的掩蔽器。这个掩码器到底有什么作用,独立掩码器和分区掩码器有什么区别?
另外,我对测试集中的重要功能很感兴趣。然后我是否将掩蔽器安装在训练集或测试集上?下面您可以看到一段代码。
model = LogisticRegression(random_state = 1)
model.fit(X_train, y_train)
masker = shap.maskers.Independent(data = X_train)
**or**
masker = shap.maskers.Independent(data = X_test)
explainer = shap.LinearExplainer(model, masker = masker)
shap_val = explainer(X_test)```
Run Code Online (Sandbox Code Playgroud) Samples.zip 示例压缩文件夹包含:
要重现问题,请执行以下步骤:
lin2 =joblib.load('model.pkl')加载线性回归模型x_test_2 = pd.read_csv('x_test.csv').drop(['Unnamed: 0'],axis=1)加载x_test_2explainer_test = shap.Explainer(lin2.predict, x_test_2)
shap_values_test = explainer_test(x_test_2)
Run Code Online (Sandbox Code Playgroud)
partial_dependence_plot查看错误信息:ValueError:x 和 y 不能大于二维,但具有形状 (2,) 和 (2, 1, 1)
sample_ind = 3
shap.partial_dependence_plot(
"new_personal_projection_delta",
lin.predict,
x_test, model_expected_value=True,
feature_expected_value=True, ice=False,
shap_values=shap_values_test[sample_ind:sample_ind+1,:]
)
Run Code Online (Sandbox Code Playgroud)
例外:waterfall_plot 需要模型输出的标量 base_values 作为第一个参数,但您已传递一个数组作为第一个参数!尝试 shap.waterfall_plot(explainer.base_values[0], value[0], X[0]) 或对于多输出模型尝试 shap.waterfall_plot(explainer.base_values[0], value[0][0], X[ 0])。
shap.plots.waterfall(shap_values_test[sample_ind], max_display=14)
partial_dependence_plot& shap.plots.waterfall?我正在使用Spark 2.0和PySpark.
我SparkSession通过GetOrCreate2.0中引入的方法重新定义参数:
此方法首先检查是否存在有效的全局默认SparkSession,如果是,则返回该值.如果不存在有效的全局默认SparkSession,则该方法将创建新的SparkSession并将新创建的SparkSession指定为全局默认值.
如果返回现有SparkSession,则此构建器中指定的配置选项将应用于现有SparkSession.
到现在为止还挺好:
from pyspark import SparkConf
SparkConf().toDebugString()
'spark.app.name=pyspark-shell\nspark.master=local[2]\nspark.submit.deployMode=client'
spark.conf.get("spark.app.name")
'pyspark-shell'
Run Code Online (Sandbox Code Playgroud)
然后我重新定义SparkSession配置,并承诺在WebUI中查看更改
appName(name)
设置应用程序的名称,该名称将显示在Spark Web UI中.
c = SparkConf()
(c
.setAppName("MyApp")
.setMaster("local")
.set("spark.driver.memory","1g")
)
from pyspark.sql import SparkSession
(SparkSession
.builder
.enableHiveSupport() # metastore, serdes, Hive udf
.config(conf=c)
.getOrCreate())
spark.conf.get("spark.app.name")
'MyApp'
Run Code Online (Sandbox Code Playgroud)
现在,当我去localhost:4040,我希望看到MyApp一个应用程序名称.
但是,我仍然看到 pyspark-shell application UI
我哪里错了?
提前致谢!
我尝试使用 DeepExplainer 计算 shap 值,但出现以下错误:
不再支持 keras,请改用 tf.keras
即使我使用 tf.keras?
KeyError Traceback(最近一次调用最后一次)
在
6 # ...或者直接传递张量
7 解释器 = shap.DeepExplainer((model.layers[0].input, model.layers[-1].output), 背景)
8 shap_values = 解释器.shap_values(X_test[1:5])
C:\ProgramData\Anaconda3\lib\site-packages\shap\explainers\_deep\__init__.py in shap_values(self、X、ranked_outputs、output_rank_order、check_additivity)
122 人被选为“顶级”。
[第 124 章]
C:\ProgramData\Anaconda3\lib\site-packages\shap\explainers\_deep\deep_tf.py 在 shap_values(self、X、ranked_outputs、output_rank_order、check_additivity)
[第 310 章]
[第 311 章]
[第 312 章]
313
第314章
C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\frame.py 中 __getitem__(self, key)
第2798章
第2799章
第2800章
第2801章
第2802章
get_loc 中的 C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\indexes\base.py(self、key、method、tolerance)
第2646章
第2647章
第2648章
第2649章
第2650章
pandas\_libs\index.pyx 在 pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\index.pyx 在 pandas._libs.index.IndexEngine.get_loc()
pandas\_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
pandas\_libs\hashtable_class_helper.pxi 在 pandas._libs.hashtable.PyObjectHashTable.get_item()
密钥错误:0
import shap …Run Code Online (Sandbox Code Playgroud) 我正在调查一个GradientBoostingClassifierin sklearn. 然后,我发现有3种标准。Friedman mse、mse、mae。\n提供的描述sklearn是:
\n\n\n衡量分割质量的函数。支持的标准为 \xe2\x80\x9cfriedman_mse\xe2\x80\x9d 表示均方误差以及 Friedman 的改进分数,\xe2\x80\x9cmse\xe2\x80\x9d 表示均方误差,以及 \xe2\x80\x9cmae \xe2\x80\x9d 为平均绝对误差。\xe2\x80\x9cfriedman_mse\xe2\x80\x9d 的默认值通常是最好的,因为它在某些情况下可以提供更好的近似值。
\n
我不明白有什么不同?\n谁能让我知道?
\n\n谢谢!
\n我尝试运行代码来获取股票数据,但失败了,显示以下错误:
'DatetimeProperties' 对象没有属性 'weekday_name'
'NoneType' 对象没有属性 'to_csv'
from pandas_datareader import data as web
import os
import pandas as pd
from pandas.testing import assert_frame_equal
Run Code Online (Sandbox Code Playgroud)
def get_stock(ticker, start_date, end_date, s_window, l_window):
try:
df = web.get_data_yahoo(ticker, start=start_date, end=end_date)
df['Return'] = df['Adj Close'].pct_change()
df['Return'].fillna(0, inplace = True)
df['Date'] = df.index
df['Date'] = pd.to_datetime(df['Date'])
df['Month'] = df['Date'].dt.month
df['Year'] = df['Date'].dt.year
df['Day'] = df['Date'].dt.day
for col in ['Open', 'High', 'Low', 'Close', 'Adj Close']:
df[col] = df[col].round(2)
df['Weekday'] = df['Date'].dt.weekday_name
df['Week_Number'] = df['Date'].dt.strftime('%U')
df['Year_Week'] = df['Date'].dt.strftime('%Y-%U')
df['Short_MA'] …Run Code Online (Sandbox Code Playgroud) 在我们在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?
我刚开始使用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 分钟)。所以这让我想知道在第二种情况下我实际上得到了什么?
重申一下,我只是想能够解释新的预测,而且对我来说这似乎很奇怪,它会如此昂贵 - 所以我确信我做错了什么。
python ×6
shap ×4
apache-spark ×3
pandas ×2
pyspark ×2
scikit-learn ×2
hadoop ×1
hadoop-yarn ×1
keras ×1
plot ×1
pyspark-sql ×1
sbt ×1
scala ×1
statistics ×1
tensorflow ×1
tf.keras ×1