- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试在 PySpark 中运行线性回归,我想创建一个表,其中包含汇总统计信息,例如数据集中每一列的系数、P 值和 t 值。但是,为了训练线性回归模型,我必须使用 Spark 的 VectorAssembler
创建一个特征向量,现在对于每一行我都有一个特征向量和目标列。当我尝试访问 Spark 的内置回归汇总统计信息时,他们为我提供了每个统计信息的非常原始的数字列表,并且无法知道哪个属性对应于哪个值,这很难手动找出大量的列。如何将这些值映射回列名称?
例如,我的当前输出是这样的:
Coefficients: [-187.807832407,-187.058926726,85.1716641376,10595.3352802,-127.258892837,-39.2827730493,-1206.47228704,33.7078197705,99.9956812528]
P-Value: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.18589731365614548, 0.275173571416679, 0.0]
t-statistic: [-23.348593508995318, -44.72813283953004, 19.836508234714472, 144.49248881747755, -16.547272230754242, -9.560681351483941, -19.563547400189073, 1.3228378389036228, 1.0912415361190977, 20.383256127350474]
Coefficient Standard Errors: [8.043646497811427, 4.182131353367049, 4.293682291754585, 73.32793120907755, 7.690626652102948, 4.108783841348964, 61.669402913526625, 25.481445101737247, 91.63478289909655, 609.7007361468519]
除非我知道它们对应于哪个属性,否则这些数字毫无意义。但是在我的 DataFrame
中,我只有一个名为“features”的列,其中包含多行稀疏向量。
当我有单热编码特征时,这是一个更大的问题,因为如果我有一个编码长度为 n 的变量,我将得到 n 个对应的系数/p 值/t 值等。
最佳答案
截至目前,Spark 并未提供任何可以为您完成此操作的方法,因此如果您必须创建自己的方法。假设您的数据如下所示:
import random
random.seed(1)
df = sc.parallelize([(
random.choice([0.0, 1.0]),
random.choice(["a", "b", "c"]),
random.choice(["foo", "bar"]),
random.randint(0, 100),
random.random(),
) for _ in range(100)]).toDF(["label", "x1", "x2", "x3", "x4"])
并使用以下管道进行处理:
from pyspark.ml.feature import StringIndexer, OneHotEncoder, VectorAssembler
from pyspark.ml import Pipeline
from pyspark.ml.regression import LinearRegression
indexers = [
StringIndexer(inputCol=c, outputCol="{}_idx".format(c)) for c in ["x1", "x2"]]
encoders = [
OneHotEncoder(
inputCol=idx.getOutputCol(),
outputCol="{0}_enc".format(idx.getOutputCol())) for idx in indexers]
assembler = VectorAssembler(
inputCols=[enc.getOutputCol() for enc in encoders] + ["x3", "x4"],
outputCol="features")
pipeline = Pipeline(
stages=indexers + encoders + [assembler, LinearRegression()])
model = pipeline.fit(df)
获取LinearRegressionModel
:
lrm = model.stages[-1]
转换数据:
transformed = model.transform(df)
提取并展平 ML 属性:
from itertools import chain
attrs = sorted(
(attr["idx"], attr["name"]) for attr in (chain(*transformed
.schema[lrm.summary.featuresCol]
.metadata["ml_attr"]["attrs"].values())))
并映射到输出:
[(name, lrm.summary.pValues[idx]) for idx, name in attrs]
[('x1_idx_enc_a', 0.26400012641279824),
('x1_idx_enc_c', 0.06320192217171572),
('x2_idx_enc_foo', 0.40447778902400433),
('x3', 0.1081883594783335),
('x4', 0.4545851609776568)]
[(name, lrm.coefficients[idx]) for idx, name in attrs]
[('x1_idx_enc_a', 0.13874401585637453),
('x1_idx_enc_c', 0.23498565469334595),
('x2_idx_enc_foo', -0.083558932128022873),
('x3', 0.0030186112903237442),
('x4', -0.12951394186593695)]
关于python - 如何将 VectorAssembler 输出的特征映射回 Spark ML 中的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42935914/
如何将运算符传递给 ML 中的函数?例如,考虑这个伪代码: function (int a, int b, operator op) return a op b 这里,运算符可以是 op +
我尝试在 Google Cloud ML 上运行来自 github 的 word-RNN 模型。提交作业后,我在日志文件中收到错误。 这是我提交的训练内容 gcloud ml-engine jobs
在 a.ml 中定义了一个记录类型 t 并且也是透明地定义的 在 a.mli 中,即在 d 接口(interface)中,以便类型定义可用 到所有其他文件。 a.ml 还有一个函数 func,它返回一
关闭 ML.NET 模型生成器后,是否可以为创建的模型重新打开它? 我可以删除创建的模型并重新开始,但这并不理想。 最佳答案 不,不是真的。 AutoML/Model Builder 可以生成代码并将
我有一个关于训练可以预测名称是否为女性的 ML.NET 的问题。该模型可以使用这样的管道进行训练: var mlContext = new MLContext(); IDataView trainin
我在 ASP.NET Core 应用程序中使用 ML.NET,并在 Startup 中使用以下代码: var builder = services.AddPredictionEnginePool();
我使用 sklearn 创建了一个模型进行分类。当我调用函数 y_pred2 = clf.predict (features2) 时,它会返回一个包含我的预测的所有 id 的列表 y_pred2 =
我已向 cloud ml 提交了训练作业。但是,它找不到 csv 文件。它就在桶里。这是代码。 # Use scikit-learn to grid search the batch size and
我是 Azure Databricks 的新手,尽管我在 Databricks 方面有很好的经验,但仅限于 Data Engg 方面。我对 Databricks Runtime ML 和 ML Flo
为什么我尝试将经过训练的模型部署到 Google Cloud ML,却收到以下错误: Create Version failed.Model validation failed: Model meta
我是 Azure Databricks 的新手,尽管我在 Databricks 方面有很好的经验,但仅限于 Data Engg 方面。我对 Databricks Runtime ML 和 ML Flo
我是 Azure ML 新手。我有一些疑问。有人可以澄清下面列出的我的疑问吗? Azure ML 服务与 Azure ML 实验服务之间有什么区别。 Azure ML 工作台和 Azure ML St
我的 Cloud ML 训练作业已完成,输出如下: "consumedMLUnits": 43.24 我如何使用此信息来确定培训工作的成本?我无法在以下两个选项之间做出决定: 1)根据这个page ,
docs for setting up Google Cloud ML建议安装 Tensorflow 版本 r0.11。我观察到 r0.12 中新提供的 TensorFlow 函数在 Cloud ML
我正在关注一个来自 - https://spark.apache.org/docs/2.3.0/ml-classification-regression.html#multinomial-logist
我想使用 mosmlc 将我的 ML 程序编译成可执行二进制文件。但是,我找不到太多关于如何操作的信息。 我想编译的代码在这里http://people.pwf.cam.ac.uk/bt288/tic
假设我有两个 Azure ML 工作区: Workspace1 - 由一个团队(Team1)使用,该团队仅训练模型并将模型存储在 Workspace1 的模型注册表中 Workspace2 - 由另一
我尝试使用以下命令行在 Azure 上的 Linux(Ubuntu) 数据科学虚拟机上设置我的 Azure 机器学习环境: az ml 环境设置 但是,它显示错误为加载命令模块 ml 时出错。一直在谷
假设我有两个 Azure ML 工作区: Workspace1 - 由一个团队(Team1)使用,该团队仅训练模型并将模型存储在 Workspace1 的模型注册表中 Workspace2 - 由另一
我尝试使用以下命令行在 Azure 上的 Linux(Ubuntu) 数据科学虚拟机上设置我的 Azure 机器学习环境: az ml 环境设置 但是,它显示错误为加载命令模块 ml 时出错。一直在谷
我是一名优秀的程序员,十分优秀!