blob: fdab51f0895be5580c7f89a61b71d7748c6ebeca [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>pyspark.ml.evaluation &#8212; PySpark 3.2.2 documentation</title>
<link rel="stylesheet" href="../../../_static/css/index.73d71520a4ca3b99cfee5594769eaaae.css">
<link rel="stylesheet"
href="../../../_static/vendor/fontawesome/5.13.0/css/all.min.css">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../../_static/vendor/fontawesome/5.13.0/webfonts/fa-solid-900.woff2">
<link rel="preload" as="font" type="font/woff2" crossorigin
href="../../../_static/vendor/fontawesome/5.13.0/webfonts/fa-brands-400.woff2">
<link rel="stylesheet"
href="../../../_static/vendor/open-sans_all/1.44.1/index.css">
<link rel="stylesheet"
href="../../../_static/vendor/lato_latin-ext/1.44.1/index.css">
<link rel="stylesheet" href="../../../_static/basic.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/pyspark.css" />
<link rel="preload" as="script" href="../../../_static/js/index.3da636dd464baa7582d2.js">
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/underscore.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/language_data.js"></script>
<script src="../../../_static/copybutton.js"></script>
<script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script>
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"inlineMath": [["$", "$"], ["\\(", "\\)"]], "processEscapes": true, "ignoreClass": "document", "processClass": "math|output_area"}})</script>
<link rel="search" title="Search" href="../../../search.html" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="docsearch:language" content="en" />
</head>
<body data-spy="scroll" data-target="#bd-toc-nav" data-offset="80">
<nav class="navbar navbar-light navbar-expand-lg bg-light fixed-top bd-navbar" id="navbar-main">
<div class="container-xl">
<a class="navbar-brand" href="../../../index.html">
<img src="../../../_static/spark-logo-reverse.png" class="logo" alt="logo" />
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar-menu" aria-controls="navbar-menu" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div id="navbar-menu" class="col-lg-9 collapse navbar-collapse">
<ul id="navbar-main-elements" class="navbar-nav mr-auto">
<li class="nav-item ">
<a class="nav-link" href="../../../getting_started/index.html">Getting Started</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="../../../user_guide/index.html">User Guide</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="../../../reference/index.html">API Reference</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="../../../development/index.html">Development</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="../../../migration_guide/index.html">Migration Guide</a>
</li>
</ul>
<ul class="navbar-nav">
</ul>
</div>
</div>
</nav>
<div class="container-xl">
<div class="row">
<div class="col-12 col-md-3 bd-sidebar"><form class="bd-search d-flex align-items-center" action="../../../search.html" method="get">
<i class="icon fas fa-search"></i>
<input type="search" class="form-control" name="q" id="search-input" placeholder="Search the docs ..." aria-label="Search the docs ..." autocomplete="off" >
</form>
<nav class="bd-links" id="bd-docs-nav" aria-label="Main navigation">
<div class="bd-toc-item active">
<ul class="nav bd-sidenav">
</ul>
</nav>
</div>
<div class="d-none d-xl-block col-xl-2 bd-toc">
<nav id="bd-toc-nav">
<ul class="nav section-nav flex-column">
</ul>
</nav>
</div>
<main class="col-12 col-md-9 col-xl-7 py-md-5 pl-md-5 pr-md-4 bd-content" role="main">
<div>
<h1>Source code for pyspark.ml.evaluation</h1><div class="highlight"><pre>
<span></span><span class="c1">#</span>
<span class="c1"># Licensed to the Apache Software Foundation (ASF) under one or more</span>
<span class="c1"># contributor license agreements. See the NOTICE file distributed with</span>
<span class="c1"># this work for additional information regarding copyright ownership.</span>
<span class="c1"># The ASF licenses this file to You under the Apache License, Version 2.0</span>
<span class="c1"># (the &quot;License&quot;); you may not use this file except in compliance with</span>
<span class="c1"># the License. You may obtain a copy of the License at</span>
<span class="c1">#</span>
<span class="c1"># http://www.apache.org/licenses/LICENSE-2.0</span>
<span class="c1">#</span>
<span class="c1"># Unless required by applicable law or agreed to in writing, software</span>
<span class="c1"># distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span>
<span class="c1"># WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span>
<span class="c1"># See the License for the specific language governing permissions and</span>
<span class="c1"># limitations under the License.</span>
<span class="c1">#</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">abstractmethod</span><span class="p">,</span> <span class="n">ABCMeta</span>
<span class="kn">from</span> <span class="nn">pyspark</span> <span class="kn">import</span> <span class="n">since</span><span class="p">,</span> <span class="n">keyword_only</span>
<span class="kn">from</span> <span class="nn">pyspark.ml.wrapper</span> <span class="kn">import</span> <span class="n">JavaParams</span>
<span class="kn">from</span> <span class="nn">pyspark.ml.param</span> <span class="kn">import</span> <span class="n">Param</span><span class="p">,</span> <span class="n">Params</span><span class="p">,</span> <span class="n">TypeConverters</span>
<span class="kn">from</span> <span class="nn">pyspark.ml.param.shared</span> <span class="kn">import</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span> <span class="n">HasProbabilityCol</span><span class="p">,</span> \
<span class="n">HasRawPredictionCol</span><span class="p">,</span> <span class="n">HasFeaturesCol</span><span class="p">,</span> <span class="n">HasWeightCol</span>
<span class="kn">from</span> <span class="nn">pyspark.ml.common</span> <span class="kn">import</span> <span class="n">inherit_doc</span>
<span class="kn">from</span> <span class="nn">pyspark.ml.util</span> <span class="kn">import</span> <span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Evaluator&#39;</span><span class="p">,</span> <span class="s1">&#39;BinaryClassificationEvaluator&#39;</span><span class="p">,</span> <span class="s1">&#39;RegressionEvaluator&#39;</span><span class="p">,</span>
<span class="s1">&#39;MulticlassClassificationEvaluator&#39;</span><span class="p">,</span> <span class="s1">&#39;MultilabelClassificationEvaluator&#39;</span><span class="p">,</span>
<span class="s1">&#39;ClusteringEvaluator&#39;</span><span class="p">,</span> <span class="s1">&#39;RankingEvaluator&#39;</span><span class="p">]</span>
<div class="viewcode-block" id="Evaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.Evaluator.html#pyspark.ml.evaluation.Evaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">Evaluator</span><span class="p">(</span><span class="n">Params</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base class for evaluators that compute metrics from predictions.</span>
<span class="sd"> .. versionadded:: 1.4.0</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="nd">@abstractmethod</span>
<span class="k">def</span> <span class="nf">_evaluate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluates the output.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> dataset : :py:class:`pyspark.sql.DataFrame`</span>
<span class="sd"> a dataset that contains labels/observations and predictions</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> float</span>
<span class="sd"> metric</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">()</span>
<div class="viewcode-block" id="Evaluator.evaluate"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.Evaluator.html#pyspark.ml.evaluation.Evaluator.evaluate">[docs]</a> <span class="k">def</span> <span class="nf">evaluate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluates the output with optional parameters.</span>
<span class="sd"> .. versionadded:: 1.4.0</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> dataset : :py:class:`pyspark.sql.DataFrame`</span>
<span class="sd"> a dataset that contains labels/observations and predictions</span>
<span class="sd"> params : dict, optional</span>
<span class="sd"> an optional param map that overrides embedded params</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> float</span>
<span class="sd"> metric</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">params</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">params</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">params</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">if</span> <span class="n">params</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="n">params</span><span class="p">)</span><span class="o">.</span><span class="n">_evaluate</span><span class="p">(</span><span class="n">dataset</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_evaluate</span><span class="p">(</span><span class="n">dataset</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;Params must be a param map but got </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">params</span><span class="p">))</span></div>
<div class="viewcode-block" id="Evaluator.isLargerBetter"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.Evaluator.html#pyspark.ml.evaluation.Evaluator.isLargerBetter">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.5.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">isLargerBetter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Indicates whether the metric returned by :py:meth:`evaluate` should be maximized</span>
<span class="sd"> (True, default) or minimized (False).</span>
<span class="sd"> A given evaluator may support multiple metrics which may be maximized or minimized.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">True</span></div></div>
<span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">JavaEvaluator</span><span class="p">(</span><span class="n">JavaParams</span><span class="p">,</span> <span class="n">Evaluator</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">ABCMeta</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base class for :py:class:`Evaluator`s that wrap Java/Scala</span>
<span class="sd"> implementations.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_evaluate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dataset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluates the output.</span>
<span class="sd"> Parameters</span>
<span class="sd"> ----------</span>
<span class="sd"> dataset : :py:class:`pyspark.sql.DataFrame`</span>
<span class="sd"> a dataset that contains labels/observations and predictions</span>
<span class="sd"> Returns</span>
<span class="sd"> -------</span>
<span class="sd"> float</span>
<span class="sd"> evaluation metric</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_transfer_params_to_java</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="n">dataset</span><span class="o">.</span><span class="n">_jdf</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">isLargerBetter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_transfer_params_to_java</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span><span class="o">.</span><span class="n">isLargerBetter</span><span class="p">()</span>
<div class="viewcode-block" id="BinaryClassificationEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">BinaryClassificationEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasRawPredictionCol</span><span class="p">,</span> <span class="n">HasWeightCol</span><span class="p">,</span>
<span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for binary classification, which expects input columns rawPrediction, label</span>
<span class="sd"> and an optional weight column.</span>
<span class="sd"> The rawPrediction column can be of type double (binary 0/1 prediction, or probability of label</span>
<span class="sd"> 1) or of type vector (length-2 vector of raw predictions, scores, or label probabilities).</span>
<span class="sd"> .. versionadded:: 1.4.0</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; from pyspark.ml.linalg import Vectors</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabels = map(lambda x: (Vectors.dense([1.0 - x[0], x[0]]), x[1]),</span>
<span class="sd"> ... [(0.1, 0.0), (0.1, 1.0), (0.4, 0.0), (0.6, 0.0), (0.6, 1.0), (0.6, 1.0), (0.8, 1.0)])</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabels, [&quot;raw&quot;, &quot;label&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = BinaryClassificationEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setRawPredictionCol(&quot;raw&quot;)</span>
<span class="sd"> BinaryClassificationEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.70...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;areaUnderPR&quot;})</span>
<span class="sd"> 0.83...</span>
<span class="sd"> &gt;&gt;&gt; bce_path = temp_path + &quot;/bce&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(bce_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = BinaryClassificationEvaluator.load(bce_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getRawPredictionCol())</span>
<span class="sd"> &#39;raw&#39;</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabelsAndWeight = map(lambda x: (Vectors.dense([1.0 - x[0], x[0]]), x[1], x[2]),</span>
<span class="sd"> ... [(0.1, 0.0, 1.0), (0.1, 1.0, 0.9), (0.4, 0.0, 0.7), (0.6, 0.0, 0.9),</span>
<span class="sd"> ... (0.6, 1.0, 1.0), (0.6, 1.0, 0.3), (0.8, 1.0, 1.0)])</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabelsAndWeight, [&quot;raw&quot;, &quot;label&quot;, &quot;weight&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = BinaryClassificationEvaluator(rawPredictionCol=&quot;raw&quot;, weightCol=&quot;weight&quot;)</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.70...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;areaUnderPR&quot;})</span>
<span class="sd"> 0.82...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.getNumBins()</span>
<span class="sd"> 1000</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric name in evaluation (areaUnderROC|areaUnderPR)&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">numBins</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;numBins&quot;</span><span class="p">,</span> <span class="s2">&quot;Number of bins to down-sample the curves &quot;</span>
<span class="s2">&quot;(ROC curve, PR curve) in area computation. If 0, no down-sampling will &quot;</span>
<span class="s2">&quot;occur. Must be &gt;= 0.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toInt</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">rawPredictionCol</span><span class="o">=</span><span class="s2">&quot;rawPrediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;areaUnderROC&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">numBins</span><span class="o">=</span><span class="mi">1000</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, rawPredictionCol=&quot;rawPrediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;areaUnderROC&quot;, weightCol=None, numBins=1000)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">BinaryClassificationEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.BinaryClassificationEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;areaUnderROC&quot;</span><span class="p">,</span> <span class="n">numBins</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setNumBins"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setNumBins">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setNumBins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`numBins`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">numBins</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.getNumBins"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.getNumBins">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getNumBins</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of numBins or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">numBins</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setLabelCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setLabelCol">[docs]</a> <span class="k">def</span> <span class="nf">setLabelCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`labelCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">labelCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setRawPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setRawPredictionCol">[docs]</a> <span class="k">def</span> <span class="nf">setRawPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`rawPredictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">rawPredictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setWeightCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setWeightCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setWeightCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`weightCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">weightCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="BinaryClassificationEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.BinaryClassificationEvaluator.html#pyspark.ml.evaluation.BinaryClassificationEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">rawPredictionCol</span><span class="o">=</span><span class="s2">&quot;rawPrediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;areaUnderROC&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">numBins</span><span class="o">=</span><span class="mi">1000</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, rawPredictionCol=&quot;rawPrediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;areaUnderROC&quot;, weightCol=None, numBins=1000)</span>
<span class="sd"> Sets params for binary classification evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="RegressionEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">RegressionEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span> <span class="n">HasWeightCol</span><span class="p">,</span>
<span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for Regression, which expects input columns prediction, label</span>
<span class="sd"> and an optional weight column.</span>
<span class="sd"> .. versionadded:: 1.4.0</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabels = [(-28.98343821, -27.0), (20.21491975, 21.5),</span>
<span class="sd"> ... (-25.98418959, -22.0), (30.69731842, 33.0), (74.69283752, 71.0)]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabels, [&quot;raw&quot;, &quot;label&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = RegressionEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;raw&quot;)</span>
<span class="sd"> RegressionEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 2.842...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;r2&quot;})</span>
<span class="sd"> 0.993...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;mae&quot;})</span>
<span class="sd"> 2.649...</span>
<span class="sd"> &gt;&gt;&gt; re_path = temp_path + &quot;/re&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(re_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = RegressionEvaluator.load(re_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getPredictionCol())</span>
<span class="sd"> &#39;raw&#39;</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabelsAndWeight = [(-28.98343821, -27.0, 1.0), (20.21491975, 21.5, 0.8),</span>
<span class="sd"> ... (-25.98418959, -22.0, 1.0), (30.69731842, 33.0, 0.6), (74.69283752, 71.0, 0.2)]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabelsAndWeight, [&quot;raw&quot;, &quot;label&quot;, &quot;weight&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = RegressionEvaluator(predictionCol=&quot;raw&quot;, weightCol=&quot;weight&quot;)</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 2.740...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.getThroughOrigin()</span>
<span class="sd"> False</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="sd">&quot;&quot;&quot;metric name in evaluation - one of:</span>
<span class="sd"> rmse - root mean squared error (default)</span>
<span class="sd"> mse - mean squared error</span>
<span class="sd"> r2 - r^2 metric</span>
<span class="sd"> mae - mean absolute error</span>
<span class="sd"> var - explained variance.&quot;&quot;&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">throughOrigin</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;throughOrigin&quot;</span><span class="p">,</span>
<span class="s2">&quot;whether the regression is through the origin.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toBoolean</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;rmse&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">throughOrigin</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;rmse&quot;, weightCol=None, throughOrigin=False)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RegressionEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.RegressionEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;rmse&quot;</span><span class="p">,</span> <span class="n">throughOrigin</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="RegressionEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.setThroughOrigin"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setThroughOrigin">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setThroughOrigin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`throughOrigin`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">throughOrigin</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.getThroughOrigin"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.getThroughOrigin">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getThroughOrigin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of throughOrigin or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">throughOrigin</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.setLabelCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setLabelCol">[docs]</a> <span class="k">def</span> <span class="nf">setLabelCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`labelCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">labelCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.setPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setPredictionCol">[docs]</a> <span class="k">def</span> <span class="nf">setPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`predictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">predictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.setWeightCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setWeightCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setWeightCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`weightCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">weightCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RegressionEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RegressionEvaluator.html#pyspark.ml.evaluation.RegressionEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;rmse&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">throughOrigin</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;rmse&quot;, weightCol=None, throughOrigin=False)</span>
<span class="sd"> Sets params for regression evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">MulticlassClassificationEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span> <span class="n">HasWeightCol</span><span class="p">,</span>
<span class="n">HasProbabilityCol</span><span class="p">,</span> <span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for Multiclass Classification, which expects input</span>
<span class="sd"> columns: prediction, label, weight (optional) and probabilityCol (only for logLoss).</span>
<span class="sd"> .. versionadded:: 1.5.0</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabels = [(0.0, 0.0), (0.0, 1.0), (0.0, 0.0),</span>
<span class="sd"> ... (1.0, 0.0), (1.0, 1.0), (1.0, 1.0), (1.0, 1.0), (2.0, 2.0), (2.0, 0.0)]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabels, [&quot;prediction&quot;, &quot;label&quot;])</span>
<span class="sd"> &gt;&gt;&gt; evaluator = MulticlassClassificationEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;prediction&quot;)</span>
<span class="sd"> MulticlassClassificationEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.66...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;accuracy&quot;})</span>
<span class="sd"> 0.66...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;truePositiveRateByLabel&quot;,</span>
<span class="sd"> ... evaluator.metricLabel: 1.0})</span>
<span class="sd"> 0.75...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setMetricName(&quot;hammingLoss&quot;)</span>
<span class="sd"> MulticlassClassificationEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.33...</span>
<span class="sd"> &gt;&gt;&gt; mce_path = temp_path + &quot;/mce&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(mce_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = MulticlassClassificationEvaluator.load(mce_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getPredictionCol())</span>
<span class="sd"> &#39;prediction&#39;</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabelsAndWeight = [(0.0, 0.0, 1.0), (0.0, 1.0, 1.0), (0.0, 0.0, 1.0),</span>
<span class="sd"> ... (1.0, 0.0, 1.0), (1.0, 1.0, 1.0), (1.0, 1.0, 1.0), (1.0, 1.0, 1.0),</span>
<span class="sd"> ... (2.0, 2.0, 1.0), (2.0, 0.0, 1.0)]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabelsAndWeight, [&quot;prediction&quot;, &quot;label&quot;, &quot;weight&quot;])</span>
<span class="sd"> &gt;&gt;&gt; evaluator = MulticlassClassificationEvaluator(predictionCol=&quot;prediction&quot;,</span>
<span class="sd"> ... weightCol=&quot;weight&quot;)</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.66...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;accuracy&quot;})</span>
<span class="sd"> 0.66...</span>
<span class="sd"> &gt;&gt;&gt; predictionAndLabelsWithProbabilities = [</span>
<span class="sd"> ... (1.0, 1.0, 1.0, [0.1, 0.8, 0.1]), (0.0, 2.0, 1.0, [0.9, 0.05, 0.05]),</span>
<span class="sd"> ... (0.0, 0.0, 1.0, [0.8, 0.2, 0.0]), (1.0, 1.0, 1.0, [0.3, 0.65, 0.05])]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(predictionAndLabelsWithProbabilities, [&quot;prediction&quot;,</span>
<span class="sd"> ... &quot;label&quot;, &quot;weight&quot;, &quot;probability&quot;])</span>
<span class="sd"> &gt;&gt;&gt; evaluator = MulticlassClassificationEvaluator(predictionCol=&quot;prediction&quot;,</span>
<span class="sd"> ... probabilityCol=&quot;probability&quot;)</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setMetricName(&quot;logLoss&quot;)</span>
<span class="sd"> MulticlassClassificationEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.9682...</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric name in evaluation &quot;</span>
<span class="s2">&quot;(f1|accuracy|weightedPrecision|weightedRecall|weightedTruePositiveRate| &quot;</span>
<span class="s2">&quot;weightedFalsePositiveRate|weightedFMeasure|truePositiveRateByLabel| &quot;</span>
<span class="s2">&quot;falsePositiveRateByLabel|precisionByLabel|recallByLabel|fMeasureByLabel| &quot;</span>
<span class="s2">&quot;logLoss|hammingLoss)&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">metricLabel</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricLabel&quot;</span><span class="p">,</span>
<span class="s2">&quot;The class whose metric will be computed in truePositiveRateByLabel|&quot;</span>
<span class="s2">&quot;falsePositiveRateByLabel|precisionByLabel|recallByLabel|fMeasureByLabel.&quot;</span>
<span class="s2">&quot; Must be &gt;= 0. The default value is 0.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toFloat</span><span class="p">)</span>
<span class="n">beta</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;beta&quot;</span><span class="p">,</span>
<span class="s2">&quot;The beta value used in weightedFMeasure|fMeasureByLabel.&quot;</span>
<span class="s2">&quot; Must be &gt; 0. The default value is 1.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toFloat</span><span class="p">)</span>
<span class="n">eps</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;eps&quot;</span><span class="p">,</span>
<span class="s2">&quot;log-loss is undefined for p=0 or p=1, so probabilities are clipped to &quot;</span>
<span class="s2">&quot;max(eps, min(1 - eps, p)). &quot;</span>
<span class="s2">&quot;Must be in range (0, 0.5). The default value is 1e-15.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toFloat</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span>
<span class="n">probabilityCol</span><span class="o">=</span><span class="s2">&quot;probability&quot;</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;f1&quot;, weightCol=None, metricLabel=0.0, beta=1.0, \</span>
<span class="sd"> probabilityCol=&quot;probability&quot;, eps=1e-15)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">MulticlassClassificationEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1&quot;</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.5.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.5.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setMetricLabel"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setMetricLabel">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricLabel`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricLabel</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.getMetricLabel"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.getMetricLabel">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricLabel or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricLabel</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setBeta"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setBeta">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setBeta</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`beta`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">beta</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.getBeta"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.getBeta">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getBeta</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of beta or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">beta</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setEps"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setEps">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setEps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`eps`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">eps</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.getEps"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.getEps">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getEps</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of eps or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">eps</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setLabelCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setLabelCol">[docs]</a> <span class="k">def</span> <span class="nf">setLabelCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`labelCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">labelCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setPredictionCol">[docs]</a> <span class="k">def</span> <span class="nf">setPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`predictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">predictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setProbabilityCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setProbabilityCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setProbabilityCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`probabilityCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">probabilityCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setWeightCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setWeightCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setWeightCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`weightCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">weightCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MulticlassClassificationEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MulticlassClassificationEvaluator.html#pyspark.ml.evaluation.MulticlassClassificationEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;1.5.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">beta</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span>
<span class="n">probabilityCol</span><span class="o">=</span><span class="s2">&quot;probability&quot;</span><span class="p">,</span> <span class="n">eps</span><span class="o">=</span><span class="mf">1e-15</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;f1&quot;, weightCol=None, metricLabel=0.0, beta=1.0, \</span>
<span class="sd"> probabilityCol=&quot;probability&quot;, eps=1e-15)</span>
<span class="sd"> Sets params for multiclass classification evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">MultilabelClassificationEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span>
<span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for Multilabel Classification, which expects two input</span>
<span class="sd"> columns: prediction and label.</span>
<span class="sd"> .. versionadded:: 3.0.0</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Experimental</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabels = [([0.0, 1.0], [0.0, 2.0]), ([0.0, 2.0], [0.0, 1.0]),</span>
<span class="sd"> ... ([], [0.0]), ([2.0], [2.0]), ([2.0, 0.0], [2.0, 0.0]),</span>
<span class="sd"> ... ([0.0, 1.0, 2.0], [0.0, 1.0]), ([1.0], [1.0, 2.0])]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabels, [&quot;prediction&quot;, &quot;label&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = MultilabelClassificationEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;prediction&quot;)</span>
<span class="sd"> MultilabelClassificationEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.63...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;accuracy&quot;})</span>
<span class="sd"> 0.54...</span>
<span class="sd"> &gt;&gt;&gt; mlce_path = temp_path + &quot;/mlce&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(mlce_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = MultilabelClassificationEvaluator.load(mlce_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getPredictionCol())</span>
<span class="sd"> &#39;prediction&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric name in evaluation &quot;</span>
<span class="s2">&quot;(subsetAccuracy|accuracy|hammingLoss|precision|recall|f1Measure|&quot;</span>
<span class="s2">&quot;precisionByLabel|recallByLabel|f1MeasureByLabel|microPrecision|&quot;</span>
<span class="s2">&quot;microRecall|microF1Measure)&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">metricLabel</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricLabel&quot;</span><span class="p">,</span>
<span class="s2">&quot;The class whose metric will be computed in precisionByLabel|&quot;</span>
<span class="s2">&quot;recallByLabel|f1MeasureByLabel. &quot;</span>
<span class="s2">&quot;Must be &gt;= 0. The default value is 0.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toFloat</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1Measure&quot;</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;f1Measure&quot;, metricLabel=0.0)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">MultilabelClassificationEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.MultilabelClassificationEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1Measure&quot;</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.setMetricLabel"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.setMetricLabel">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricLabel`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricLabel</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.getMetricLabel"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.getMetricLabel">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricLabel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricLabel or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricLabel</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.setLabelCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.setLabelCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setLabelCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`labelCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">labelCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.setPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.setPredictionCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`predictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">predictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="MultilabelClassificationEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.MultilabelClassificationEvaluator.html#pyspark.ml.evaluation.MultilabelClassificationEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;f1Measure&quot;</span><span class="p">,</span> <span class="n">metricLabel</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;f1Measure&quot;, metricLabel=0.0)</span>
<span class="sd"> Sets params for multilabel classification evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="ClusteringEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">ClusteringEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span> <span class="n">HasFeaturesCol</span><span class="p">,</span> <span class="n">HasWeightCol</span><span class="p">,</span>
<span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for Clustering results, which expects two input</span>
<span class="sd"> columns: prediction and features. The metric computes the Silhouette</span>
<span class="sd"> measure using the squared Euclidean distance.</span>
<span class="sd"> The Silhouette is a measure for the validation of the consistency</span>
<span class="sd"> within clusters. It ranges between 1 and -1, where a value close to</span>
<span class="sd"> 1 means that the points in a cluster are close to the other points</span>
<span class="sd"> in the same cluster and far from the points of the other clusters.</span>
<span class="sd"> .. versionadded:: 2.3.0</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; from pyspark.ml.linalg import Vectors</span>
<span class="sd"> &gt;&gt;&gt; featureAndPredictions = map(lambda x: (Vectors.dense(x[0]), x[1]),</span>
<span class="sd"> ... [([0.0, 0.5], 0.0), ([0.5, 0.0], 0.0), ([10.0, 11.0], 1.0),</span>
<span class="sd"> ... ([10.5, 11.5], 1.0), ([1.0, 1.0], 0.0), ([8.0, 6.0], 1.0)])</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(featureAndPredictions, [&quot;features&quot;, &quot;prediction&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = ClusteringEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;prediction&quot;)</span>
<span class="sd"> ClusteringEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.9079...</span>
<span class="sd"> &gt;&gt;&gt; featureAndPredictionsWithWeight = map(lambda x: (Vectors.dense(x[0]), x[1], x[2]),</span>
<span class="sd"> ... [([0.0, 0.5], 0.0, 2.5), ([0.5, 0.0], 0.0, 2.5), ([10.0, 11.0], 1.0, 2.5),</span>
<span class="sd"> ... ([10.5, 11.5], 1.0, 2.5), ([1.0, 1.0], 0.0, 2.5), ([8.0, 6.0], 1.0, 2.5)])</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(</span>
<span class="sd"> ... featureAndPredictionsWithWeight, [&quot;features&quot;, &quot;prediction&quot;, &quot;weight&quot;])</span>
<span class="sd"> &gt;&gt;&gt; evaluator = ClusteringEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;prediction&quot;)</span>
<span class="sd"> ClusteringEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setWeightCol(&quot;weight&quot;)</span>
<span class="sd"> ClusteringEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.9079...</span>
<span class="sd"> &gt;&gt;&gt; ce_path = temp_path + &quot;/ce&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(ce_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = ClusteringEvaluator.load(ce_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getPredictionCol())</span>
<span class="sd"> &#39;prediction&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric name in evaluation (silhouette)&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">distanceMeasure</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;distanceMeasure&quot;</span><span class="p">,</span> <span class="s2">&quot;The distance measure. &quot;</span> <span class="o">+</span>
<span class="s2">&quot;Supported options: &#39;squaredEuclidean&#39; and &#39;cosine&#39;.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">featuresCol</span><span class="o">=</span><span class="s2">&quot;features&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;silhouette&quot;</span><span class="p">,</span> <span class="n">distanceMeasure</span><span class="o">=</span><span class="s2">&quot;squaredEuclidean&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, predictionCol=&quot;prediction&quot;, featuresCol=&quot;features&quot;, \</span>
<span class="sd"> metricName=&quot;silhouette&quot;, distanceMeasure=&quot;squaredEuclidean&quot;, weightCol=None)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ClusteringEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.ClusteringEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;silhouette&quot;</span><span class="p">,</span> <span class="n">distanceMeasure</span><span class="o">=</span><span class="s2">&quot;squaredEuclidean&quot;</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="ClusteringEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;2.3.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">featuresCol</span><span class="o">=</span><span class="s2">&quot;features&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;silhouette&quot;</span><span class="p">,</span> <span class="n">distanceMeasure</span><span class="o">=</span><span class="s2">&quot;squaredEuclidean&quot;</span><span class="p">,</span> <span class="n">weightCol</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, predictionCol=&quot;prediction&quot;, featuresCol=&quot;features&quot;, \</span>
<span class="sd"> metricName=&quot;silhouette&quot;, distanceMeasure=&quot;squaredEuclidean&quot;, weightCol=None)</span>
<span class="sd"> Sets params for clustering evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;2.3.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;2.3.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.setDistanceMeasure"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setDistanceMeasure">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;2.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setDistanceMeasure</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`distanceMeasure`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">distanceMeasure</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.getDistanceMeasure"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.getDistanceMeasure">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;2.4.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getDistanceMeasure</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of `distanceMeasure`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">distanceMeasure</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.setFeaturesCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setFeaturesCol">[docs]</a> <span class="k">def</span> <span class="nf">setFeaturesCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`featuresCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">featuresCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.setPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setPredictionCol">[docs]</a> <span class="k">def</span> <span class="nf">setPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`predictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">predictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="ClusteringEvaluator.setWeightCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.ClusteringEvaluator.html#pyspark.ml.evaluation.ClusteringEvaluator.setWeightCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.1.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setWeightCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`weightCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">weightCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="RankingEvaluator"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator">[docs]</a><span class="nd">@inherit_doc</span>
<span class="k">class</span> <span class="nc">RankingEvaluator</span><span class="p">(</span><span class="n">JavaEvaluator</span><span class="p">,</span> <span class="n">HasLabelCol</span><span class="p">,</span> <span class="n">HasPredictionCol</span><span class="p">,</span>
<span class="n">JavaMLReadable</span><span class="p">,</span> <span class="n">JavaMLWritable</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evaluator for Ranking, which expects two input</span>
<span class="sd"> columns: prediction and label.</span>
<span class="sd"> .. versionadded:: 3.0.0</span>
<span class="sd"> Notes</span>
<span class="sd"> -----</span>
<span class="sd"> Experimental</span>
<span class="sd"> Examples</span>
<span class="sd"> --------</span>
<span class="sd"> &gt;&gt;&gt; scoreAndLabels = [([1.0, 6.0, 2.0, 7.0, 8.0, 3.0, 9.0, 10.0, 4.0, 5.0],</span>
<span class="sd"> ... [1.0, 2.0, 3.0, 4.0, 5.0]),</span>
<span class="sd"> ... ([4.0, 1.0, 5.0, 6.0, 2.0, 7.0, 3.0, 8.0, 9.0, 10.0], [1.0, 2.0, 3.0]),</span>
<span class="sd"> ... ([1.0, 2.0, 3.0, 4.0, 5.0], [])]</span>
<span class="sd"> &gt;&gt;&gt; dataset = spark.createDataFrame(scoreAndLabels, [&quot;prediction&quot;, &quot;label&quot;])</span>
<span class="sd"> ...</span>
<span class="sd"> &gt;&gt;&gt; evaluator = RankingEvaluator()</span>
<span class="sd"> &gt;&gt;&gt; evaluator.setPredictionCol(&quot;prediction&quot;)</span>
<span class="sd"> RankingEvaluator...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset)</span>
<span class="sd"> 0.35...</span>
<span class="sd"> &gt;&gt;&gt; evaluator.evaluate(dataset, {evaluator.metricName: &quot;precisionAtK&quot;, evaluator.k: 2})</span>
<span class="sd"> 0.33...</span>
<span class="sd"> &gt;&gt;&gt; ranke_path = temp_path + &quot;/ranke&quot;</span>
<span class="sd"> &gt;&gt;&gt; evaluator.save(ranke_path)</span>
<span class="sd"> &gt;&gt;&gt; evaluator2 = RankingEvaluator.load(ranke_path)</span>
<span class="sd"> &gt;&gt;&gt; str(evaluator2.getPredictionCol())</span>
<span class="sd"> &#39;prediction&#39;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">metricName</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;metricName&quot;</span><span class="p">,</span>
<span class="s2">&quot;metric name in evaluation &quot;</span>
<span class="s2">&quot;(meanAveragePrecision|meanAveragePrecisionAtK|&quot;</span>
<span class="s2">&quot;precisionAtK|ndcgAtK|recallAtK)&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toString</span><span class="p">)</span>
<span class="n">k</span> <span class="o">=</span> <span class="n">Param</span><span class="p">(</span><span class="n">Params</span><span class="o">.</span><span class="n">_dummy</span><span class="p">(),</span> <span class="s2">&quot;k&quot;</span><span class="p">,</span>
<span class="s2">&quot;The ranking position value used in meanAveragePrecisionAtK|precisionAtK|&quot;</span>
<span class="s2">&quot;ndcgAtK|recallAtK. Must be &gt; 0. The default value is 10.&quot;</span><span class="p">,</span>
<span class="n">typeConverter</span><span class="o">=</span><span class="n">TypeConverters</span><span class="o">.</span><span class="n">toInt</span><span class="p">)</span>
<span class="nd">@keyword_only</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;meanAveragePrecision&quot;</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> __init__(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;meanAveragePrecision&quot;, k=10)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">(</span><span class="n">RankingEvaluator</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_java_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_new_java_obj</span><span class="p">(</span>
<span class="s2">&quot;org.apache.spark.ml.evaluation.RankingEvaluator&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_setDefault</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;meanAveragePrecision&quot;</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<div class="viewcode-block" id="RankingEvaluator.setMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.setMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`metricName`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">metricName</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.getMetricName"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.getMetricName">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getMetricName</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of metricName or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">metricName</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.setK"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.setK">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setK</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`k`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">k</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.getK"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.getK">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">getK</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets the value of k or its default value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">getOrDefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">k</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.setLabelCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.setLabelCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setLabelCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`labelCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">labelCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.setPredictionCol"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.setPredictionCol">[docs]</a> <span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setPredictionCol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the value of :py:attr:`predictionCol`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">predictionCol</span><span class="o">=</span><span class="n">value</span><span class="p">)</span></div>
<div class="viewcode-block" id="RankingEvaluator.setParams"><a class="viewcode-back" href="../../../reference/api/pyspark.ml.evaluation.RankingEvaluator.html#pyspark.ml.evaluation.RankingEvaluator.setParams">[docs]</a> <span class="nd">@keyword_only</span>
<span class="nd">@since</span><span class="p">(</span><span class="s2">&quot;3.0.0&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setParams</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">predictionCol</span><span class="o">=</span><span class="s2">&quot;prediction&quot;</span><span class="p">,</span> <span class="n">labelCol</span><span class="o">=</span><span class="s2">&quot;label&quot;</span><span class="p">,</span>
<span class="n">metricName</span><span class="o">=</span><span class="s2">&quot;meanAveragePrecision&quot;</span><span class="p">,</span> <span class="n">k</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> setParams(self, \\*, predictionCol=&quot;prediction&quot;, labelCol=&quot;label&quot;, \</span>
<span class="sd"> metricName=&quot;meanAveragePrecision&quot;, k=10)</span>
<span class="sd"> Sets params for ranking evaluator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_input_kwargs</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
<span class="kn">import</span> <span class="nn">doctest</span>
<span class="kn">import</span> <span class="nn">tempfile</span>
<span class="kn">import</span> <span class="nn">pyspark.ml.evaluation</span>
<span class="kn">from</span> <span class="nn">pyspark.sql</span> <span class="kn">import</span> <span class="n">SparkSession</span>
<span class="n">globs</span> <span class="o">=</span> <span class="n">pyspark</span><span class="o">.</span><span class="n">ml</span><span class="o">.</span><span class="n">evaluation</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="c1"># The small batch size here ensures that we see multiple batches,</span>
<span class="c1"># even in these small test examples:</span>
<span class="n">spark</span> <span class="o">=</span> <span class="n">SparkSession</span><span class="o">.</span><span class="n">builder</span>\
<span class="o">.</span><span class="n">master</span><span class="p">(</span><span class="s2">&quot;local[2]&quot;</span><span class="p">)</span>\
<span class="o">.</span><span class="n">appName</span><span class="p">(</span><span class="s2">&quot;ml.evaluation tests&quot;</span><span class="p">)</span>\
<span class="o">.</span><span class="n">getOrCreate</span><span class="p">()</span>
<span class="n">globs</span><span class="p">[</span><span class="s1">&#39;spark&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">spark</span>
<span class="n">temp_path</span> <span class="o">=</span> <span class="n">tempfile</span><span class="o">.</span><span class="n">mkdtemp</span><span class="p">()</span>
<span class="n">globs</span><span class="p">[</span><span class="s1">&#39;temp_path&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">temp_path</span>
<span class="k">try</span><span class="p">:</span>
<span class="p">(</span><span class="n">failure_count</span><span class="p">,</span> <span class="n">test_count</span><span class="p">)</span> <span class="o">=</span> <span class="n">doctest</span><span class="o">.</span><span class="n">testmod</span><span class="p">(</span><span class="n">globs</span><span class="o">=</span><span class="n">globs</span><span class="p">,</span> <span class="n">optionflags</span><span class="o">=</span><span class="n">doctest</span><span class="o">.</span><span class="n">ELLIPSIS</span><span class="p">)</span>
<span class="n">spark</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
<span class="k">finally</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">shutil</span> <span class="kn">import</span> <span class="n">rmtree</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">rmtree</span><span class="p">(</span><span class="n">temp_path</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">OSError</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">if</span> <span class="n">failure_count</span><span class="p">:</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span>
</pre></div>
</div>
<div class='prev-next-bottom'>
</div>
</main>
</div>
</div>
<script src="../../../_static/js/index.3da636dd464baa7582d2.js"></script>
<footer class="footer mt-5 mt-md-0">
<div class="container">
<p>
&copy; Copyright .<br/>
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 3.0.4.<br/>
</p>
</div>
</footer>
</body>
</html>