TomAugspurger: Thanks, just one small comment.

The CI failures can be ignored.
diff --git a/dask_ml/metrics/regression.py b/dask_ml/metrics/regression.py
index afb98aa1..a72bb353 100644
--- a/dask_ml/metrics/regression.py
+++ b/dask_ml/metrics/regression.py
@@ -34,6 +34,7 @@ def mean_squared_error(
     y_pred: ArrayLike,
     sample_weight: Optional[ArrayLike] = None,
     multioutput: Optional[str] = "uniform_average",
+    squared: bool = True,
     compute: bool = True,
 ) -> ArrayLike:
     _check_sample_weight(sample_weight)
@@ -48,6 +49,8 @@ def mean_squared_error(
     else:
         raise ValueError("Weighted 'multioutput' not supported.")
     result = output_errors.mean()
+    if not squared:
+        result = da.sqrt(result)
     if compute:
         result = result.compute()
     return result
diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst
index 99cbb8f5..c4df2d1f 100644
--- a/docs/source/contributing.rst
+++ b/docs/source/contributing.rst
@@ -29,7 +29,7 @@ in the ``ci`` directory.
 
 .. code-block:: none
 
-   conda env create -f ci/environment-3.7.yaml --name=dask-ml-dev
+   conda env create -f ci/environment-latest.yaml --name=dask-ml-dev
 
 to create a conda environment and install all the dependencies.
 
@@ -43,9 +43,14 @@ Building dask-ml
 Dask-ML is a pure-python repository. Development installation should be as simple as
 cloning the repository and running the following in the cloned directory:
 
-.. code-block:: none
+``pip``::
+
+  python -m pip install -e ".[dev]"
 
-   python -m pip install -e ".[dev]"
+``conda``::
+   
+  conda activate dask-ml-dev
+  python -m pip install --no-deps -e .
 
 If you have any trouble, please open an issue on the
 `dask-ml issue tracker <https://github.com/dask/dask-ml/issues>`_.

add squared arg to mean_squared_error
Was going though @jacobtomlinson dask tutorial and I saw

```
from dask_ml.metrics import mean_squared_error
from math import sqrt

sqrt(mean_squared_error(y_test, y_predicted))
```

Wonder if it's possible to add the squared arg - same as scikit-learn (https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html; https://github.com/scikit-learn/scikit-learn/blob/fd237278e/sklearn/metrics/_regression.py#L266)

May be a one line addition?

https://github.com/dask/dask-ml/blob/e5a2f2735be3f52b85dcb5d81d43ce0e5449becb/dask_ml/metrics/regression.py#L32

diff --git a/ci/environment-latest.yaml b/ci/environment-latest.yaml
new file mode 120000
index 00000000..f191f663
--- /dev/null
+++ b/ci/environment-latest.yaml
@@ -0,0 +1,1 @@
+environment-3.8.yaml
\ No newline at end of file
diff --git a/tests/metrics/test_regression.py b/tests/metrics/test_regression.py
index 42162bb0..c2cbeb0b 100644
--- a/tests/metrics/test_regression.py
+++ b/tests/metrics/test_regression.py
@@ -35,3 +35,16 @@ def test_ok(metric_pairs, compute):
         assert isinstance(result, da.Array)
     expected = m2(a, b)
     assert abs(result - expected) < 1e-5
+
+
+@pytest.mark.parametrize("squared", [True, False])
+def test_mse_squared(squared):
+    m1 = dask_ml.metrics.mean_squared_error
+    m2 = sklearn.metrics.mean_squared_error
+
+    a = da.random.uniform(size=(100,), chunks=(25,))
+    b = da.random.uniform(size=(100,), chunks=(25,))
+
+    result = m1(a, b, squared=squared)
+    expected = m2(a, b, squared=squared)
+    assert abs(result - expected) < 1e-5

pip install -e .[complete]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-mock
apt-get update apt-get install -y gcc
3.7
requirements/base.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
certifi @ file:///croot/certifi_1671487769961/work/certifi
click==8.1.8
cloudpickle==2.2.1
coverage==7.2.7
dask==2022.2.0
dask-glm==0.3.2
-e git+https://github.com/dask/dask-ml.git@382bbb606ab6d60ae1e15c7a5e78eb7b9e855275#egg=dask_ml
dask-xgboost==0.2.0
distributed==2022.2.0
exceptiongroup==1.2.2
fsspec==2023.1.0
HeapDict==1.0.1
importlib-metadata==6.7.0
iniconfig==2.0.0
Jinja2==3.1.6
joblib==1.3.2
llvmlite==0.39.1
locket==1.0.0
MarkupSafe==2.1.5
msgpack==1.0.5
multipledispatch==1.0.0
numba==0.56.4
numpy==1.21.6
packaging==24.0
pandas==1.3.5
partd==1.4.1
pluggy==1.2.0
psutil==7.0.0
pytest==7.4.4
pytest-cov==4.1.0
pytest-mock==3.11.1
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.1
scikit-learn==1.0.2
scipy==1.7.3
six==1.17.0
sortedcontainers==2.4.0
sparse==0.13.0
tblib==2.0.0
threadpoolctl==3.1.0
tomli==2.0.1
toolz==0.12.1
tornado==6.2
typing_extensions==4.7.1
xgboost==0.90
zict==2.2.0
zipp==3.15.0

name: dask-ml
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - click==8.1.8
      - cloudpickle==2.2.1
      - coverage==7.2.7
      - dask==2022.2.0
      - dask-glm==0.3.2
      - dask-xgboost==0.2.0
      - distributed==2022.2.0
      - exceptiongroup==1.2.2
      - fsspec==2023.1.0
      - heapdict==1.0.1
      - importlib-metadata==6.7.0
      - iniconfig==2.0.0
      - jinja2==3.1.6
      - joblib==1.3.2
      - llvmlite==0.39.1
      - locket==1.0.0
      - markupsafe==2.1.5
      - msgpack==1.0.5
      - multipledispatch==1.0.0
      - numba==0.56.4
      - numpy==1.21.6
      - packaging==24.0
      - pandas==1.3.5
      - partd==1.4.1
      - pluggy==1.2.0
      - psutil==7.0.0
      - pytest==7.4.4
      - pytest-cov==4.1.0
      - pytest-mock==3.11.1
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyyaml==6.0.1
      - scikit-learn==1.0.2
      - scipy==1.7.3
      - six==1.17.0
      - sortedcontainers==2.4.0
      - sparse==0.13.0
      - tblib==2.0.0
      - threadpoolctl==3.1.0
      - tomli==2.0.1
      - toolz==0.12.1
      - tornado==6.2
      - typing-extensions==4.7.1
      - xgboost==0.90
      - zict==2.2.0
      - zipp==3.15.0
prefix: /opt/conda/envs/dask-ml

tests/metrics/test_regression.py::test_mse_squared[True] tests/metrics/test_regression.py::test_mse_squared[False]
tests/metrics/test_regression.py::test_ok[mean_squared_error-True] tests/metrics/test_regression.py::test_ok[mean_squared_error-False] tests/metrics/test_regression.py::test_ok[mean_absolute_error-True] tests/metrics/test_regression.py::test_ok[mean_absolute_error-False] tests/metrics/test_regression.py::test_ok[r2_score-True] tests/metrics/test_regression.py::test_ok[r2_score-False]
docs/source/contributing.rst dask_ml/metrics/regression.py
docs/source/contributing.rst dask_ml/metrics/regression.py