{"id":37061643,"url":"https://github.com/nyuvis/partial_dependence","last_synced_at":"2026-01-14T07:00:18.197Z","repository":{"id":57450892,"uuid":"114908768","full_name":"nyuvis/partial_dependence","owner":"nyuvis","description":"Python package to visualize and cluster partial dependence.","archived":false,"fork":false,"pushed_at":"2022-04-09T12:06:17.000Z","size":173641,"stargazers_count":28,"open_issues_count":0,"forks_count":6,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-09-08T20:49:45.642Z","etag":null,"topics":["interpretability","machine-learning","partial-dependence-plot","python-package","visualization"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nyuvis.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-20T16:33:22.000Z","updated_at":"2024-11-06T14:36:15.000Z","dependencies_parsed_at":"2022-09-26T17:31:15.359Z","dependency_job_id":null,"html_url":"https://github.com/nyuvis/partial_dependence","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nyuvis/partial_dependence","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyuvis%2Fpartial_dependence","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyuvis%2Fpartial_dependence/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyuvis%2Fpartial_dependence/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyuvis%2Fpartial_dependence/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nyuvis","download_url":"https://codeload.github.com/nyuvis/partial_dependence/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nyuvis%2Fpartial_dependence/sbom","scorecard":{"id":700102,"data":{"date":"2025-08-11","repo":{"name":"github.com/nyuvis/partial_dependence","commit":"9325e0acebbf2e7897bbfe1b4ba744765891f5de"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 1/16 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 15 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T05:00:01.965Z","repository_id":57450892,"created_at":"2025-08-22T05:00:01.965Z","updated_at":"2025-08-22T05:00:01.965Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28412478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interpretability","machine-learning","partial-dependence-plot","python-package","visualization"],"created_at":"2026-01-14T07:00:17.321Z","updated_at":"2026-01-14T07:00:18.190Z","avatar_url":"https://github.com/nyuvis.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"partial_dependence\n==================\n\nA python library for plotting partial dependence patterns of machine learning classifiers.\nThe technique is a black box approach to recognize sets of instances where the model makes similar decisions.\n\nPartial dependence measures the prediction change when changing one or more input features.\nWe will focus only on 1D and 2D partial dependence plots. \nFor each instance in the data we can plot the prediction change as we change one or two features in defined sample ranges.\nThen we cluster similar plots or heatmaps, e.g., instances reacting similarly when a feature value changes, to reduce clutter.\n\nYou can install *partial_dependence* via\n\n.. code:: bash\n\n    pip install partial_dependence\n\nand import it in python using:\n\n.. code:: python\n\n    import partial_dependence as pdp_plot\n\n\n\n********************************************\n1. Plotting clustering of partial dependence\n********************************************\n\nFollowing we will show how the pipeline of functions works. Please refer to the inline documentation of the methods for full information.\n\nYou can also run the Jupyter notebook file to have a running example. \n\nThe visualization we are using as example are coming from a Random Forest model trained on the `UCI Wine Quality Data Set \u003chttps://archive.ics.uci.edu/ml/datasets/wine+quality\u003e`_.\nThe prediction is towards the class \"good wine\".\n\n1.1 Initialization\n##################\n\nRequired arguments:\n*******************\n\n* ``df_test``: a ``pandas.DataFrame`` containing only the features \n  values for each instance in the test-set. \n* ``model``: trained classifier as an object with the following properties. \n  \n  The object must have a method ``predict_proba(X)`` which takes a ``numpy.array`` of shape ``(n, num_feat)`` as input and returns a ``numpy.array`` of shape ``(n, len(class_array))``.\n\n* ``class_array``: a list of strings with all the classes name in the same order \n  as the predictions returned by ``predict_proba(X)``.\n* ``class_focus``: a string with the class name of the desired partial dependence.\n\nOptional arguments:\n*******************\n\n* ``num_samples``: number of desired samples. Sampling a feature is done with:\n\n  ``numpy.linspace(min_value, max_value, num_samples)``\n\n  where the bounds are related to min and max value for that feature in the test-set. Default value is 100.\n* ``scale``: scale parameter vector for normalization.\n* ``shift``: shift parameter vector for normalization.\n\nIf you need to provide your data to the model in normalized form, \nyou have to define scale and shift such that: \n\n``transformed_data = (original_data + shift)*scale``\n\nwhere ``shift`` and ``scale`` are both ``numpy.array`` of shape ``(1,num_feat)``.\n\nIf the model uses directly the raw data in ``df_test`` without any transformation, \ndo not insert any scale and shift parameters.\n\nIf our model does not use normalization, we can initialize the tool this way:\n\n\n.. code:: python\n\n    my_pdp_plot = pdp_plot.PartialDependence( my_df_test,\n                                              my_model,\n                                              my_labels_name,\n                                              my_labels_focus )\n\n\n\n1.2 Creating the PdpCurves object\n#################################\n\nBy choosing a feature and changing it in the sample range, for each row in the test-set we can create ``num_samples`` different versions of the original instance.\n\nThen we are able to compute prediction values for each of the different vectors.\n\n``pdp()`` initialize and returns a python object from the class ``PdpCurves()`` containing such predictions values.\n\n\nRequired argument:\n******************\n\n* ``fix``: string with name of the chosen feature as reported in a column of ``df_test``.\n\n\n.. code:: python\n\n    curves = my_pdp_plot.pdp( chosen_feature )\n\n1.3 Getting an overview of the partial dependence\n#################################################\n\nIt is already possible to plot something with the function ``plot()``.\n\nWhenever you have a ``PdpCurves`` object available, you can plot something.\nHere you can find a first example. The visualization is automatically saved in a png file in the same folder of the script.\n\n.. code:: python\n\n    my_pdp_plot.plot( curves, local_curves = True, plot_full_curves = True )\n\n.. image:: images/full_curves.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n1.4 Clustering 1D partial dependence\n####################################\n\nTo call ``compute_clusters()``, we define the integer number of desired clusters with the ``n_clusters`` argument and we provide ``curves``.\n\nThe function returns a list of ``PdpCurves`` objects. Each element of the list is a different cluster.\n\n.. code:: python\n\n    curves_list_RF = my_pdp_plot.compute_clusters( curves, chosen_cluster_number )\n\n\n1.5 Plotting the clustering results\n###################################\n\nWithout customization, plotting the clustering is quite straightforward.\n\n.. code:: python\n\n    my_pdp_plot.plot( curves_list_RF )\n\n.. image:: images/clustering.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n1.6 2D partial dependence heatmaps\n##################################\n\nIt is possible to visualize the increase/decrease in prediction of instances when changing two features at the same time.\nFor a single instance the samples vary around the original pair of values.\nYou can specify the desired instance by providing the row index integer from ``df_test``.\nIn this case we are taking the instance with index 88.\n\n.. code:: python\n\n    instance_heatmap = my_pdp_plot.pdp_2D(\"alcohol\", \"density\", instances = 88)\n    my_pdp_plot.plot_heatmap(instance_heatmap)\n\n.. image:: images/single.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\nIn case you want to visualize the average 2D partial dependence over a set of instances, just provide a list of integers.\nThe color will resemble the average increase/decrease across all instances and the samples will vary from min to max values of the set.\nIf you want to visualize the average 2D partial dependence across the entire test-set instead..\n\n.. code:: python\n\n    all_inst = my_pdp_plot.pdp_2D(\"alcohol\", \"density\")\n    my_pdp_plot.plot_heatmap(all_inst)\n\n.. image:: images/heatmap_test.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\n1.7 Clustering 2D partial dependence\n####################################\n\nWith same function ``my_pdp_plot.compute_clusters()`` of Section 1.4, it is also possible to cluster heatmaps. \n\nAn heatmap object from the command ``my_pdp_plot.pdp_2D(feat_y, feat_x, instances)`` contains: \n``num_samples`` X ``num_samples`` X ``len(instances)`` prediction values.\n\nIt is possible to cluster all the test instances (using the RMSE metric) and to display an heatmaps for each cluster with the following code:\n\n.. code:: python\n\n    all_inst = my_pdp_plot.pdp_2D(\"alcohol\", \"density\")\n    list_clust_heats = my_pdp_plot.compute_clusters(all_inst, n_clusters = 16)\n    my_pdp_plot.plot_heatmap(list_clust_heats)\n\n.. image:: images/clust_heats_test.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\n1.8 2D partial dependence SPLOMs\n################################\n\nWe can combine all the possible heatmaps in a single visualization.\nThe SPLOM will show the patterns describing all possible pairs of features partial dependence.\n\nThe code to visualize the SPLOM for that same instance 88 is quite simple:\n\n.. code:: python\n\n    sploms_objs = my_pdp_plot.get_data_splom(88)\n    my_pdp_plot.plot_splom(sploms_objs)\n\nA stripe of blue/red over a column and row of a feature determines an increase/decrease of prediction when that feature is changed, no matter what other feature varies.\nFor example for this particular instance, when changing just two features, an increase in *alcohol* or decrease in *volatile acidity* would generally bring an increase in prediction towards the class *good wine*.\n\n.. image:: images/single_splom.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\nThe SPLOM can give you a hint of average prediction change also over the entire test-set.\nThe visualization combines the 2D scatter plots with the average change in prediction. \n\nThe user can detect global patterns when a same color disposition is present across row and columns of a same feature.\nFor example this model generally has an average increase in prediction towards the class *good wine* when the *alcohol* increases with any other feature.\nDark orange areas and blue areas show where there is an average decrease/increase in prediction.\nFor example there is an enclaved blue area within the heatmap cell for *pH* and *total sulfur dioxide* where the prediction generally increases.\n\n.. code:: python\n\n    sploms_objs = my_pdp_plot.get_data_splom()\n    my_pdp_plot.plot_splom(sploms_objs)\n\n.. image:: images/splom_test.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\n1.9 Clustering SPLOMs\n#####################\n\nEach instance SPLOM can be represented by a long vector of prediction values.\nThe vector is created by appending the data from each unique heatmap in a SPLOM.\nWe can measure the distance among different instances SPLOMs by computing RMSE among such vectors.\nBy building an RMSE distance matrix and clustering the instances we are able to represent a SPLOM for each cluster set.\nWith the following code we can cluster the SPLOMs of the entire test-set. \n\n.. code:: python\n\n    sploms_objs = my_pdp_plot.get_data_splom()\n    list_clust_sploms = my_pdp_plot.compute_clusters(sploms_objs, n_clusters = 16)\n\n\nTo have an overview over the entire set of clusters:\n\n.. code:: python\n\n    my_pdp_plot.plot_splom(list_clust_sploms)\n\n.. image:: images/cluster_sploms.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\nWe can now plot the first cluster (cluster with label \"#8\" in the left top corner of the last viz)\n\n.. code:: python\n\n    my_pdp_plot.plot_splom(list_clust_sploms[0])\n\n\n.. image:: images/first_cluster_splom.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\nThe distance matrix is stored, so it is less time consuming to change the number of clusters and plot again.\n\n.. code:: python\n\n    list_clust_sploms = my_pdp_plot.compute_clusters(sploms_objs, n_clusters = 49)\n    my_pdp_plot.plot_splom(list_clust_sploms)\n\n.. image:: images/cluster_sploms_49.png\n    :width: 1080px\n    :align: center\n    :alt: alternate text\n\n\n****************************************\n2. Customization and extra functions\n****************************************\n\n2.1 Computing predictions in chunks\n###############################\n\nWhen using ``pdp()``, sometimes the amount of data to process is too large and it is necessary to divide it in chunks so that we don't run out of memory.\nTo do so, just set the optional argument ``batch_size`` to the desired integer number. \n\n``batch_size`` cannot be lower than ``num_samples`` or higher than ``num_samples * len(df_test)``. \nIf ``batch_size`` is 0, then the computation of prediction will take place in a single chunk, which is much faster if you have enough memory.\n\n.. code:: python\n\n    curves = my_pdp_plot.pdp( chosen_feature, batch_size = 1000 )\n\n\n2.2 Using your own matplotlib figure\n################################\n\nIf you really like to hand yourself matplotlib and be free to customize the visualization this is how it works:\n\n.. code:: python\n\n    curves_list_RF = my_pdp_plot.compute_clusters(curves, chosen_cluster_number)\n\n    cluster_7 = curves_list_RF[7]\n    cluster_0 = curves_list_RF[0]\n    cluster_9 = curves_list_RF[9]\n\n    fig, ax = plt.subplots(figsize=(16, 9), dpi=100)\n\n    my_pdp_plot.plot(cluster_7,\n                       color_plot=\"red\", \n                       plot_object=ax)\n\n    my_pdp_plot.plot(cluster_0,\n                       color_plot=\"blue\", \n                       plot_object=ax)\n\n    my_pdp_plot.plot(cluster_9,\n                       color_plot=\"green\", \n                       plot_object=ax)\n\n    plt.show()\n    plt.close(\"all\")\n\n.. image:: images/own_figure.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n\n2.3 Comparing different models\n##############################\n\nThere might be scenarios in which you want to compare clusters from different models.\nFor example let's compare the Random Forest model we had so far with a Support Vector Machine model.\n\n.. code:: python\n\n    wine_pdp_plot_SVM = pdp_plot.PartialDependence(df_test,\n                                                    model_SVM,\n                                                    labels_name,\n                                                    labels_focus,\n                                                    num_samples,\n                                                    scale_SVM,\n                                                    shift_SVM)\n\n    curves = wine_pdp_plot_SVM.pdp(chosen_feature)\n    curves_list_SVM = wine_pdp_plot_SVM.compute_clusters(curves, chosen_cluster_number)\n    wine_pdp_plot_SVM.plot(curves_list_SVM)\n\n.. image:: images/SVM.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n\n2.4 Clustering with DTW distance\n################################\n\nTo cluster together the partial dependence plots, we measure the distance among each pair.\nBy default this distance is measured with RMSE.\nAnother option for 1D partial dependence clustering is `LB Keogh \u003chttp://www.cs.ucr.edu/~eamonn/LB_Keogh.htm\u003e`_  distance, an approximation of Dynamic Time Warping (DTW) distance.\nBy setting the ``curves.r_param`` parameter of the formula to a value different from ``None``, you are able to compute the clustering with the LB Keogh.\nThe method ``get_optimal_keogh_radius()`` gives you a quick way to automatically compute an optimal value for ``curves.r_param``.\nTo set the distance back to RMSE just set ``curves.set_keogh_radius(None)`` before recomputing the clustering.\n\nThe first time you compute the clustering, a distance matrix is computed. \nEspecially when using DTW distance, this might get time consuming.\nAfter the first time you call ``compute_clusters()`` on the ``curves`` object, \nthe distance matrix will be stored in memory and the computation will be then much faster.\nAnyway if you change the radius with ``curves.set_keogh_radius()``, you will need to recompute again the distance matrix.\n\n.. code:: python\n\n    curves.set_keogh_radius( my_pdp_plot.get_optimal_keogh_radius() )\n    keogh_curves_list = my_pdp_plot.compute_clusters( curves, chosen_cluster_number )\n\n2.5 An example of the visualization customizations\n##############################################\n\n.. code:: python\n\n    my_pdp_plot.plot( keogh_curves_list, local_curves = False, plot_full_curves = True )\n\n.. image:: images/custom.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n.. code:: python\n\n    curves_list_RF = my_pdp_plot.compute_clusters( curves_RF, 5 )\n\n    my_pdp_plot.plot( curves_list_RF, cell_view = True )\n\n.. image:: images/RF_five_cell_view.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n.. code:: python\n\n    curves_list_SVM = my_pdp_plot_SVM.compute_clusters( curves_SVM, 25 )\n\n    my_pdp_plot_SVM.plot( curves_list_SVM, \n                            cell_view = True, \n                            plot_full_curves = True, \n                            local_curves = False, \n                            path=\"plot_alcohol.png\" )\n\n.. image:: images/SVM_25_all.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n\n2.6 Highlighting a custom vector\n################################\n\nIn case you want to highlight the partial dependence of a particular vector ``custom_vect``, this is how it works..\n\n.. code:: python\n\n    curves, custom_preds = my_pdp_plot.pdp( chosen_feature, chosen_row = custom_vect )\n\n    my_pdp_plot.compute_clusters( curves, chosen_cluster_number )\n\n    my_pdp_plot.plot( curves, local_curves = False,\n                       chosen_row_preds_to_plot = custom_preds )\n\n.. image:: images/custom_vect.png\n    :width: 1600px\n    :align: center\n    :alt: alternate text\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyuvis%2Fpartial_dependence","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnyuvis%2Fpartial_dependence","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnyuvis%2Fpartial_dependence/lists"}