├── .gitignore ├── artifacts-Markdown-HTML.ipynb ├── AutoML pipeline - to_fix.ipynb ├── AutoML pipeline.ipynb └── iris.csv /.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | .ipynb_checkpoints/ 3 | -------------------------------------------------------------------------------- /artifacts-Markdown-HTML.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "id": "fb13511f-ebf7-4a87-9795-2792ceb30c01", 7 | "metadata": {}, 8 | "outputs": [], 9 | "source": [ 10 | "from kfp.v2 import dsl\n", 11 | "from kfp.v2.dsl import (\n", 12 | " component,\n", 13 | " Output,\n", 14 | " ClassificationMetrics,\n", 15 | " Metrics,\n", 16 | " HTML,\n", 17 | " Markdown\n", 18 | ")\n" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 6, 24 | "id": "1ba71d6d-b67f-43a1-8751-9caf32e2a672", 25 | "metadata": {}, 26 | "outputs": [], 27 | "source": [ 28 | "PROJECT_ID = \"kubeflow-demos\" # @param {type:\"string\"}\n", 29 | "PROJECT_NUMBER = \"141610882258\"\n", 30 | "REGION = \"us-central1\" # @param {type: \"string\"}\n", 31 | "BUCKET_NAME = \"test-fast\" # @param {type:\"string\"}\n", 32 | "BUCKET_URI = f\"gs://{BUCKET_NAME}\"" 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "id": "4da54c91-5883-4a6a-bd23-9d4ff3a2684e", 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "\n", 43 | "@component\n", 44 | "def html_visualization(html_artifact: Output[HTML]):\n", 45 | " public_url = 'https://user-images.githubusercontent.com/37026441/140434086-d9e1099b-82c7-4df8-ae25-83fda2929088.png'\n", 46 | " html_content = \\\n", 47 | " '

Global Feature Importance

\\n'.format(public_url)\n", 48 | " with open(html_artifact.path, 'w') as f:\n", 49 | " f.write(html_content)\n" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 3, 55 | "id": "e343ef3d-dfe7-48d6-b26c-f8530012d491", 56 | "metadata": {}, 57 | "outputs": [], 58 | "source": [ 59 | "@component\n", 60 | "def markdown_visualization(markdown_artifact: Output[Markdown]):\n", 61 | " import urllib.request\n", 62 | "\n", 63 | " with urllib.request.urlopen('https://gist.githubusercontent.com/zijianjoy/a288d582e477f8021a1fcffcfd9a1803/raw/68519f72abb59152d92cf891b4719cd95c40e4b6/table_visualization.md') as table:\n", 64 | " markdown_content = table.read().decode('utf-8')\n", 65 | " with open(markdown_artifact.path, 'w') as f:\n", 66 | " f.write(markdown_content)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 5, 72 | "id": "2272d1e3-151d-4586-84ec-920bebc9f7a3", 73 | "metadata": {}, 74 | "outputs": [ 75 | { 76 | "name": "stderr", 77 | "output_type": "stream", 78 | "text": [ 79 | "/Users/yarkoni/projects/workshop/venv/lib/python3.9/site-packages/kfp/v2/compiler/compiler.py:1278: FutureWarning: APIs imported from the v1 namespace (e.g. kfp.dsl, kfp.components, etc) will not be supported by the v2 compiler since v2.0.0\n", 80 | " warnings.warn(\n" 81 | ] 82 | } 83 | ], 84 | "source": [ 85 | "\n", 86 | "from kfp.v2 import dsl, compiler\n", 87 | "@dsl.pipeline(name=f'metrics-visualization-pipeline-1008')\n", 88 | "def metrics_visualization_pipeline():\n", 89 | " html_visualization_op = html_visualization()\n", 90 | " markdown_visualization_op = markdown_visualization()\n", 91 | "\n", 92 | "compiler.Compiler().compile(pipeline_func=metrics_visualization_pipeline, package_path='metrics_visualization_pipeline.json')" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 9, 98 | "id": "332e4474-9257-4cd1-9f6f-abb4053b2313", 99 | "metadata": {}, 100 | "outputs": [ 101 | { 102 | "name": "stdout", 103 | "output_type": "stream", 104 | "text": [ 105 | "INFO:root:Resource html-mark not found.\n", 106 | "INFO:root:Creating Resource html-mark\n" 107 | ] 108 | } 109 | ], 110 | "source": [ 111 | "import google.cloud.aiplatform as aiplatform\n", 112 | "\n", 113 | "aiplatform.init(\n", 114 | " # your Google Cloud Project ID or number\n", 115 | " # environment default used is not set\n", 116 | " project=PROJECT_ID,\n", 117 | "\n", 118 | " # the Vertex AI region you will use\n", 119 | " # defaults to us-central1\n", 120 | " location=REGION,\n", 121 | "\n", 122 | " # Google Cloud Storage bucket in same region as location\n", 123 | " # used to stage artifacts\n", 124 | " staging_bucket=BUCKET_URI,\n", 125 | "\n", 126 | " # the name of the experiment to use to track\n", 127 | " # logged metrics and parameters\n", 128 | " experiment='html-mark',\n", 129 | "\n", 130 | " # description of the experiment above\n", 131 | " experiment_description='my experiment description'\n", 132 | ")" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 10, 138 | "id": "0eec6462-469d-4c28-acff-f7bfae91669b", 139 | "metadata": {}, 140 | "outputs": [ 141 | { 142 | "name": "stdout", 143 | "output_type": "stream", 144 | "text": [ 145 | "INFO:google.cloud.aiplatform.pipeline_jobs:Creating PipelineJob\n", 146 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob created. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340\n", 147 | "INFO:google.cloud.aiplatform.pipeline_jobs:To use this PipelineJob in another session:\n", 148 | "INFO:google.cloud.aiplatform.pipeline_jobs:pipeline_job = aiplatform.PipelineJob.get('projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340')\n", 149 | "INFO:google.cloud.aiplatform.pipeline_jobs:View Pipeline Job:\n", 150 | "https://console.cloud.google.com/vertex-ai/locations/us-central1/pipelines/runs/metrics-visualization-pipeline-1008-20220405162340?project=141610882258\n", 151 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340 current state:\n", 152 | "PipelineState.PIPELINE_STATE_RUNNING\n", 153 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340 current state:\n", 154 | "PipelineState.PIPELINE_STATE_RUNNING\n", 155 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340 current state:\n", 156 | "PipelineState.PIPELINE_STATE_RUNNING\n", 157 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340 current state:\n", 158 | "PipelineState.PIPELINE_STATE_RUNNING\n", 159 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob run completed. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/metrics-visualization-pipeline-1008-20220405162340\n" 160 | ] 161 | } 162 | ], 163 | "source": [ 164 | "# Instantiate PipelineJob object\n", 165 | "pl = aiplatform.PipelineJob(\n", 166 | " display_name=\"Mark-Html\",\n", 167 | "\n", 168 | " # Whether or not to enable caching\n", 169 | " # True = always cache pipeline step result\n", 170 | " # False = never cache pipeline step result\n", 171 | " # None = defer to cache option for each pipeline component in the pipeline definition\n", 172 | " enable_caching=True,\n", 173 | "\n", 174 | " # Local or GCS path to a compiled pipeline definition\n", 175 | " template_path='metrics_visualization_pipeline.json',\n", 176 | "\n", 177 | " # Dictionary containing input parameters for your pipeline\n", 178 | " parameter_values={},\n", 179 | "\n", 180 | " # GCS path to act as the pipeline root\n", 181 | " pipeline_root=BUCKET_URI,\n", 182 | ")\n", 183 | "\n", 184 | "# Execute pipeline in Vertex AI and monitor until completion\n", 185 | "pl.run(\n", 186 | " # Email address of service account to use for the pipeline run\n", 187 | " # You must have iam.serviceAccounts.actAs permission on the service account to use it\n", 188 | " #service_account=service_account,\n", 189 | "\n", 190 | " # Whether this function call should be synchronous (wait for pipeline run to finish before terminating)\n", 191 | " # or asynchronous (return immediately)\n", 192 | " sync=False\n", 193 | ")" 194 | ] 195 | }, 196 | { 197 | "cell_type": "code", 198 | "execution_count": null, 199 | "id": "87cb7ab3-cab9-44a9-8579-144d79fb3624", 200 | "metadata": {}, 201 | "outputs": [], 202 | "source": [] 203 | } 204 | ], 205 | "metadata": { 206 | "kernelspec": { 207 | "display_name": "Python 3 (ipykernel)", 208 | "language": "python", 209 | "name": "python3" 210 | }, 211 | "language_info": { 212 | "codemirror_mode": { 213 | "name": "ipython", 214 | "version": 3 215 | }, 216 | "file_extension": ".py", 217 | "mimetype": "text/x-python", 218 | "name": "python", 219 | "nbconvert_exporter": "python", 220 | "pygments_lexer": "ipython3", 221 | "version": "3.9.4" 222 | } 223 | }, 224 | "nbformat": 4, 225 | "nbformat_minor": 5 226 | } 227 | -------------------------------------------------------------------------------- /AutoML pipeline - to_fix.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 148, 6 | "id": "e55c8fcd-71cd-470d-ada9-bbce0152ac98", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "name": "stderr", 11 | "output_type": "stream", 12 | "text": [ 13 | "E0405 21:09:24.952613000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 14 | "E0405 21:09:26.987338000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 15 | "E0405 21:09:28.486340000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 16 | "E0405 21:09:31.298611000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 17 | "E0405 21:09:32.584272000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 18 | "E0405 21:09:34.148631000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" 19 | ] 20 | } 21 | ], 22 | "source": [ 23 | "%%capture\n", 24 | "!pip3 install --upgrade google-cloud-aiplatform\n", 25 | "!pip3 install --upgrade kfp\n", 26 | "!pip3 install --upgrade google-cloud-pipeline-components\n", 27 | "!pip3 install scikit-learn\n", 28 | "!pip3 install pandas\n", 29 | "!pip3 install catboost" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "id": "a61f61dd-f7f2-4a2a-97dc-3c29d7360c82", 35 | "metadata": {}, 36 | "source": [ 37 | "### Good resources for custom components\n", 38 | "https://github.com/googleapis/python-aiplatform/tree/main/samples/model-builder\n", 39 | "\n", 40 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples\n", 41 | "\n", 42 | "https://googleapis.dev/python/aiplatform/latest/aiplatform.html" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "id": "d10e3a35-d9e5-4171-8cf7-d3ecca9cc44e", 49 | "metadata": {}, 50 | "outputs": [], 51 | "source": [ 52 | "import IPython\n", 53 | "app = IPython.Application.instance()\n", 54 | "app.kernel.do_shutdown(True)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 1, 60 | "id": "b48148fb-0cd6-4d57-b745-d57de9bb6ae9", 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "import google.cloud.aiplatform as vertex\n", 65 | "import kfp\n", 66 | "from kfp.v2.dsl import (component, Artifact, Dataset, Input, InputPath, Model, Output, OutputPath, ClassificationMetrics, Metrics)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "id": "9dda4133-2220-41f8-ad6f-cb0243887ff1", 72 | "metadata": {}, 73 | "source": [ 74 | "https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html\n", 75 | "\n", 76 | "https://pypi.org/project/google-cloud-aiplatform/\n", 77 | "\n", 78 | "https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 2, 84 | "id": "4043be60-84f5-4aa5-92c3-80bbe2f58759", 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "name": "stdout", 89 | "output_type": "stream", 90 | "text": [ 91 | "Updated property [core/project].\n", 92 | "\n", 93 | "\n", 94 | "Updates are available for some Cloud SDK components. To install them,\n", 95 | "please run:\n", 96 | " $ gcloud components update\n", 97 | "\n", 98 | "\n", 99 | "\n", 100 | "To take a quick anonymous survey, run:\n", 101 | " $ gcloud survey\n", 102 | "\n", 103 | "Creating gs://test-fast/...\n", 104 | "ServiceException: 409 A Cloud Storage bucket named 'test-fast' already exists. Try another name. Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization.\n", 105 | " 1552 2022-03-24T21:14:19Z gs://test-fast/aiplatform-2022-03-24-21:14:19.320-aiplatform_custom_trainer_script-0.1.tar.gz#1648156459408486 metageneration=1\n", 106 | " 1774 2022-03-27T08:32:44Z gs://test-fast/aiplatform-2022-03-27-11:32:43.707-aiplatform_custom_trainer_script-0.1.tar.gz#1648369964419591 metageneration=1\n", 107 | " 60 2021-11-14T15:38:56Z gs://test-fast/batch_test.csv#1636904336323978 metageneration=1\n", 108 | " 52 2021-11-14T16:14:44Z gs://test-fast/batch_test1.csv#1636906484597636 metageneration=1\n", 109 | " 4551 2022-04-05T20:08:54Z gs://test-fast/finalized_model.sav#1649189334168342 metageneration=1\n", 110 | " 2105688 2022-04-05T19:53:51Z gs://test-fast/model#1649188431248263 metageneration=1\n", 111 | " 2105848 2022-04-05T19:40:15Z gs://test-fast/storage-object-name#1649187615058728 metageneration=1\n", 112 | " gs://test-fast/141610882258/\n", 113 | " gs://test-fast/aiplatform-custom-training-2022-03-24-21:14:19.437/\n", 114 | " gs://test-fast/aiplatform-custom-training-2022-03-27-11:32:44.390/\n", 115 | " gs://test-fast/census/\n", 116 | " gs://test-fast/data/\n", 117 | " gs://test-fast/executor_files/\n", 118 | " gs://test-fast/prediction-fast-test-12-2021_11_14T07_54_09_554Z/\n", 119 | " gs://test-fast/prediction-fast-test-12-2021_11_14T08_41_08_653Z/\n", 120 | " gs://test-fast/prediction-fast-test-12-2021_11_14T11_37_18_583Z/\n", 121 | " gs://test-fast/prediction-fast-test-12-2022_02_21T00_25_18_548Z/\n", 122 | "TOTAL: 7 objects, 4219525 bytes (4.02 MiB)\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "PROJECT_ID = \"\" \n", 128 | "PROJECT_NUMBER = \"\" \n", 129 | "REGION = \"us-central1\" \n", 130 | "BUCKET_NAME = \"\" \n", 131 | "BUCKET_URI = f\"gs://{BUCKET_NAME}\"\n", 132 | "\n", 133 | "! gcloud config set project $PROJECT_ID\n", 134 | "\n", 135 | "!gsutil mb -l $REGION $BUCKET_URI\n", 136 | "!gsutil ls -al $BUCKET_URI" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 3, 142 | "id": "e34c6144-e2e9-450e-a93c-397aa5228572", 143 | "metadata": {}, 144 | "outputs": [], 145 | "source": [ 146 | "vertex.init(\n", 147 | " # your Google Cloud Project ID or number\n", 148 | " # environment default used is not set\n", 149 | " project=,\n", 150 | "\n", 151 | " # the Vertex AI region you will use\n", 152 | " # defaults to us-central1\n", 153 | " location=REGION,\n", 154 | "\n", 155 | " # Google Cloud Storage bucket in same region as location\n", 156 | " # used to stage artifacts\n", 157 | " staging_bucket=BUCKET_URI,\n", 158 | "\n", 159 | " # the name of the experiment to use to track\n", 160 | " # logged metrics and parameters\n", 161 | " experiment=,\n", 162 | "\n", 163 | " # description of the experiment above\n", 164 | " experiment_description='my experiment description'\n", 165 | ")" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "id": "d8a7a6d4-7503-4308-97dc-65db97729a72", 171 | "metadata": {}, 172 | "source": [ 173 | "https://pypi.org/project/google-cloud-aiplatform/" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "id": "031d3479-d4ce-4484-baa6-d428d819f6ae", 179 | "metadata": {}, 180 | "source": [ 181 | "# AutoML training job\n", 182 | "AutoML can be used to automatically train a wide variety of image model types. AutoML automates the following:\n", 183 | "\n", 184 | "* Dataset preprocessing\n", 185 | "* Feature Engineering\n", 186 | "* Data feeding\n", 187 | "* Model Architecture selection\n", 188 | "* Hyperparameter tuning\n", 189 | "* Training the model" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 361, 195 | "id": "b469683f-deed-4619-a37c-54ddc3a859ef", 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "ename": "IndentationError", 200 | "evalue": "expected an indented block (4169501160.py, line 4)", 201 | "output_type": "error", 202 | "traceback": [ 203 | "\u001b[0;36m Input \u001b[0;32mIn [361]\u001b[0;36m\u001b[0m\n\u001b[0;31m @component()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "@component()\n", 209 | "def create_dataset():\n", 210 | " \n", 211 | "@component()\n", 212 | "def train():\n", 213 | " \n", 214 | "@component()\n", 215 | "def evaluate():\n", 216 | " \n", 217 | "@component()\n", 218 | "def deploy():\n", 219 | " " 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 4, 225 | "id": "6ed640c7-54d3-4a3c-90d9-beaa68cbb78b", 226 | "metadata": {}, 227 | "outputs": [], 228 | "source": [ 229 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 230 | "def create_tabular_dataset() -> str:\n", 231 | " \n", 232 | " import google.cloud.aiplatform as vertex\n", 233 | "\n", 234 | " vertex.init(project='kubeflow-demos',\n", 235 | " location='us-central1',\n", 236 | " staging_bucket='gs://test-fast/',\n", 237 | " experiment='my-experiment',\n", 238 | " experiment_description='my experiment description')\n", 239 | " \n", 240 | " bq_source = f'bq://kubeflow-demos.flowers.iris'\n", 241 | " \n", 242 | " #TODO: Missing dataset creation\n", 243 | " \n", 244 | " dataset.wait()\n", 245 | "\n", 246 | " print(f'\\tDataset: \"{dataset.display_name}\"')\n", 247 | " print(f'\\tname: \"{dataset.resource_name}\"')\n", 248 | " \n", 249 | " return dataset.resource_name\n", 250 | "\n", 251 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 252 | "def train_autoML_tabular(dataset_resource: str) -> str:\n", 253 | " \n", 254 | " import google.cloud.aiplatform as vertex\n", 255 | "\n", 256 | " vertex.init(project='kubeflow-demos',\n", 257 | " location='us-central1',\n", 258 | " staging_bucket='gs://test-fast/',\n", 259 | " experiment='my-experiment',\n", 260 | " experiment_description='my experiment description')\n", 261 | " \n", 262 | " job = vertex.AutoMLTabularTrainingJob(\n", 263 | " display_name=\"flowers\",\n", 264 | " optimization_prediction_type=\"classification\",\n", 265 | " column_specs={\"petal_length\": \"auto\",\n", 266 | " \"petal_width\": \"auto\",\n", 267 | " \"sepal_length\": \"auto\",\n", 268 | " \"sepal_width\": \"auto\",\n", 269 | " \"species\": \"auto\"})\n", 270 | "\n", 271 | " print(job)\n", 272 | "\n", 273 | " #TODO: missing stuff\n", 274 | " flower_dataset = \n", 275 | "\n", 276 | " model = job.run(dataset=flower_dataset,\n", 277 | " target_column=\"species\")\n", 278 | " \n", 279 | " model.wait()\n", 280 | " \n", 281 | " print(model.resource_name)\n", 282 | " \n", 283 | " return model.resource_name\n", 284 | " \n", 285 | "@component(packages_to_install=[\"google-cloud-aiplatform\", \"google-cloud-storage\", \"catboost\", \"sklearn\"])\n", 286 | "def train_catboost():\n", 287 | " print(\"train\")\n", 288 | " import sklearn\n", 289 | " from sklearn import datasets\n", 290 | " iris = sklearn.datasets.load_iris()\n", 291 | "\n", 292 | " import catboost\n", 293 | " \n", 294 | " #TODO: Train catboost model\n", 295 | "\n", 296 | " from google.cloud import storage\n", 297 | "\n", 298 | " \"\"\"Uploads a file to the bucket.\"\"\"\n", 299 | " # The ID of your GCS bucket\n", 300 | " bucket_name = \"test-fast\"\n", 301 | " # The path to your file to upload\n", 302 | " source_file_name = FILE_PATH\n", 303 | " # The ID of your GCS object\n", 304 | " destination_blob_name = FILE_PATH\n", 305 | "\n", 306 | " storage_client = storage.Client()\n", 307 | " bucket = storage_client.bucket(bucket_name)\n", 308 | " blob = bucket.blob(destination_blob_name)\n", 309 | "\n", 310 | " blob.upload_from_filename(source_file_name)\n", 311 | "\n", 312 | " print(\n", 313 | " \"File {} uploaded to {}.\".format(\n", 314 | " source_file_name, \"gs://\" + destination_blob_name\n", 315 | " )\n", 316 | " )\n", 317 | "\n", 318 | "#TODO: missing\n", 319 | "@component()\n", 320 | "def train_scikit():\n", 321 | " print(\"train\")\n", 322 | " import sklearn\n", 323 | " from sklearn.svm import SVC\n", 324 | " from sklearn import datasets\n", 325 | " iris = sklearn.datasets.load_iris()\n", 326 | "\n", 327 | " model = SVC()\n", 328 | " model.fit(iris.data, iris.target)\n", 329 | " \n", 330 | " import pickle\n", 331 | " # save the model to disk\n", 332 | " FILE_PATH = 'finalized_model.sav'\n", 333 | " pickle.dump(model, open(FILE_PATH, 'wb'))\n", 334 | " \n", 335 | " from google.cloud import storage\n", 336 | "\n", 337 | " \"\"\"Uploads a file to the bucket.\"\"\"\n", 338 | " # The ID of your GCS bucket\n", 339 | " bucket_name = \"test-fast\"\n", 340 | " # The path to your file to upload\n", 341 | " source_file_name = FILE_PATH\n", 342 | " # The ID of your GCS object\n", 343 | " destination_blob_name = FILE_PATH\n", 344 | "\n", 345 | " storage_client = storage.Client()\n", 346 | " bucket = storage_client.bucket(bucket_name)\n", 347 | " blob = bucket.blob(destination_blob_name)\n", 348 | "\n", 349 | " blob.upload_from_filename(source_file_name)\n", 350 | "\n", 351 | " print(\n", 352 | " \"File {} uploaded to {}.\".format(\n", 353 | " source_file_name, \"gs://\" + destination_blob_name\n", 354 | " )\n", 355 | " )\n", 356 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 357 | "def evaluate(model_resource: str) -> str:\n", 358 | " print(\"evaluate\")\n", 359 | " \n", 360 | " import google.cloud.aiplatform as vertex\n", 361 | "\n", 362 | " vertex.init(project='kubeflow-demos',\n", 363 | " location='us-central1',\n", 364 | " staging_bucket='gs://test-fast/',\n", 365 | " experiment='my-experiment',\n", 366 | " experiment_description='my experiment description')\n", 367 | " \n", 368 | " #TODO: get model\n", 369 | " # Get model resource ID\n", 370 | " models = \n", 371 | "\n", 372 | " # Get a reference to the Model Service client\n", 373 | " client_options = {\"api_endpoint\": \"us-central1-aiplatform.googleapis.com\"}\n", 374 | " model_service_client = vertex.gapic.ModelServiceClient(client_options=client_options)\n", 375 | "\n", 376 | " model_evaluations = model_service_client.list_model_evaluations(\n", 377 | " parent=model_resource\n", 378 | " )\n", 379 | " model_evaluation = list(model_evaluations)[0]\n", 380 | " \n", 381 | " print(model_evaluation)\n", 382 | " \n", 383 | " return model_resource\n", 384 | " \n", 385 | "#TODO: missing\n", 386 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 387 | "def create_endpoint_deploy_model() -> str:\n", 388 | " print(\"Endpoint\")\n", 389 | " \n", 390 | " import google.cloud.aiplatform as vertex\n", 391 | " \n", 392 | " vertex.init(project='kubeflow-demos',\n", 393 | " location='us-central1',\n", 394 | " staging_bucket='gs://test-fast/',\n", 395 | " experiment='my-experiment',\n", 396 | " experiment_description='my experiment description')\n", 397 | " \n", 398 | " endpoint = vertex.Endpoint.create(display_name=\"opti\")\n", 399 | "\n", 400 | " model = vertex.Model(model_resource)\n", 401 | "\n", 402 | " #endpoint.deploy(model=model)\n", 403 | " #endpoint.resource_name\n", 404 | " model.deploy()\n", 405 | " \n", 406 | " return \"test\"\n", 407 | "\n", 408 | "#TODO: missing\n", 409 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 410 | "def batch_prediction() -> str:\n", 411 | " print(\"Batch Prediction\")\n", 412 | " \n", 413 | " import google.cloud.aiplatform as vertex\n", 414 | " \n", 415 | " vertex.init(project='kubeflow-demos',\n", 416 | " location='us-central1',\n", 417 | " staging_bucket='gs://test-fast/',\n", 418 | " experiment='my-experiment',\n", 419 | " experiment_description='my experiment description')\n", 420 | " \n", 421 | " model = vertex.Model(model_resource)\n", 422 | " #https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.Model\n", 423 | " #https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ4%20Vertex%20SDK%20AutoML%20Tabular%20Binary%20Classification.ipynb\n", 424 | " batch_predict_job = model.batch_predict(\n", 425 | " job_display_name=\"opti_\",\n", 426 | " bigquery_source = f'bq://kubeflow-demos.flowers.iris',\n", 427 | " bigquery_destination_prefix = f'bq://kubeflow-demos.flowers',\n", 428 | " sync=True)\n", 429 | "\n", 430 | " print(batch_predict_job)\n", 431 | " \n", 432 | " return \"batch is done\"\n", 433 | "\n", 434 | "@component\n", 435 | "def print_op(message: str):\n", 436 | " \"\"\"Prints a message.\"\"\"\n", 437 | " print(message)\n", 438 | "\n" 439 | ] 440 | }, 441 | { 442 | "cell_type": "markdown", 443 | "id": "d9fddb45-d074-4043-8ea1-6cf2f1eb4bee", 444 | "metadata": {}, 445 | "source": [ 446 | "https://www.kubeflow.org/docs/components/pipelines/sdk-v2/v2-component-io/\n", 447 | "\n", 448 | "https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.AutoMLTabularTrainingJob\n", 449 | "\n", 450 | "https://cloud.google.com/vertex-ai/docs/training/automl-api\n", 451 | "\n", 452 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ4%20Vertex%20SDK%20AutoML%20Tabular%20Binary%20Classification.ipynb" 453 | ] 454 | }, 455 | { 456 | "cell_type": "code", 457 | "execution_count": 6, 458 | "id": "72e6cfbe-591a-4b6c-87f6-3475de4dd786", 459 | "metadata": {}, 460 | "outputs": [], 461 | "source": [ 462 | "@kfp.dsl.pipeline(name=\"train-opti\")\n", 463 | "def pipeline(\n", 464 | " project: str = PROJECT_ID,\n", 465 | " bucket: str = BUCKET_URI,\n", 466 | " baseline_accuracy: float = 70.0\n", 467 | "):\n", 468 | " create_tabular_dataset_task = create_tabular_dataset()\n", 469 | " create_tabular_dataset_task.set_caching_options(True)\n", 470 | " \n", 471 | " train_autoML_task = train_autoML_tabular(create_tabular_dataset_task.output)\n", 472 | " train_autoML_task.set_caching_options(True)\n", 473 | " \n", 474 | " train_catboost_task = train_catboost()\n", 475 | " train_catboost_task.set_caching_options(True)\n", 476 | " train_catboost_task.after(create_tabular_dataset_task)\n", 477 | " \n", 478 | " train_scikit_task = train_scikit()\n", 479 | " train_scikit_task.set_caching_options(False)\n", 480 | " train_scikit_task.after(create_tabular_dataset_task)\n", 481 | " \n", 482 | " evaluate_task = evaluate()\n", 483 | " evaluate_task.set_caching_options(True)\n", 484 | " evaluate_task.after(train_scikit_task)\n", 485 | " evaluate_task.after(train_catboost_task)\n", 486 | " \n", 487 | " batch_prediction_task = batch_prediction(evaluate_task.output)" 488 | ] 489 | }, 490 | { 491 | "cell_type": "code", 492 | "execution_count": 7, 493 | "id": "e14ac497-112e-44f4-943e-72a9b241bead", 494 | "metadata": {}, 495 | "outputs": [ 496 | { 497 | "name": "stderr", 498 | "output_type": "stream", 499 | "text": [ 500 | "/Users/yarkoni/projects/workshop/venv/lib/python3.9/site-packages/kfp/v2/compiler/compiler.py:1278: FutureWarning: APIs imported from the v1 namespace (e.g. kfp.dsl, kfp.components, etc) will not be supported by the v2 compiler since v2.0.0\n", 501 | " warnings.warn(\n" 502 | ] 503 | } 504 | ], 505 | "source": [ 506 | "from kfp.v2 import compiler\n", 507 | "\n", 508 | "compiler.Compiler().compile(pipeline_func=pipeline, package_path=)" 509 | ] 510 | }, 511 | { 512 | "cell_type": "code", 513 | "execution_count": 8, 514 | "id": "88e76ae0-3171-4e4d-ae29-220a0f14dad0", 515 | "metadata": {}, 516 | "outputs": [ 517 | { 518 | "name": "stdout", 519 | "output_type": "stream", 520 | "text": [ 521 | "INFO:google.cloud.aiplatform.pipeline_jobs:Creating PipelineJob\n", 522 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob created. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336\n", 523 | "INFO:google.cloud.aiplatform.pipeline_jobs:To use this PipelineJob in another session:\n", 524 | "INFO:google.cloud.aiplatform.pipeline_jobs:pipeline_job = aiplatform.PipelineJob.get('projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336')\n", 525 | "INFO:google.cloud.aiplatform.pipeline_jobs:View Pipeline Job:\n", 526 | "https://console.cloud.google.com/vertex-ai/locations/us-central1/pipelines/runs/train-opti-20220428113336?project=141610882258\n", 527 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob run completed. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336\n" 528 | ] 529 | } 530 | ], 531 | "source": [ 532 | "# Instantiate PipelineJob object\n", 533 | "vertex_pipeline_job = ai_magic.PipelineJob(\n", 534 | " display_name=\"test-opti\",\n", 535 | "\n", 536 | " # Whether or not to enable caching\n", 537 | " # True = always cache pipeline step result\n", 538 | " # False = never cache pipeline step result\n", 539 | " # None = defer to cache option for each pipeline component in the pipeline definition\n", 540 | " enable_caching=True,\n", 541 | "\n", 542 | " # Local or GCS path to a compiled pipeline definition\n", 543 | " template_path=\"pipeline-dag.json\",\n", 544 | "\n", 545 | " # Dictionary containing input parameters for your pipeline\n", 546 | " parameter_values={\"sdffsdfds\":\"sdfsdf\"},\n", 547 | "\n", 548 | " # GCS path to act as the pipeline root\n", 549 | " pipeline_root=BUCKET_URI,\n", 550 | ")\n", 551 | "\n", 552 | "# Execute pipeline in Vertex AI and monitor until completion\n", 553 | "ai_magic_false.run(\n", 554 | " # Email address of service account to use for the pipeline run\n", 555 | " # You must have iam.serviceAccounts.actAs permission on the service account to use it\n", 556 | " #service_account=service_account,\n", 557 | "\n", 558 | " # Whether this function call should be synchronous (wait for pipeline run to finish before terminating)\n", 559 | " # or asynchronous (return immediately)\n", 560 | " sync=False\n", 561 | ")" 562 | ] 563 | }, 564 | { 565 | "cell_type": "code", 566 | "execution_count": 357, 567 | "id": "79bdbf98-57bc-4c17-9671-1d0832e571e7", 568 | "metadata": {}, 569 | "outputs": [ 570 | { 571 | "name": "stderr", 572 | "output_type": "stream", 573 | "text": [ 574 | "E0407 13:49:19.734209000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" 575 | ] 576 | } 577 | ], 578 | "source": [ 579 | "jobs = vertex.PipelineJob.list()" 580 | ] 581 | }, 582 | { 583 | "cell_type": "markdown", 584 | "id": "82858c6c-ebd7-4cef-b29a-3ae2665be848", 585 | "metadata": {}, 586 | "source": [ 587 | "### Or simply use the premade components \n", 588 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb\n", 589 | "\n", 590 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb" 591 | ] 592 | }, 593 | { 594 | "cell_type": "markdown", 595 | "id": "5b6f47b3-b11c-4855-9a20-638dbed91ff9", 596 | "metadata": {}, 597 | "source": [ 598 | "### Adding batch capabilities\n", 599 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/gapic/automl/showcase_automl_image_classification_batch.ipynb\n" 600 | ] 601 | } 602 | ], 603 | "metadata": { 604 | "kernelspec": { 605 | "display_name": "Python 3 (ipykernel)", 606 | "language": "python", 607 | "name": "python3" 608 | }, 609 | "language_info": { 610 | "codemirror_mode": { 611 | "name": "ipython", 612 | "version": 3 613 | }, 614 | "file_extension": ".py", 615 | "mimetype": "text/x-python", 616 | "name": "python", 617 | "nbconvert_exporter": "python", 618 | "pygments_lexer": "ipython3", 619 | "version": "3.9.4" 620 | } 621 | }, 622 | "nbformat": 4, 623 | "nbformat_minor": 5 624 | } 625 | -------------------------------------------------------------------------------- /AutoML pipeline.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 148, 6 | "id": "e55c8fcd-71cd-470d-ada9-bbce0152ac98", 7 | "metadata": {}, 8 | "outputs": [ 9 | { 10 | "name": "stderr", 11 | "output_type": "stream", 12 | "text": [ 13 | "E0405 21:09:24.952613000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 14 | "E0405 21:09:26.987338000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 15 | "E0405 21:09:28.486340000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 16 | "E0405 21:09:31.298611000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 17 | "E0405 21:09:32.584272000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n", 18 | "E0405 21:09:34.148631000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" 19 | ] 20 | } 21 | ], 22 | "source": [ 23 | "%%capture\n", 24 | "!pip3 install --upgrade google-cloud-aiplatform\n", 25 | "!pip3 install --upgrade kfp\n", 26 | "!pip3 install --upgrade google-cloud-pipeline-components\n", 27 | "!pip3 install scikit-learn\n", 28 | "!pip3 install pandas\n", 29 | "!pip3 install catboost" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "id": "a61f61dd-f7f2-4a2a-97dc-3c29d7360c82", 35 | "metadata": {}, 36 | "source": [ 37 | "### Good resources for custom components\n", 38 | "https://github.com/googleapis/python-aiplatform/tree/main/samples/model-builder\n", 39 | "\n", 40 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples\n", 41 | "\n", 42 | "https://googleapis.dev/python/aiplatform/latest/aiplatform.html" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": null, 48 | "id": "d10e3a35-d9e5-4171-8cf7-d3ecca9cc44e", 49 | "metadata": {}, 50 | "outputs": [], 51 | "source": [ 52 | "import IPython\n", 53 | "app = IPython.Application.instance()\n", 54 | "app.kernel.do_shutdown(True)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 1, 60 | "id": "b48148fb-0cd6-4d57-b745-d57de9bb6ae9", 61 | "metadata": {}, 62 | "outputs": [], 63 | "source": [ 64 | "import google.cloud.aiplatform as vertex\n", 65 | "import kfp\n", 66 | "from kfp.v2.dsl import (component, Artifact, Dataset, Input, InputPath, Model, Output, OutputPath, ClassificationMetrics, Metrics)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "markdown", 71 | "id": "9dda4133-2220-41f8-ad6f-cb0243887ff1", 72 | "metadata": {}, 73 | "source": [ 74 | "https://kubeflow-pipelines.readthedocs.io/en/latest/source/kfp.dsl.html\n", 75 | "\n", 76 | "https://pypi.org/project/google-cloud-aiplatform/\n", 77 | "\n", 78 | "https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 2, 84 | "id": "4043be60-84f5-4aa5-92c3-80bbe2f58759", 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "name": "stdout", 89 | "output_type": "stream", 90 | "text": [ 91 | "Updated property [core/project].\n", 92 | "\n", 93 | "\n", 94 | "Updates are available for some Cloud SDK components. To install them,\n", 95 | "please run:\n", 96 | " $ gcloud components update\n", 97 | "\n", 98 | "\n", 99 | "\n", 100 | "To take a quick anonymous survey, run:\n", 101 | " $ gcloud survey\n", 102 | "\n", 103 | "Creating gs://test-fast/...\n", 104 | "ServiceException: 409 A Cloud Storage bucket named 'test-fast' already exists. Try another name. Bucket names must be globally unique across all Google Cloud projects, including those outside of your organization.\n", 105 | " 1552 2022-03-24T21:14:19Z gs://test-fast/aiplatform-2022-03-24-21:14:19.320-aiplatform_custom_trainer_script-0.1.tar.gz#1648156459408486 metageneration=1\n", 106 | " 1774 2022-03-27T08:32:44Z gs://test-fast/aiplatform-2022-03-27-11:32:43.707-aiplatform_custom_trainer_script-0.1.tar.gz#1648369964419591 metageneration=1\n", 107 | " 60 2021-11-14T15:38:56Z gs://test-fast/batch_test.csv#1636904336323978 metageneration=1\n", 108 | " 52 2021-11-14T16:14:44Z gs://test-fast/batch_test1.csv#1636906484597636 metageneration=1\n", 109 | " 4551 2022-04-05T20:08:54Z gs://test-fast/finalized_model.sav#1649189334168342 metageneration=1\n", 110 | " 2105688 2022-04-05T19:53:51Z gs://test-fast/model#1649188431248263 metageneration=1\n", 111 | " 2105848 2022-04-05T19:40:15Z gs://test-fast/storage-object-name#1649187615058728 metageneration=1\n", 112 | " gs://test-fast/141610882258/\n", 113 | " gs://test-fast/aiplatform-custom-training-2022-03-24-21:14:19.437/\n", 114 | " gs://test-fast/aiplatform-custom-training-2022-03-27-11:32:44.390/\n", 115 | " gs://test-fast/census/\n", 116 | " gs://test-fast/data/\n", 117 | " gs://test-fast/executor_files/\n", 118 | " gs://test-fast/prediction-fast-test-12-2021_11_14T07_54_09_554Z/\n", 119 | " gs://test-fast/prediction-fast-test-12-2021_11_14T08_41_08_653Z/\n", 120 | " gs://test-fast/prediction-fast-test-12-2021_11_14T11_37_18_583Z/\n", 121 | " gs://test-fast/prediction-fast-test-12-2022_02_21T00_25_18_548Z/\n", 122 | "TOTAL: 7 objects, 4219525 bytes (4.02 MiB)\n" 123 | ] 124 | } 125 | ], 126 | "source": [ 127 | "PROJECT_ID = \"kubeflow-demos\" \n", 128 | "PROJECT_NUMBER = \"141610882258\" \n", 129 | "REGION = \"us-central1\" \n", 130 | "BUCKET_NAME = \"test-fast\" \n", 131 | "BUCKET_URI = f\"gs://{BUCKET_NAME}\"\n", 132 | "\n", 133 | "! gcloud config set project $PROJECT_ID\n", 134 | "\n", 135 | "!gsutil mb -l $REGION $BUCKET_URI\n", 136 | "!gsutil ls -al $BUCKET_URI" 137 | ] 138 | }, 139 | { 140 | "cell_type": "code", 141 | "execution_count": 3, 142 | "id": "e34c6144-e2e9-450e-a93c-397aa5228572", 143 | "metadata": {}, 144 | "outputs": [], 145 | "source": [ 146 | "vertex.init(\n", 147 | " # your Google Cloud Project ID or number\n", 148 | " # environment default used is not set\n", 149 | " project=PROJECT_ID,\n", 150 | "\n", 151 | " # the Vertex AI region you will use\n", 152 | " # defaults to us-central1\n", 153 | " location=REGION,\n", 154 | "\n", 155 | " # Google Cloud Storage bucket in same region as location\n", 156 | " # used to stage artifacts\n", 157 | " staging_bucket=BUCKET_URI,\n", 158 | "\n", 159 | " # the name of the experiment to use to track\n", 160 | " # logged metrics and parameters\n", 161 | " experiment='my-experiment',\n", 162 | "\n", 163 | " # description of the experiment above\n", 164 | " experiment_description='my experiment description'\n", 165 | ")" 166 | ] 167 | }, 168 | { 169 | "cell_type": "markdown", 170 | "id": "d8a7a6d4-7503-4308-97dc-65db97729a72", 171 | "metadata": {}, 172 | "source": [ 173 | "https://pypi.org/project/google-cloud-aiplatform/" 174 | ] 175 | }, 176 | { 177 | "cell_type": "markdown", 178 | "id": "031d3479-d4ce-4484-baa6-d428d819f6ae", 179 | "metadata": {}, 180 | "source": [ 181 | "# AutoML training job\n", 182 | "AutoML can be used to automatically train a wide variety of image model types. AutoML automates the following:\n", 183 | "\n", 184 | "* Dataset preprocessing\n", 185 | "* Feature Engineering\n", 186 | "* Data feeding\n", 187 | "* Model Architecture selection\n", 188 | "* Hyperparameter tuning\n", 189 | "* Training the model" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 361, 195 | "id": "b469683f-deed-4619-a37c-54ddc3a859ef", 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "ename": "IndentationError", 200 | "evalue": "expected an indented block (4169501160.py, line 4)", 201 | "output_type": "error", 202 | "traceback": [ 203 | "\u001b[0;36m Input \u001b[0;32mIn [361]\u001b[0;36m\u001b[0m\n\u001b[0;31m @component()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m expected an indented block\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "@component()\n", 209 | "def create_dataset():\n", 210 | " \n", 211 | "@component()\n", 212 | "def train():\n", 213 | " \n", 214 | "@component()\n", 215 | "def evaluate():\n", 216 | " \n", 217 | "@component()\n", 218 | "def deploy():\n", 219 | " " 220 | ] 221 | }, 222 | { 223 | "cell_type": "code", 224 | "execution_count": 4, 225 | "id": "6ed640c7-54d3-4a3c-90d9-beaa68cbb78b", 226 | "metadata": {}, 227 | "outputs": [], 228 | "source": [ 229 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 230 | "def create_tabular_dataset() -> str:\n", 231 | " \n", 232 | " import google.cloud.aiplatform as vertex\n", 233 | "\n", 234 | " vertex.init(project='kubeflow-demos',\n", 235 | " location='us-central1',\n", 236 | " staging_bucket='gs://test-fast/',\n", 237 | " experiment='my-experiment',\n", 238 | " experiment_description='my experiment description')\n", 239 | " \n", 240 | " bq_source = f'bq://kubeflow-demos.flowers.iris'\n", 241 | "\n", 242 | " dataset = vertex.TabularDataset.create(display_name='iris', bq_source=bq_source,)\n", 243 | "\n", 244 | " dataset.wait()\n", 245 | "\n", 246 | " print(f'\\tDataset: \"{dataset.display_name}\"')\n", 247 | " print(f'\\tname: \"{dataset.resource_name}\"')\n", 248 | " \n", 249 | " return dataset.resource_name\n", 250 | "\n", 251 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 252 | "def train_autoML_tabular(dataset_resource: str) -> str:\n", 253 | " \n", 254 | " import google.cloud.aiplatform as vertex\n", 255 | "\n", 256 | " vertex.init(project='kubeflow-demos',\n", 257 | " location='us-central1',\n", 258 | " staging_bucket='gs://test-fast/',\n", 259 | " experiment='my-experiment',\n", 260 | " experiment_description='my experiment description')\n", 261 | " \n", 262 | " job = vertex.AutoMLTabularTrainingJob(\n", 263 | " display_name=\"flowers\",\n", 264 | " optimization_prediction_type=\"classification\",\n", 265 | " column_specs={\"petal_length\": \"auto\",\n", 266 | " \"petal_width\": \"auto\",\n", 267 | " \"sepal_length\": \"auto\",\n", 268 | " \"sepal_width\": \"auto\",\n", 269 | " \"species\": \"auto\"})\n", 270 | "\n", 271 | " print(job)\n", 272 | "\n", 273 | " flower_dataset = vertex.TabularDataset(dataset_resource)\n", 274 | "\n", 275 | " model = job.run(dataset=flower_dataset,\n", 276 | " model_display_name=\"flowers\",\n", 277 | " training_fraction_split=0.8,\n", 278 | " validation_fraction_split=0.1,\n", 279 | " test_fraction_split=0.1,\n", 280 | " budget_milli_node_hours=1000,\n", 281 | " disable_early_stopping=False,\n", 282 | " target_column=\"species\")\n", 283 | " \n", 284 | " model.wait()\n", 285 | " \n", 286 | " print(model.resource_name)\n", 287 | " \n", 288 | " return model.resource_name\n", 289 | " \n", 290 | "@component(packages_to_install=[\"google-cloud-aiplatform\", \"google-cloud-storage\", \"catboost\", \"sklearn\"])\n", 291 | "def train_catboost():\n", 292 | " print(\"train\")\n", 293 | " import sklearn\n", 294 | " from sklearn import datasets\n", 295 | " iris = sklearn.datasets.load_iris()\n", 296 | "\n", 297 | " import catboost\n", 298 | " model = catboost.CatBoostClassifier(loss_function='MultiClass')\n", 299 | "\n", 300 | " model.fit(iris.data, iris.target)\n", 301 | " FILE_PATH = \"model\"\n", 302 | " model.save_model(FILE_PATH)\n", 303 | "\n", 304 | " from_file = catboost.CatBoostClassifier()\n", 305 | "\n", 306 | " from google.cloud import storage\n", 307 | "\n", 308 | " \"\"\"Uploads a file to the bucket.\"\"\"\n", 309 | " # The ID of your GCS bucket\n", 310 | " bucket_name = \"test-fast\"\n", 311 | " # The path to your file to upload\n", 312 | " source_file_name = FILE_PATH\n", 313 | " # The ID of your GCS object\n", 314 | " destination_blob_name = FILE_PATH\n", 315 | "\n", 316 | " storage_client = storage.Client()\n", 317 | " bucket = storage_client.bucket(bucket_name)\n", 318 | " blob = bucket.blob(destination_blob_name)\n", 319 | "\n", 320 | " blob.upload_from_filename(source_file_name)\n", 321 | "\n", 322 | " print(\n", 323 | " \"File {} uploaded to {}.\".format(\n", 324 | " source_file_name, \"gs://\" + destination_blob_name\n", 325 | " )\n", 326 | " )\n", 327 | "\n", 328 | " \n", 329 | "@component(packages_to_install=[\"google-cloud-aiplatform\", \"google-cloud-storage\", \"sklearn\"])\n", 330 | "def train_scikit():\n", 331 | " print(\"train\")\n", 332 | " import sklearn\n", 333 | " from sklearn.svm import SVC\n", 334 | " from sklearn import datasets\n", 335 | " iris = sklearn.datasets.load_iris()\n", 336 | "\n", 337 | " model = SVC()\n", 338 | " model.fit(iris.data, iris.target)\n", 339 | " \n", 340 | " import pickle\n", 341 | " # save the model to disk\n", 342 | " FILE_PATH = 'finalized_model.sav'\n", 343 | " pickle.dump(model, open(FILE_PATH, 'wb'))\n", 344 | " \n", 345 | " from google.cloud import storage\n", 346 | "\n", 347 | " \"\"\"Uploads a file to the bucket.\"\"\"\n", 348 | " # The ID of your GCS bucket\n", 349 | " bucket_name = \"test-fast\"\n", 350 | " # The path to your file to upload\n", 351 | " source_file_name = FILE_PATH\n", 352 | " # The ID of your GCS object\n", 353 | " destination_blob_name = FILE_PATH\n", 354 | "\n", 355 | " storage_client = storage.Client()\n", 356 | " bucket = storage_client.bucket(bucket_name)\n", 357 | " blob = bucket.blob(destination_blob_name)\n", 358 | "\n", 359 | " blob.upload_from_filename(source_file_name)\n", 360 | "\n", 361 | " print(\n", 362 | " \"File {} uploaded to {}.\".format(\n", 363 | " source_file_name, \"gs://\" + destination_blob_name\n", 364 | " )\n", 365 | " )\n", 366 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 367 | "def evaluate(model_resource: str) -> str:\n", 368 | " print(\"evaluate\")\n", 369 | " \n", 370 | " import google.cloud.aiplatform as vertex\n", 371 | "\n", 372 | " vertex.init(project='kubeflow-demos',\n", 373 | " location='us-central1',\n", 374 | " staging_bucket='gs://test-fast/',\n", 375 | " experiment='my-experiment',\n", 376 | " experiment_description='my experiment description')\n", 377 | " \n", 378 | " # Get model resource ID\n", 379 | " models = vertex.Model(model_resource)\n", 380 | "\n", 381 | " # Get a reference to the Model Service client\n", 382 | " client_options = {\"api_endpoint\": \"us-central1-aiplatform.googleapis.com\"}\n", 383 | " model_service_client = vertex.gapic.ModelServiceClient(client_options=client_options)\n", 384 | "\n", 385 | " model_evaluations = model_service_client.list_model_evaluations(\n", 386 | " parent=model_resource\n", 387 | " )\n", 388 | " model_evaluation = list(model_evaluations)[0]\n", 389 | " \n", 390 | " print(model_evaluation)\n", 391 | " \n", 392 | " return model_resource\n", 393 | " \n", 394 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 395 | "def create_endpoint_deploy_model(model_resource: str) -> str:\n", 396 | " print(\"Endpoint\")\n", 397 | " \n", 398 | " import google.cloud.aiplatform as vertex\n", 399 | " \n", 400 | " vertex.init(project='kubeflow-demos',\n", 401 | " location='us-central1',\n", 402 | " staging_bucket='gs://test-fast/',\n", 403 | " experiment='my-experiment',\n", 404 | " experiment_description='my experiment description')\n", 405 | " \n", 406 | " endpoint = vertex.Endpoint.create(display_name=\"opti\")\n", 407 | "\n", 408 | " model = vertex.Model(model_resource)\n", 409 | "\n", 410 | " #endpoint.deploy(model=model)\n", 411 | " #endpoint.resource_name\n", 412 | " model.deploy()\n", 413 | " \n", 414 | " return \"test\"\n", 415 | "\n", 416 | "@component(packages_to_install=[\"google-cloud-aiplatform\"])\n", 417 | "def batch_prediction(model_resource: str) -> str:\n", 418 | " print(\"Batch Prediction\")\n", 419 | " \n", 420 | " import google.cloud.aiplatform as vertex\n", 421 | " \n", 422 | " vertex.init(project='kubeflow-demos',\n", 423 | " location='us-central1',\n", 424 | " staging_bucket='gs://test-fast/',\n", 425 | " experiment='my-experiment',\n", 426 | " experiment_description='my experiment description')\n", 427 | " \n", 428 | " model = vertex.Model(model_resource)\n", 429 | " #https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.Model\n", 430 | " #https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ4%20Vertex%20SDK%20AutoML%20Tabular%20Binary%20Classification.ipynb\n", 431 | " batch_predict_job = model.batch_predict(\n", 432 | " job_display_name=\"opti_\",\n", 433 | " bigquery_source = f'bq://kubeflow-demos.flowers.iris',\n", 434 | " bigquery_destination_prefix = f'bq://kubeflow-demos.flowers',\n", 435 | " sync=True)\n", 436 | "\n", 437 | " print(batch_predict_job)\n", 438 | " \n", 439 | " return \"batch is done\"\n", 440 | "\n", 441 | "@component\n", 442 | "def print_op(message: str):\n", 443 | " \"\"\"Prints a message.\"\"\"\n", 444 | " print(message)\n", 445 | "\n" 446 | ] 447 | }, 448 | { 449 | "cell_type": "markdown", 450 | "id": "d9fddb45-d074-4043-8ea1-6cf2f1eb4bee", 451 | "metadata": {}, 452 | "source": [ 453 | "https://www.kubeflow.org/docs/components/pipelines/sdk-v2/v2-component-io/\n", 454 | "\n", 455 | "https://cloud.google.com/python/docs/reference/aiplatform/latest/google.cloud.aiplatform.AutoMLTabularTrainingJob\n", 456 | "\n", 457 | "https://cloud.google.com/vertex-ai/docs/training/automl-api\n", 458 | "\n", 459 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/migration/UJ4%20Vertex%20SDK%20AutoML%20Tabular%20Binary%20Classification.ipynb" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": 6, 465 | "id": "72e6cfbe-591a-4b6c-87f6-3475de4dd786", 466 | "metadata": {}, 467 | "outputs": [], 468 | "source": [ 469 | "@kfp.dsl.pipeline(name=\"train-opti\")\n", 470 | "def pipeline(\n", 471 | " project: str = PROJECT_ID,\n", 472 | " bucket: str = BUCKET_URI,\n", 473 | " baseline_accuracy: float = 70.0\n", 474 | "):\n", 475 | " create_tabular_dataset_task = create_tabular_dataset()\n", 476 | " create_tabular_dataset_task.set_caching_options(True)\n", 477 | " \n", 478 | " train_autoML_task = train_autoML_tabular(create_tabular_dataset_task.output)\n", 479 | " train_autoML_task.set_caching_options(True)\n", 480 | " \n", 481 | " train_catboost_task = train_catboost()\n", 482 | " train_catboost_task.set_caching_options(True)\n", 483 | " train_catboost_task.after(create_tabular_dataset_task)\n", 484 | " \n", 485 | " train_scikit_task = train_scikit()\n", 486 | " train_scikit_task.set_caching_options(False)\n", 487 | " train_scikit_task.after(create_tabular_dataset_task)\n", 488 | " \n", 489 | " evaluate_task = evaluate(train_autoML_task.output)\n", 490 | " evaluate_task.set_caching_options(True)\n", 491 | " evaluate_task.after(train_scikit_task)\n", 492 | " evaluate_task.after(train_catboost_task)\n", 493 | " \n", 494 | " batch_prediction_task = batch_prediction(evaluate_task.output)" 495 | ] 496 | }, 497 | { 498 | "cell_type": "code", 499 | "execution_count": 7, 500 | "id": "e14ac497-112e-44f4-943e-72a9b241bead", 501 | "metadata": {}, 502 | "outputs": [ 503 | { 504 | "name": "stderr", 505 | "output_type": "stream", 506 | "text": [ 507 | "/Users/yarkoni/projects/workshop/venv/lib/python3.9/site-packages/kfp/v2/compiler/compiler.py:1278: FutureWarning: APIs imported from the v1 namespace (e.g. kfp.dsl, kfp.components, etc) will not be supported by the v2 compiler since v2.0.0\n", 508 | " warnings.warn(\n" 509 | ] 510 | } 511 | ], 512 | "source": [ 513 | "from kfp.v2 import compiler\n", 514 | "\n", 515 | "compiler.Compiler().compile(pipeline_func=pipeline, package_path=\"pipeline-dag.json\")" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": null, 521 | "id": "88e76ae0-3171-4e4d-ae29-220a0f14dad0", 522 | "metadata": {}, 523 | "outputs": [ 524 | { 525 | "name": "stdout", 526 | "output_type": "stream", 527 | "text": [ 528 | "INFO:google.cloud.aiplatform.pipeline_jobs:Creating PipelineJob\n", 529 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob created. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336\n", 530 | "INFO:google.cloud.aiplatform.pipeline_jobs:To use this PipelineJob in another session:\n", 531 | "INFO:google.cloud.aiplatform.pipeline_jobs:pipeline_job = aiplatform.PipelineJob.get('projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336')\n", 532 | "INFO:google.cloud.aiplatform.pipeline_jobs:View Pipeline Job:\n", 533 | "https://console.cloud.google.com/vertex-ai/locations/us-central1/pipelines/runs/train-opti-20220428113336?project=141610882258\n", 534 | "INFO:google.cloud.aiplatform.pipeline_jobs:PipelineJob run completed. Resource name: projects/141610882258/locations/us-central1/pipelineJobs/train-opti-20220428113336\n" 535 | ] 536 | } 537 | ], 538 | "source": [ 539 | "# Instantiate PipelineJob object\n", 540 | "vertex_pipeline_job = vertex.PipelineJob(\n", 541 | " display_name=\"test-opti\",\n", 542 | "\n", 543 | " # Whether or not to enable caching\n", 544 | " # True = always cache pipeline step result\n", 545 | " # False = never cache pipeline step result\n", 546 | " # None = defer to cache option for each pipeline component in the pipeline definition\n", 547 | " enable_caching=True,\n", 548 | "\n", 549 | " # Local or GCS path to a compiled pipeline definition\n", 550 | " template_path=\"pipeline-dag.json\",\n", 551 | "\n", 552 | " # Dictionary containing input parameters for your pipeline\n", 553 | " parameter_values={},\n", 554 | "\n", 555 | " # GCS path to act as the pipeline root\n", 556 | " pipeline_root=BUCKET_URI,\n", 557 | ")\n", 558 | "\n", 559 | "# Execute pipeline in Vertex AI and monitor until completion\n", 560 | "vertex_pipeline_job.run(\n", 561 | " # Email address of service account to use for the pipeline run\n", 562 | " # You must have iam.serviceAccounts.actAs permission on the service account to use it\n", 563 | " #service_account=service_account,\n", 564 | "\n", 565 | " # Whether this function call should be synchronous (wait for pipeline run to finish before terminating)\n", 566 | " # or asynchronous (return immediately)\n", 567 | " sync=False\n", 568 | ")" 569 | ] 570 | }, 571 | { 572 | "cell_type": "code", 573 | "execution_count": 357, 574 | "id": "79bdbf98-57bc-4c17-9671-1d0832e571e7", 575 | "metadata": {}, 576 | "outputs": [ 577 | { 578 | "name": "stderr", 579 | "output_type": "stream", 580 | "text": [ 581 | "E0407 13:49:19.734209000 4753593856 fork_posix.cc:76] Other threads are currently calling into gRPC, skipping fork() handlers\n" 582 | ] 583 | } 584 | ], 585 | "source": [ 586 | "jobs = vertex.PipelineJob.list()" 587 | ] 588 | }, 589 | { 590 | "cell_type": "markdown", 591 | "id": "82858c6c-ebd7-4cef-b29a-3ae2665be848", 592 | "metadata": {}, 593 | "source": [ 594 | "### Or simply use the premade components \n", 595 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/google_cloud_pipeline_components_automl_images.ipynb\n", 596 | "\n", 597 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/automl_tabular_classification_beans.ipynb" 598 | ] 599 | }, 600 | { 601 | "cell_type": "markdown", 602 | "id": "5b6f47b3-b11c-4855-9a20-638dbed91ff9", 603 | "metadata": {}, 604 | "source": [ 605 | "### Adding batch capabilities\n", 606 | "https://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/community/gapic/automl/showcase_automl_image_classification_batch.ipynb\n" 607 | ] 608 | } 609 | ], 610 | "metadata": { 611 | "kernelspec": { 612 | "display_name": "Python 3 (ipykernel)", 613 | "language": "python", 614 | "name": "python3" 615 | }, 616 | "language_info": { 617 | "codemirror_mode": { 618 | "name": "ipython", 619 | "version": 3 620 | }, 621 | "file_extension": ".py", 622 | "mimetype": "text/x-python", 623 | "name": "python", 624 | "nbconvert_exporter": "python", 625 | "pygments_lexer": "ipython3", 626 | "version": "3.9.4" 627 | } 628 | }, 629 | "nbformat": 4, 630 | "nbformat_minor": 5 631 | } 632 | -------------------------------------------------------------------------------- /iris.csv: -------------------------------------------------------------------------------- 1 | sepal_length,sepal_width,petal_length,petal_width,species 2 | 5.1,3.5,1.4,0.2,setosa 3 | 4.9,3.0,1.4,0.2,setosa 4 | 4.7,3.2,1.3,0.2,setosa 5 | 4.6,3.1,1.5,0.2,setosa 6 | 5.0,3.6,1.4,0.2,setosa 7 | 5.4,3.9,1.7,0.4,setosa 8 | 4.6,3.4,1.4,0.3,setosa 9 | 5.0,3.4,1.5,0.2,setosa 10 | 4.4,2.9,1.4,0.2,setosa 11 | 4.9,3.1,1.5,0.1,setosa 12 | 5.4,3.7,1.5,0.2,setosa 13 | 4.8,3.4,1.6,0.2,setosa 14 | 4.8,3.0,1.4,0.1,setosa 15 | 4.3,3.0,1.1,0.1,setosa 16 | 5.8,4.0,1.2,0.2,setosa 17 | 5.7,4.4,1.5,0.4,setosa 18 | 5.4,3.9,1.3,0.4,setosa 19 | 5.1,3.5,1.4,0.3,setosa 20 | 5.7,3.8,1.7,0.3,setosa 21 | 5.1,3.8,1.5,0.3,setosa 22 | 5.4,3.4,1.7,0.2,setosa 23 | 5.1,3.7,1.5,0.4,setosa 24 | 4.6,3.6,1.0,0.2,setosa 25 | 5.1,3.3,1.7,0.5,setosa 26 | 4.8,3.4,1.9,0.2,setosa 27 | 5.0,3.0,1.6,0.2,setosa 28 | 5.0,3.4,1.6,0.4,setosa 29 | 5.2,3.5,1.5,0.2,setosa 30 | 5.2,3.4,1.4,0.2,setosa 31 | 4.7,3.2,1.6,0.2,setosa 32 | 4.8,3.1,1.6,0.2,setosa 33 | 5.4,3.4,1.5,0.4,setosa 34 | 5.2,4.1,1.5,0.1,setosa 35 | 5.5,4.2,1.4,0.2,setosa 36 | 4.9,3.1,1.5,0.1,setosa 37 | 5.0,3.2,1.2,0.2,setosa 38 | 5.5,3.5,1.3,0.2,setosa 39 | 4.9,3.1,1.5,0.1,setosa 40 | 4.4,3.0,1.3,0.2,setosa 41 | 5.1,3.4,1.5,0.2,setosa 42 | 5.0,3.5,1.3,0.3,setosa 43 | 4.5,2.3,1.3,0.3,setosa 44 | 4.4,3.2,1.3,0.2,setosa 45 | 5.0,3.5,1.6,0.6,setosa 46 | 5.1,3.8,1.9,0.4,setosa 47 | 4.8,3.0,1.4,0.3,setosa 48 | 5.1,3.8,1.6,0.2,setosa 49 | 4.6,3.2,1.4,0.2,setosa 50 | 5.3,3.7,1.5,0.2,setosa 51 | 5.0,3.3,1.4,0.2,setosa 52 | 7.0,3.2,4.7,1.4,versicolor 53 | 6.4,3.2,4.5,1.5,versicolor 54 | 6.9,3.1,4.9,1.5,versicolor 55 | 5.5,2.3,4.0,1.3,versicolor 56 | 6.5,2.8,4.6,1.5,versicolor 57 | 5.7,2.8,4.5,1.3,versicolor 58 | 6.3,3.3,4.7,1.6,versicolor 59 | 4.9,2.4,3.3,1.0,versicolor 60 | 6.6,2.9,4.6,1.3,versicolor 61 | 5.2,2.7,3.9,1.4,versicolor 62 | 5.0,2.0,3.5,1.0,versicolor 63 | 5.9,3.0,4.2,1.5,versicolor 64 | 6.0,2.2,4.0,1.0,versicolor 65 | 6.1,2.9,4.7,1.4,versicolor 66 | 5.6,2.9,3.6,1.3,versicolor 67 | 6.7,3.1,4.4,1.4,versicolor 68 | 5.6,3.0,4.5,1.5,versicolor 69 | 5.8,2.7,4.1,1.0,versicolor 70 | 6.2,2.2,4.5,1.5,versicolor 71 | 5.6,2.5,3.9,1.1,versicolor 72 | 5.9,3.2,4.8,1.8,versicolor 73 | 6.1,2.8,4.0,1.3,versicolor 74 | 6.3,2.5,4.9,1.5,versicolor 75 | 6.1,2.8,4.7,1.2,versicolor 76 | 6.4,2.9,4.3,1.3,versicolor 77 | 6.6,3.0,4.4,1.4,versicolor 78 | 6.8,2.8,4.8,1.4,versicolor 79 | 6.7,3.0,5.0,1.7,versicolor 80 | 6.0,2.9,4.5,1.5,versicolor 81 | 5.7,2.6,3.5,1.0,versicolor 82 | 5.5,2.4,3.8,1.1,versicolor 83 | 5.5,2.4,3.7,1.0,versicolor 84 | 5.8,2.7,3.9,1.2,versicolor 85 | 6.0,2.7,5.1,1.6,versicolor 86 | 5.4,3.0,4.5,1.5,versicolor 87 | 6.0,3.4,4.5,1.6,versicolor 88 | 6.7,3.1,4.7,1.5,versicolor 89 | 6.3,2.3,4.4,1.3,versicolor 90 | 5.6,3.0,4.1,1.3,versicolor 91 | 5.5,2.5,4.0,1.3,versicolor 92 | 5.5,2.6,4.4,1.2,versicolor 93 | 6.1,3.0,4.6,1.4,versicolor 94 | 5.8,2.6,4.0,1.2,versicolor 95 | 5.0,2.3,3.3,1.0,versicolor 96 | 5.6,2.7,4.2,1.3,versicolor 97 | 5.7,3.0,4.2,1.2,versicolor 98 | 5.7,2.9,4.2,1.3,versicolor 99 | 6.2,2.9,4.3,1.3,versicolor 100 | 5.1,2.5,3.0,1.1,versicolor 101 | 5.7,2.8,4.1,1.3,versicolor 102 | 6.3,3.3,6.0,2.5,virginica 103 | 5.8,2.7,5.1,1.9,virginica 104 | 7.1,3.0,5.9,2.1,virginica 105 | 6.3,2.9,5.6,1.8,virginica 106 | 6.5,3.0,5.8,2.2,virginica 107 | 7.6,3.0,6.6,2.1,virginica 108 | 4.9,2.5,4.5,1.7,virginica 109 | 7.3,2.9,6.3,1.8,virginica 110 | 6.7,2.5,5.8,1.8,virginica 111 | 7.2,3.6,6.1,2.5,virginica 112 | 6.5,3.2,5.1,2.0,virginica 113 | 6.4,2.7,5.3,1.9,virginica 114 | 6.8,3.0,5.5,2.1,virginica 115 | 5.7,2.5,5.0,2.0,virginica 116 | 5.8,2.8,5.1,2.4,virginica 117 | 6.4,3.2,5.3,2.3,virginica 118 | 6.5,3.0,5.5,1.8,virginica 119 | 7.7,3.8,6.7,2.2,virginica 120 | 7.7,2.6,6.9,2.3,virginica 121 | 6.0,2.2,5.0,1.5,virginica 122 | 6.9,3.2,5.7,2.3,virginica 123 | 5.6,2.8,4.9,2.0,virginica 124 | 7.7,2.8,6.7,2.0,virginica 125 | 6.3,2.7,4.9,1.8,virginica 126 | 6.7,3.3,5.7,2.1,virginica 127 | 7.2,3.2,6.0,1.8,virginica 128 | 6.2,2.8,4.8,1.8,virginica 129 | 6.1,3.0,4.9,1.8,virginica 130 | 6.4,2.8,5.6,2.1,virginica 131 | 7.2,3.0,5.8,1.6,virginica 132 | 7.4,2.8,6.1,1.9,virginica 133 | 7.9,3.8,6.4,2.0,virginica 134 | 6.4,2.8,5.6,2.2,virginica 135 | 6.3,2.8,5.1,1.5,virginica 136 | 6.1,2.6,5.6,1.4,virginica 137 | 7.7,3.0,6.1,2.3,virginica 138 | 6.3,3.4,5.6,2.4,virginica 139 | 6.4,3.1,5.5,1.8,virginica 140 | 6.0,3.0,4.8,1.8,virginica 141 | 6.9,3.1,5.4,2.1,virginica 142 | 6.7,3.1,5.6,2.4,virginica 143 | 6.9,3.1,5.1,2.3,virginica 144 | 5.8,2.7,5.1,1.9,virginica 145 | 6.8,3.2,5.9,2.3,virginica 146 | 6.7,3.3,5.7,2.5,virginica 147 | 6.7,3.0,5.2,2.3,virginica 148 | 6.3,2.5,5.0,1.9,virginica 149 | 6.5,3.0,5.2,2.0,virginica 150 | 6.2,3.4,5.4,2.3,virginica 151 | 5.9,3.0,5.1,1.8,virginica 152 | 5.1,3.5,1.4,0.2,setosa 153 | 4.9,3.0,1.4,0.2,setosa 154 | 4.7,3.2,1.3,0.2,setosa 155 | 4.6,3.1,1.5,0.2,setosa 156 | 5.0,3.6,1.4,0.2,setosa 157 | 5.4,3.9,1.7,0.4,setosa 158 | 4.6,3.4,1.4,0.3,setosa 159 | 5.0,3.4,1.5,0.2,setosa 160 | 4.4,2.9,1.4,0.2,setosa 161 | 4.9,3.1,1.5,0.1,setosa 162 | 5.4,3.7,1.5,0.2,setosa 163 | 4.8,3.4,1.6,0.2,setosa 164 | 4.8,3.0,1.4,0.1,setosa 165 | 4.3,3.0,1.1,0.1,setosa 166 | 5.8,4.0,1.2,0.2,setosa 167 | 5.7,4.4,1.5,0.4,setosa 168 | 5.4,3.9,1.3,0.4,setosa 169 | 5.1,3.5,1.4,0.3,setosa 170 | 5.7,3.8,1.7,0.3,setosa 171 | 5.1,3.8,1.5,0.3,setosa 172 | 5.4,3.4,1.7,0.2,setosa 173 | 5.1,3.7,1.5,0.4,setosa 174 | 4.6,3.6,1.0,0.2,setosa 175 | 5.1,3.3,1.7,0.5,setosa 176 | 4.8,3.4,1.9,0.2,setosa 177 | 5.0,3.0,1.6,0.2,setosa 178 | 5.0,3.4,1.6,0.4,setosa 179 | 5.2,3.5,1.5,0.2,setosa 180 | 5.2,3.4,1.4,0.2,setosa 181 | 4.7,3.2,1.6,0.2,setosa 182 | 4.8,3.1,1.6,0.2,setosa 183 | 5.4,3.4,1.5,0.4,setosa 184 | 5.2,4.1,1.5,0.1,setosa 185 | 5.5,4.2,1.4,0.2,setosa 186 | 4.9,3.1,1.5,0.1,setosa 187 | 5.0,3.2,1.2,0.2,setosa 188 | 5.5,3.5,1.3,0.2,setosa 189 | 4.9,3.1,1.5,0.1,setosa 190 | 4.4,3.0,1.3,0.2,setosa 191 | 5.1,3.4,1.5,0.2,setosa 192 | 5.0,3.5,1.3,0.3,setosa 193 | 4.5,2.3,1.3,0.3,setosa 194 | 4.4,3.2,1.3,0.2,setosa 195 | 5.0,3.5,1.6,0.6,setosa 196 | 5.1,3.8,1.9,0.4,setosa 197 | 4.8,3.0,1.4,0.3,setosa 198 | 5.1,3.8,1.6,0.2,setosa 199 | 4.6,3.2,1.4,0.2,setosa 200 | 5.3,3.7,1.5,0.2,setosa 201 | 5.0,3.3,1.4,0.2,setosa 202 | 7.0,3.2,4.7,1.4,versicolor 203 | 6.4,3.2,4.5,1.5,versicolor 204 | 6.9,3.1,4.9,1.5,versicolor 205 | 5.5,2.3,4.0,1.3,versicolor 206 | 6.5,2.8,4.6,1.5,versicolor 207 | 5.7,2.8,4.5,1.3,versicolor 208 | 6.3,3.3,4.7,1.6,versicolor 209 | 4.9,2.4,3.3,1.0,versicolor 210 | 6.6,2.9,4.6,1.3,versicolor 211 | 5.2,2.7,3.9,1.4,versicolor 212 | 5.0,2.0,3.5,1.0,versicolor 213 | 5.9,3.0,4.2,1.5,versicolor 214 | 6.0,2.2,4.0,1.0,versicolor 215 | 6.1,2.9,4.7,1.4,versicolor 216 | 5.6,2.9,3.6,1.3,versicolor 217 | 6.7,3.1,4.4,1.4,versicolor 218 | 5.6,3.0,4.5,1.5,versicolor 219 | 5.8,2.7,4.1,1.0,versicolor 220 | 6.2,2.2,4.5,1.5,versicolor 221 | 5.6,2.5,3.9,1.1,versicolor 222 | 5.9,3.2,4.8,1.8,versicolor 223 | 6.1,2.8,4.0,1.3,versicolor 224 | 6.3,2.5,4.9,1.5,versicolor 225 | 6.1,2.8,4.7,1.2,versicolor 226 | 6.4,2.9,4.3,1.3,versicolor 227 | 6.6,3.0,4.4,1.4,versicolor 228 | 6.8,2.8,4.8,1.4,versicolor 229 | 6.7,3.0,5.0,1.7,versicolor 230 | 6.0,2.9,4.5,1.5,versicolor 231 | 5.7,2.6,3.5,1.0,versicolor 232 | 5.5,2.4,3.8,1.1,versicolor 233 | 5.5,2.4,3.7,1.0,versicolor 234 | 5.8,2.7,3.9,1.2,versicolor 235 | 6.0,2.7,5.1,1.6,versicolor 236 | 5.4,3.0,4.5,1.5,versicolor 237 | 6.0,3.4,4.5,1.6,versicolor 238 | 6.7,3.1,4.7,1.5,versicolor 239 | 6.3,2.3,4.4,1.3,versicolor 240 | 5.6,3.0,4.1,1.3,versicolor 241 | 5.5,2.5,4.0,1.3,versicolor 242 | 5.5,2.6,4.4,1.2,versicolor 243 | 6.1,3.0,4.6,1.4,versicolor 244 | 5.8,2.6,4.0,1.2,versicolor 245 | 5.0,2.3,3.3,1.0,versicolor 246 | 5.6,2.7,4.2,1.3,versicolor 247 | 5.7,3.0,4.2,1.2,versicolor 248 | 5.7,2.9,4.2,1.3,versicolor 249 | 6.2,2.9,4.3,1.3,versicolor 250 | 5.1,2.5,3.0,1.1,versicolor 251 | 5.7,2.8,4.1,1.3,versicolor 252 | 6.3,3.3,6.0,2.5,virginica 253 | 5.8,2.7,5.1,1.9,virginica 254 | 7.1,3.0,5.9,2.1,virginica 255 | 6.3,2.9,5.6,1.8,virginica 256 | 6.5,3.0,5.8,2.2,virginica 257 | 7.6,3.0,6.6,2.1,virginica 258 | 4.9,2.5,4.5,1.7,virginica 259 | 7.3,2.9,6.3,1.8,virginica 260 | 6.7,2.5,5.8,1.8,virginica 261 | 7.2,3.6,6.1,2.5,virginica 262 | 6.5,3.2,5.1,2.0,virginica 263 | 6.4,2.7,5.3,1.9,virginica 264 | 6.8,3.0,5.5,2.1,virginica 265 | 5.7,2.5,5.0,2.0,virginica 266 | 5.8,2.8,5.1,2.4,virginica 267 | 6.4,3.2,5.3,2.3,virginica 268 | 6.5,3.0,5.5,1.8,virginica 269 | 7.7,3.8,6.7,2.2,virginica 270 | 7.7,2.6,6.9,2.3,virginica 271 | 6.0,2.2,5.0,1.5,virginica 272 | 6.9,3.2,5.7,2.3,virginica 273 | 5.6,2.8,4.9,2.0,virginica 274 | 7.7,2.8,6.7,2.0,virginica 275 | 6.3,2.7,4.9,1.8,virginica 276 | 6.7,3.3,5.7,2.1,virginica 277 | 7.2,3.2,6.0,1.8,virginica 278 | 6.2,2.8,4.8,1.8,virginica 279 | 6.1,3.0,4.9,1.8,virginica 280 | 6.4,2.8,5.6,2.1,virginica 281 | 7.2,3.0,5.8,1.6,virginica 282 | 7.4,2.8,6.1,1.9,virginica 283 | 7.9,3.8,6.4,2.0,virginica 284 | 6.4,2.8,5.6,2.2,virginica 285 | 6.3,2.8,5.1,1.5,virginica 286 | 6.1,2.6,5.6,1.4,virginica 287 | 7.7,3.0,6.1,2.3,virginica 288 | 6.3,3.4,5.6,2.4,virginica 289 | 6.4,3.1,5.5,1.8,virginica 290 | 6.0,3.0,4.8,1.8,virginica 291 | 6.9,3.1,5.4,2.1,virginica 292 | 6.7,3.1,5.6,2.4,virginica 293 | 6.9,3.1,5.1,2.3,virginica 294 | 5.8,2.7,5.1,1.9,virginica 295 | 6.8,3.2,5.9,2.3,virginica 296 | 6.7,3.3,5.7,2.5,virginica 297 | 6.7,3.0,5.2,2.3,virginica 298 | 6.3,2.5,5.0,1.9,virginica 299 | 6.5,3.0,5.2,2.0,virginica 300 | 6.2,3.4,5.4,2.3,virginica 301 | 5.9,3.0,5.1,1.8,virginica 302 | 5.1,3.5,1.4,0.2,setosa 303 | 4.9,3.0,1.4,0.2,setosa 304 | 4.7,3.2,1.3,0.2,setosa 305 | 4.6,3.1,1.5,0.2,setosa 306 | 5.0,3.6,1.4,0.2,setosa 307 | 5.4,3.9,1.7,0.4,setosa 308 | 4.6,3.4,1.4,0.3,setosa 309 | 5.0,3.4,1.5,0.2,setosa 310 | 4.4,2.9,1.4,0.2,setosa 311 | 4.9,3.1,1.5,0.1,setosa 312 | 5.4,3.7,1.5,0.2,setosa 313 | 4.8,3.4,1.6,0.2,setosa 314 | 4.8,3.0,1.4,0.1,setosa 315 | 4.3,3.0,1.1,0.1,setosa 316 | 5.8,4.0,1.2,0.2,setosa 317 | 5.7,4.4,1.5,0.4,setosa 318 | 5.4,3.9,1.3,0.4,setosa 319 | 5.1,3.5,1.4,0.3,setosa 320 | 5.7,3.8,1.7,0.3,setosa 321 | 5.1,3.8,1.5,0.3,setosa 322 | 5.4,3.4,1.7,0.2,setosa 323 | 5.1,3.7,1.5,0.4,setosa 324 | 4.6,3.6,1.0,0.2,setosa 325 | 5.1,3.3,1.7,0.5,setosa 326 | 4.8,3.4,1.9,0.2,setosa 327 | 5.0,3.0,1.6,0.2,setosa 328 | 5.0,3.4,1.6,0.4,setosa 329 | 5.2,3.5,1.5,0.2,setosa 330 | 5.2,3.4,1.4,0.2,setosa 331 | 4.7,3.2,1.6,0.2,setosa 332 | 4.8,3.1,1.6,0.2,setosa 333 | 5.4,3.4,1.5,0.4,setosa 334 | 5.2,4.1,1.5,0.1,setosa 335 | 5.5,4.2,1.4,0.2,setosa 336 | 4.9,3.1,1.5,0.1,setosa 337 | 5.0,3.2,1.2,0.2,setosa 338 | 5.5,3.5,1.3,0.2,setosa 339 | 4.9,3.1,1.5,0.1,setosa 340 | 4.4,3.0,1.3,0.2,setosa 341 | 5.1,3.4,1.5,0.2,setosa 342 | 5.0,3.5,1.3,0.3,setosa 343 | 4.5,2.3,1.3,0.3,setosa 344 | 4.4,3.2,1.3,0.2,setosa 345 | 5.0,3.5,1.6,0.6,setosa 346 | 5.1,3.8,1.9,0.4,setosa 347 | 4.8,3.0,1.4,0.3,setosa 348 | 5.1,3.8,1.6,0.2,setosa 349 | 4.6,3.2,1.4,0.2,setosa 350 | 5.3,3.7,1.5,0.2,setosa 351 | 5.0,3.3,1.4,0.2,setosa 352 | 7.0,3.2,4.7,1.4,versicolor 353 | 6.4,3.2,4.5,1.5,versicolor 354 | 6.9,3.1,4.9,1.5,versicolor 355 | 5.5,2.3,4.0,1.3,versicolor 356 | 6.5,2.8,4.6,1.5,versicolor 357 | 5.7,2.8,4.5,1.3,versicolor 358 | 6.3,3.3,4.7,1.6,versicolor 359 | 4.9,2.4,3.3,1.0,versicolor 360 | 6.6,2.9,4.6,1.3,versicolor 361 | 5.2,2.7,3.9,1.4,versicolor 362 | 5.0,2.0,3.5,1.0,versicolor 363 | 5.9,3.0,4.2,1.5,versicolor 364 | 6.0,2.2,4.0,1.0,versicolor 365 | 6.1,2.9,4.7,1.4,versicolor 366 | 5.6,2.9,3.6,1.3,versicolor 367 | 6.7,3.1,4.4,1.4,versicolor 368 | 5.6,3.0,4.5,1.5,versicolor 369 | 5.8,2.7,4.1,1.0,versicolor 370 | 6.2,2.2,4.5,1.5,versicolor 371 | 5.6,2.5,3.9,1.1,versicolor 372 | 5.9,3.2,4.8,1.8,versicolor 373 | 6.1,2.8,4.0,1.3,versicolor 374 | 6.3,2.5,4.9,1.5,versicolor 375 | 6.1,2.8,4.7,1.2,versicolor 376 | 6.4,2.9,4.3,1.3,versicolor 377 | 6.6,3.0,4.4,1.4,versicolor 378 | 6.8,2.8,4.8,1.4,versicolor 379 | 6.7,3.0,5.0,1.7,versicolor 380 | 6.0,2.9,4.5,1.5,versicolor 381 | 5.7,2.6,3.5,1.0,versicolor 382 | 5.5,2.4,3.8,1.1,versicolor 383 | 5.5,2.4,3.7,1.0,versicolor 384 | 5.8,2.7,3.9,1.2,versicolor 385 | 6.0,2.7,5.1,1.6,versicolor 386 | 5.4,3.0,4.5,1.5,versicolor 387 | 6.0,3.4,4.5,1.6,versicolor 388 | 6.7,3.1,4.7,1.5,versicolor 389 | 6.3,2.3,4.4,1.3,versicolor 390 | 5.6,3.0,4.1,1.3,versicolor 391 | 5.5,2.5,4.0,1.3,versicolor 392 | 5.5,2.6,4.4,1.2,versicolor 393 | 6.1,3.0,4.6,1.4,versicolor 394 | 5.8,2.6,4.0,1.2,versicolor 395 | 5.0,2.3,3.3,1.0,versicolor 396 | 5.6,2.7,4.2,1.3,versicolor 397 | 5.7,3.0,4.2,1.2,versicolor 398 | 5.7,2.9,4.2,1.3,versicolor 399 | 6.2,2.9,4.3,1.3,versicolor 400 | 5.1,2.5,3.0,1.1,versicolor 401 | 5.7,2.8,4.1,1.3,versicolor 402 | 6.3,3.3,6.0,2.5,virginica 403 | 5.8,2.7,5.1,1.9,virginica 404 | 7.1,3.0,5.9,2.1,virginica 405 | 6.3,2.9,5.6,1.8,virginica 406 | 6.5,3.0,5.8,2.2,virginica 407 | 7.6,3.0,6.6,2.1,virginica 408 | 4.9,2.5,4.5,1.7,virginica 409 | 7.3,2.9,6.3,1.8,virginica 410 | 6.7,2.5,5.8,1.8,virginica 411 | 7.2,3.6,6.1,2.5,virginica 412 | 6.5,3.2,5.1,2.0,virginica 413 | 6.4,2.7,5.3,1.9,virginica 414 | 6.8,3.0,5.5,2.1,virginica 415 | 5.7,2.5,5.0,2.0,virginica 416 | 5.8,2.8,5.1,2.4,virginica 417 | 6.4,3.2,5.3,2.3,virginica 418 | 6.5,3.0,5.5,1.8,virginica 419 | 7.7,3.8,6.7,2.2,virginica 420 | 7.7,2.6,6.9,2.3,virginica 421 | 6.0,2.2,5.0,1.5,virginica 422 | 6.9,3.2,5.7,2.3,virginica 423 | 5.6,2.8,4.9,2.0,virginica 424 | 7.7,2.8,6.7,2.0,virginica 425 | 6.3,2.7,4.9,1.8,virginica 426 | 6.7,3.3,5.7,2.1,virginica 427 | 7.2,3.2,6.0,1.8,virginica 428 | 6.2,2.8,4.8,1.8,virginica 429 | 6.1,3.0,4.9,1.8,virginica 430 | 6.4,2.8,5.6,2.1,virginica 431 | 7.2,3.0,5.8,1.6,virginica 432 | 7.4,2.8,6.1,1.9,virginica 433 | 7.9,3.8,6.4,2.0,virginica 434 | 6.4,2.8,5.6,2.2,virginica 435 | 6.3,2.8,5.1,1.5,virginica 436 | 6.1,2.6,5.6,1.4,virginica 437 | 7.7,3.0,6.1,2.3,virginica 438 | 6.3,3.4,5.6,2.4,virginica 439 | 6.4,3.1,5.5,1.8,virginica 440 | 6.0,3.0,4.8,1.8,virginica 441 | 6.9,3.1,5.4,2.1,virginica 442 | 6.7,3.1,5.6,2.4,virginica 443 | 6.9,3.1,5.1,2.3,virginica 444 | 5.8,2.7,5.1,1.9,virginica 445 | 6.8,3.2,5.9,2.3,virginica 446 | 6.7,3.3,5.7,2.5,virginica 447 | 6.7,3.0,5.2,2.3,virginica 448 | 6.3,2.5,5.0,1.9,virginica 449 | 6.5,3.0,5.2,2.0,virginica 450 | 6.2,3.4,5.4,2.3,virginica 451 | 5.9,3.0,5.1,1.8,virginica 452 | 5.1,3.5,1.4,0.2,setosa 453 | 4.9,3.0,1.4,0.2,setosa 454 | 4.7,3.2,1.3,0.2,setosa 455 | 4.6,3.1,1.5,0.2,setosa 456 | 5.0,3.6,1.4,0.2,setosa 457 | 5.4,3.9,1.7,0.4,setosa 458 | 4.6,3.4,1.4,0.3,setosa 459 | 5.0,3.4,1.5,0.2,setosa 460 | 4.4,2.9,1.4,0.2,setosa 461 | 4.9,3.1,1.5,0.1,setosa 462 | 5.4,3.7,1.5,0.2,setosa 463 | 4.8,3.4,1.6,0.2,setosa 464 | 4.8,3.0,1.4,0.1,setosa 465 | 4.3,3.0,1.1,0.1,setosa 466 | 5.8,4.0,1.2,0.2,setosa 467 | 5.7,4.4,1.5,0.4,setosa 468 | 5.4,3.9,1.3,0.4,setosa 469 | 5.1,3.5,1.4,0.3,setosa 470 | 5.7,3.8,1.7,0.3,setosa 471 | 5.1,3.8,1.5,0.3,setosa 472 | 5.4,3.4,1.7,0.2,setosa 473 | 5.1,3.7,1.5,0.4,setosa 474 | 4.6,3.6,1.0,0.2,setosa 475 | 5.1,3.3,1.7,0.5,setosa 476 | 4.8,3.4,1.9,0.2,setosa 477 | 5.0,3.0,1.6,0.2,setosa 478 | 5.0,3.4,1.6,0.4,setosa 479 | 5.2,3.5,1.5,0.2,setosa 480 | 5.2,3.4,1.4,0.2,setosa 481 | 4.7,3.2,1.6,0.2,setosa 482 | 4.8,3.1,1.6,0.2,setosa 483 | 5.4,3.4,1.5,0.4,setosa 484 | 5.2,4.1,1.5,0.1,setosa 485 | 5.5,4.2,1.4,0.2,setosa 486 | 4.9,3.1,1.5,0.1,setosa 487 | 5.0,3.2,1.2,0.2,setosa 488 | 5.5,3.5,1.3,0.2,setosa 489 | 4.9,3.1,1.5,0.1,setosa 490 | 4.4,3.0,1.3,0.2,setosa 491 | 5.1,3.4,1.5,0.2,setosa 492 | 5.0,3.5,1.3,0.3,setosa 493 | 4.5,2.3,1.3,0.3,setosa 494 | 4.4,3.2,1.3,0.2,setosa 495 | 5.0,3.5,1.6,0.6,setosa 496 | 5.1,3.8,1.9,0.4,setosa 497 | 4.8,3.0,1.4,0.3,setosa 498 | 5.1,3.8,1.6,0.2,setosa 499 | 4.6,3.2,1.4,0.2,setosa 500 | 5.3,3.7,1.5,0.2,setosa 501 | 5.0,3.3,1.4,0.2,setosa 502 | 7.0,3.2,4.7,1.4,versicolor 503 | 6.4,3.2,4.5,1.5,versicolor 504 | 6.9,3.1,4.9,1.5,versicolor 505 | 5.5,2.3,4.0,1.3,versicolor 506 | 6.5,2.8,4.6,1.5,versicolor 507 | 5.7,2.8,4.5,1.3,versicolor 508 | 6.3,3.3,4.7,1.6,versicolor 509 | 4.9,2.4,3.3,1.0,versicolor 510 | 6.6,2.9,4.6,1.3,versicolor 511 | 5.2,2.7,3.9,1.4,versicolor 512 | 5.0,2.0,3.5,1.0,versicolor 513 | 5.9,3.0,4.2,1.5,versicolor 514 | 6.0,2.2,4.0,1.0,versicolor 515 | 6.1,2.9,4.7,1.4,versicolor 516 | 5.6,2.9,3.6,1.3,versicolor 517 | 6.7,3.1,4.4,1.4,versicolor 518 | 5.6,3.0,4.5,1.5,versicolor 519 | 5.8,2.7,4.1,1.0,versicolor 520 | 6.2,2.2,4.5,1.5,versicolor 521 | 5.6,2.5,3.9,1.1,versicolor 522 | 5.9,3.2,4.8,1.8,versicolor 523 | 6.1,2.8,4.0,1.3,versicolor 524 | 6.3,2.5,4.9,1.5,versicolor 525 | 6.1,2.8,4.7,1.2,versicolor 526 | 6.4,2.9,4.3,1.3,versicolor 527 | 6.6,3.0,4.4,1.4,versicolor 528 | 6.8,2.8,4.8,1.4,versicolor 529 | 6.7,3.0,5.0,1.7,versicolor 530 | 6.0,2.9,4.5,1.5,versicolor 531 | 5.7,2.6,3.5,1.0,versicolor 532 | 5.5,2.4,3.8,1.1,versicolor 533 | 5.5,2.4,3.7,1.0,versicolor 534 | 5.8,2.7,3.9,1.2,versicolor 535 | 6.0,2.7,5.1,1.6,versicolor 536 | 5.4,3.0,4.5,1.5,versicolor 537 | 6.0,3.4,4.5,1.6,versicolor 538 | 6.7,3.1,4.7,1.5,versicolor 539 | 6.3,2.3,4.4,1.3,versicolor 540 | 5.6,3.0,4.1,1.3,versicolor 541 | 5.5,2.5,4.0,1.3,versicolor 542 | 5.5,2.6,4.4,1.2,versicolor 543 | 6.1,3.0,4.6,1.4,versicolor 544 | 5.8,2.6,4.0,1.2,versicolor 545 | 5.0,2.3,3.3,1.0,versicolor 546 | 5.6,2.7,4.2,1.3,versicolor 547 | 5.7,3.0,4.2,1.2,versicolor 548 | 5.7,2.9,4.2,1.3,versicolor 549 | 6.2,2.9,4.3,1.3,versicolor 550 | 5.1,2.5,3.0,1.1,versicolor 551 | 5.7,2.8,4.1,1.3,versicolor 552 | 6.3,3.3,6.0,2.5,virginica 553 | 5.8,2.7,5.1,1.9,virginica 554 | 7.1,3.0,5.9,2.1,virginica 555 | 6.3,2.9,5.6,1.8,virginica 556 | 6.5,3.0,5.8,2.2,virginica 557 | 7.6,3.0,6.6,2.1,virginica 558 | 4.9,2.5,4.5,1.7,virginica 559 | 7.3,2.9,6.3,1.8,virginica 560 | 6.7,2.5,5.8,1.8,virginica 561 | 7.2,3.6,6.1,2.5,virginica 562 | 6.5,3.2,5.1,2.0,virginica 563 | 6.4,2.7,5.3,1.9,virginica 564 | 6.8,3.0,5.5,2.1,virginica 565 | 5.7,2.5,5.0,2.0,virginica 566 | 5.8,2.8,5.1,2.4,virginica 567 | 6.4,3.2,5.3,2.3,virginica 568 | 6.5,3.0,5.5,1.8,virginica 569 | 7.7,3.8,6.7,2.2,virginica 570 | 7.7,2.6,6.9,2.3,virginica 571 | 6.0,2.2,5.0,1.5,virginica 572 | 6.9,3.2,5.7,2.3,virginica 573 | 5.6,2.8,4.9,2.0,virginica 574 | 7.7,2.8,6.7,2.0,virginica 575 | 6.3,2.7,4.9,1.8,virginica 576 | 6.7,3.3,5.7,2.1,virginica 577 | 7.2,3.2,6.0,1.8,virginica 578 | 6.2,2.8,4.8,1.8,virginica 579 | 6.1,3.0,4.9,1.8,virginica 580 | 6.4,2.8,5.6,2.1,virginica 581 | 7.2,3.0,5.8,1.6,virginica 582 | 7.4,2.8,6.1,1.9,virginica 583 | 7.9,3.8,6.4,2.0,virginica 584 | 6.4,2.8,5.6,2.2,virginica 585 | 6.3,2.8,5.1,1.5,virginica 586 | 6.1,2.6,5.6,1.4,virginica 587 | 7.7,3.0,6.1,2.3,virginica 588 | 6.3,3.4,5.6,2.4,virginica 589 | 6.4,3.1,5.5,1.8,virginica 590 | 6.0,3.0,4.8,1.8,virginica 591 | 6.9,3.1,5.4,2.1,virginica 592 | 6.7,3.1,5.6,2.4,virginica 593 | 6.9,3.1,5.1,2.3,virginica 594 | 5.8,2.7,5.1,1.9,virginica 595 | 6.8,3.2,5.9,2.3,virginica 596 | 6.7,3.3,5.7,2.5,virginica 597 | 6.7,3.0,5.2,2.3,virginica 598 | 6.3,2.5,5.0,1.9,virginica 599 | 6.5,3.0,5.2,2.0,virginica 600 | 6.2,3.4,5.4,2.3,virginica 601 | 5.9,3.0,5.1,1.8,virginica 602 | 5.1,3.5,1.4,0.2,setosa 603 | 4.9,3.0,1.4,0.2,setosa 604 | 4.7,3.2,1.3,0.2,setosa 605 | 4.6,3.1,1.5,0.2,setosa 606 | 5.0,3.6,1.4,0.2,setosa 607 | 5.4,3.9,1.7,0.4,setosa 608 | 4.6,3.4,1.4,0.3,setosa 609 | 5.0,3.4,1.5,0.2,setosa 610 | 4.4,2.9,1.4,0.2,setosa 611 | 4.9,3.1,1.5,0.1,setosa 612 | 5.4,3.7,1.5,0.2,setosa 613 | 4.8,3.4,1.6,0.2,setosa 614 | 4.8,3.0,1.4,0.1,setosa 615 | 4.3,3.0,1.1,0.1,setosa 616 | 5.8,4.0,1.2,0.2,setosa 617 | 5.7,4.4,1.5,0.4,setosa 618 | 5.4,3.9,1.3,0.4,setosa 619 | 5.1,3.5,1.4,0.3,setosa 620 | 5.7,3.8,1.7,0.3,setosa 621 | 5.1,3.8,1.5,0.3,setosa 622 | 5.4,3.4,1.7,0.2,setosa 623 | 5.1,3.7,1.5,0.4,setosa 624 | 4.6,3.6,1.0,0.2,setosa 625 | 5.1,3.3,1.7,0.5,setosa 626 | 4.8,3.4,1.9,0.2,setosa 627 | 5.0,3.0,1.6,0.2,setosa 628 | 5.0,3.4,1.6,0.4,setosa 629 | 5.2,3.5,1.5,0.2,setosa 630 | 5.2,3.4,1.4,0.2,setosa 631 | 4.7,3.2,1.6,0.2,setosa 632 | 4.8,3.1,1.6,0.2,setosa 633 | 5.4,3.4,1.5,0.4,setosa 634 | 5.2,4.1,1.5,0.1,setosa 635 | 5.5,4.2,1.4,0.2,setosa 636 | 4.9,3.1,1.5,0.1,setosa 637 | 5.0,3.2,1.2,0.2,setosa 638 | 5.5,3.5,1.3,0.2,setosa 639 | 4.9,3.1,1.5,0.1,setosa 640 | 4.4,3.0,1.3,0.2,setosa 641 | 5.1,3.4,1.5,0.2,setosa 642 | 5.0,3.5,1.3,0.3,setosa 643 | 4.5,2.3,1.3,0.3,setosa 644 | 4.4,3.2,1.3,0.2,setosa 645 | 5.0,3.5,1.6,0.6,setosa 646 | 5.1,3.8,1.9,0.4,setosa 647 | 4.8,3.0,1.4,0.3,setosa 648 | 5.1,3.8,1.6,0.2,setosa 649 | 4.6,3.2,1.4,0.2,setosa 650 | 5.3,3.7,1.5,0.2,setosa 651 | 5.0,3.3,1.4,0.2,setosa 652 | 7.0,3.2,4.7,1.4,versicolor 653 | 6.4,3.2,4.5,1.5,versicolor 654 | 6.9,3.1,4.9,1.5,versicolor 655 | 5.5,2.3,4.0,1.3,versicolor 656 | 6.5,2.8,4.6,1.5,versicolor 657 | 5.7,2.8,4.5,1.3,versicolor 658 | 6.3,3.3,4.7,1.6,versicolor 659 | 4.9,2.4,3.3,1.0,versicolor 660 | 6.6,2.9,4.6,1.3,versicolor 661 | 5.2,2.7,3.9,1.4,versicolor 662 | 5.0,2.0,3.5,1.0,versicolor 663 | 5.9,3.0,4.2,1.5,versicolor 664 | 6.0,2.2,4.0,1.0,versicolor 665 | 6.1,2.9,4.7,1.4,versicolor 666 | 5.6,2.9,3.6,1.3,versicolor 667 | 6.7,3.1,4.4,1.4,versicolor 668 | 5.6,3.0,4.5,1.5,versicolor 669 | 5.8,2.7,4.1,1.0,versicolor 670 | 6.2,2.2,4.5,1.5,versicolor 671 | 5.6,2.5,3.9,1.1,versicolor 672 | 5.9,3.2,4.8,1.8,versicolor 673 | 6.1,2.8,4.0,1.3,versicolor 674 | 6.3,2.5,4.9,1.5,versicolor 675 | 6.1,2.8,4.7,1.2,versicolor 676 | 6.4,2.9,4.3,1.3,versicolor 677 | 6.6,3.0,4.4,1.4,versicolor 678 | 6.8,2.8,4.8,1.4,versicolor 679 | 6.7,3.0,5.0,1.7,versicolor 680 | 6.0,2.9,4.5,1.5,versicolor 681 | 5.7,2.6,3.5,1.0,versicolor 682 | 5.5,2.4,3.8,1.1,versicolor 683 | 5.5,2.4,3.7,1.0,versicolor 684 | 5.8,2.7,3.9,1.2,versicolor 685 | 6.0,2.7,5.1,1.6,versicolor 686 | 5.4,3.0,4.5,1.5,versicolor 687 | 6.0,3.4,4.5,1.6,versicolor 688 | 6.7,3.1,4.7,1.5,versicolor 689 | 6.3,2.3,4.4,1.3,versicolor 690 | 5.6,3.0,4.1,1.3,versicolor 691 | 5.5,2.5,4.0,1.3,versicolor 692 | 5.5,2.6,4.4,1.2,versicolor 693 | 6.1,3.0,4.6,1.4,versicolor 694 | 5.8,2.6,4.0,1.2,versicolor 695 | 5.0,2.3,3.3,1.0,versicolor 696 | 5.6,2.7,4.2,1.3,versicolor 697 | 5.7,3.0,4.2,1.2,versicolor 698 | 5.7,2.9,4.2,1.3,versicolor 699 | 6.2,2.9,4.3,1.3,versicolor 700 | 5.1,2.5,3.0,1.1,versicolor 701 | 5.7,2.8,4.1,1.3,versicolor 702 | 6.3,3.3,6.0,2.5,virginica 703 | 5.8,2.7,5.1,1.9,virginica 704 | 7.1,3.0,5.9,2.1,virginica 705 | 6.3,2.9,5.6,1.8,virginica 706 | 6.5,3.0,5.8,2.2,virginica 707 | 7.6,3.0,6.6,2.1,virginica 708 | 4.9,2.5,4.5,1.7,virginica 709 | 7.3,2.9,6.3,1.8,virginica 710 | 6.7,2.5,5.8,1.8,virginica 711 | 7.2,3.6,6.1,2.5,virginica 712 | 6.5,3.2,5.1,2.0,virginica 713 | 6.4,2.7,5.3,1.9,virginica 714 | 6.8,3.0,5.5,2.1,virginica 715 | 5.7,2.5,5.0,2.0,virginica 716 | 5.8,2.8,5.1,2.4,virginica 717 | 6.4,3.2,5.3,2.3,virginica 718 | 6.5,3.0,5.5,1.8,virginica 719 | 7.7,3.8,6.7,2.2,virginica 720 | 7.7,2.6,6.9,2.3,virginica 721 | 6.0,2.2,5.0,1.5,virginica 722 | 6.9,3.2,5.7,2.3,virginica 723 | 5.6,2.8,4.9,2.0,virginica 724 | 7.7,2.8,6.7,2.0,virginica 725 | 6.3,2.7,4.9,1.8,virginica 726 | 6.7,3.3,5.7,2.1,virginica 727 | 7.2,3.2,6.0,1.8,virginica 728 | 6.2,2.8,4.8,1.8,virginica 729 | 6.1,3.0,4.9,1.8,virginica 730 | 6.4,2.8,5.6,2.1,virginica 731 | 7.2,3.0,5.8,1.6,virginica 732 | 7.4,2.8,6.1,1.9,virginica 733 | 7.9,3.8,6.4,2.0,virginica 734 | 6.4,2.8,5.6,2.2,virginica 735 | 6.3,2.8,5.1,1.5,virginica 736 | 6.1,2.6,5.6,1.4,virginica 737 | 7.7,3.0,6.1,2.3,virginica 738 | 6.3,3.4,5.6,2.4,virginica 739 | 6.4,3.1,5.5,1.8,virginica 740 | 6.0,3.0,4.8,1.8,virginica 741 | 6.9,3.1,5.4,2.1,virginica 742 | 6.7,3.1,5.6,2.4,virginica 743 | 6.9,3.1,5.1,2.3,virginica 744 | 5.8,2.7,5.1,1.9,virginica 745 | 6.8,3.2,5.9,2.3,virginica 746 | 6.7,3.3,5.7,2.5,virginica 747 | 6.7,3.0,5.2,2.3,virginica 748 | 6.3,2.5,5.0,1.9,virginica 749 | 6.5,3.0,5.2,2.0,virginica 750 | 6.2,3.4,5.4,2.3,virginica 751 | 5.9,3.0,5.1,1.8,virginica 752 | 5.1,3.5,1.4,0.2,setosa 753 | 4.9,3.0,1.4,0.2,setosa 754 | 4.7,3.2,1.3,0.2,setosa 755 | 4.6,3.1,1.5,0.2,setosa 756 | 5.0,3.6,1.4,0.2,setosa 757 | 5.4,3.9,1.7,0.4,setosa 758 | 4.6,3.4,1.4,0.3,setosa 759 | 5.0,3.4,1.5,0.2,setosa 760 | 4.4,2.9,1.4,0.2,setosa 761 | 4.9,3.1,1.5,0.1,setosa 762 | 5.4,3.7,1.5,0.2,setosa 763 | 4.8,3.4,1.6,0.2,setosa 764 | 4.8,3.0,1.4,0.1,setosa 765 | 4.3,3.0,1.1,0.1,setosa 766 | 5.8,4.0,1.2,0.2,setosa 767 | 5.7,4.4,1.5,0.4,setosa 768 | 5.4,3.9,1.3,0.4,setosa 769 | 5.1,3.5,1.4,0.3,setosa 770 | 5.7,3.8,1.7,0.3,setosa 771 | 5.1,3.8,1.5,0.3,setosa 772 | 5.4,3.4,1.7,0.2,setosa 773 | 5.1,3.7,1.5,0.4,setosa 774 | 4.6,3.6,1.0,0.2,setosa 775 | 5.1,3.3,1.7,0.5,setosa 776 | 4.8,3.4,1.9,0.2,setosa 777 | 5.0,3.0,1.6,0.2,setosa 778 | 5.0,3.4,1.6,0.4,setosa 779 | 5.2,3.5,1.5,0.2,setosa 780 | 5.2,3.4,1.4,0.2,setosa 781 | 4.7,3.2,1.6,0.2,setosa 782 | 4.8,3.1,1.6,0.2,setosa 783 | 5.4,3.4,1.5,0.4,setosa 784 | 5.2,4.1,1.5,0.1,setosa 785 | 5.5,4.2,1.4,0.2,setosa 786 | 4.9,3.1,1.5,0.1,setosa 787 | 5.0,3.2,1.2,0.2,setosa 788 | 5.5,3.5,1.3,0.2,setosa 789 | 4.9,3.1,1.5,0.1,setosa 790 | 4.4,3.0,1.3,0.2,setosa 791 | 5.1,3.4,1.5,0.2,setosa 792 | 5.0,3.5,1.3,0.3,setosa 793 | 4.5,2.3,1.3,0.3,setosa 794 | 4.4,3.2,1.3,0.2,setosa 795 | 5.0,3.5,1.6,0.6,setosa 796 | 5.1,3.8,1.9,0.4,setosa 797 | 4.8,3.0,1.4,0.3,setosa 798 | 5.1,3.8,1.6,0.2,setosa 799 | 4.6,3.2,1.4,0.2,setosa 800 | 5.3,3.7,1.5,0.2,setosa 801 | 5.0,3.3,1.4,0.2,setosa 802 | 7.0,3.2,4.7,1.4,versicolor 803 | 6.4,3.2,4.5,1.5,versicolor 804 | 6.9,3.1,4.9,1.5,versicolor 805 | 5.5,2.3,4.0,1.3,versicolor 806 | 6.5,2.8,4.6,1.5,versicolor 807 | 5.7,2.8,4.5,1.3,versicolor 808 | 6.3,3.3,4.7,1.6,versicolor 809 | 4.9,2.4,3.3,1.0,versicolor 810 | 6.6,2.9,4.6,1.3,versicolor 811 | 5.2,2.7,3.9,1.4,versicolor 812 | 5.0,2.0,3.5,1.0,versicolor 813 | 5.9,3.0,4.2,1.5,versicolor 814 | 6.0,2.2,4.0,1.0,versicolor 815 | 6.1,2.9,4.7,1.4,versicolor 816 | 5.6,2.9,3.6,1.3,versicolor 817 | 6.7,3.1,4.4,1.4,versicolor 818 | 5.6,3.0,4.5,1.5,versicolor 819 | 5.8,2.7,4.1,1.0,versicolor 820 | 6.2,2.2,4.5,1.5,versicolor 821 | 5.6,2.5,3.9,1.1,versicolor 822 | 5.9,3.2,4.8,1.8,versicolor 823 | 6.1,2.8,4.0,1.3,versicolor 824 | 6.3,2.5,4.9,1.5,versicolor 825 | 6.1,2.8,4.7,1.2,versicolor 826 | 6.4,2.9,4.3,1.3,versicolor 827 | 6.6,3.0,4.4,1.4,versicolor 828 | 6.8,2.8,4.8,1.4,versicolor 829 | 6.7,3.0,5.0,1.7,versicolor 830 | 6.0,2.9,4.5,1.5,versicolor 831 | 5.7,2.6,3.5,1.0,versicolor 832 | 5.5,2.4,3.8,1.1,versicolor 833 | 5.5,2.4,3.7,1.0,versicolor 834 | 5.8,2.7,3.9,1.2,versicolor 835 | 6.0,2.7,5.1,1.6,versicolor 836 | 5.4,3.0,4.5,1.5,versicolor 837 | 6.0,3.4,4.5,1.6,versicolor 838 | 6.7,3.1,4.7,1.5,versicolor 839 | 6.3,2.3,4.4,1.3,versicolor 840 | 5.6,3.0,4.1,1.3,versicolor 841 | 5.5,2.5,4.0,1.3,versicolor 842 | 5.5,2.6,4.4,1.2,versicolor 843 | 6.1,3.0,4.6,1.4,versicolor 844 | 5.8,2.6,4.0,1.2,versicolor 845 | 5.0,2.3,3.3,1.0,versicolor 846 | 5.6,2.7,4.2,1.3,versicolor 847 | 5.7,3.0,4.2,1.2,versicolor 848 | 5.7,2.9,4.2,1.3,versicolor 849 | 6.2,2.9,4.3,1.3,versicolor 850 | 5.1,2.5,3.0,1.1,versicolor 851 | 5.7,2.8,4.1,1.3,versicolor 852 | 6.3,3.3,6.0,2.5,virginica 853 | 5.8,2.7,5.1,1.9,virginica 854 | 7.1,3.0,5.9,2.1,virginica 855 | 6.3,2.9,5.6,1.8,virginica 856 | 6.5,3.0,5.8,2.2,virginica 857 | 7.6,3.0,6.6,2.1,virginica 858 | 4.9,2.5,4.5,1.7,virginica 859 | 7.3,2.9,6.3,1.8,virginica 860 | 6.7,2.5,5.8,1.8,virginica 861 | 7.2,3.6,6.1,2.5,virginica 862 | 6.5,3.2,5.1,2.0,virginica 863 | 6.4,2.7,5.3,1.9,virginica 864 | 6.8,3.0,5.5,2.1,virginica 865 | 5.7,2.5,5.0,2.0,virginica 866 | 5.8,2.8,5.1,2.4,virginica 867 | 6.4,3.2,5.3,2.3,virginica 868 | 6.5,3.0,5.5,1.8,virginica 869 | 7.7,3.8,6.7,2.2,virginica 870 | 7.7,2.6,6.9,2.3,virginica 871 | 6.0,2.2,5.0,1.5,virginica 872 | 6.9,3.2,5.7,2.3,virginica 873 | 5.6,2.8,4.9,2.0,virginica 874 | 7.7,2.8,6.7,2.0,virginica 875 | 6.3,2.7,4.9,1.8,virginica 876 | 6.7,3.3,5.7,2.1,virginica 877 | 7.2,3.2,6.0,1.8,virginica 878 | 6.2,2.8,4.8,1.8,virginica 879 | 6.1,3.0,4.9,1.8,virginica 880 | 6.4,2.8,5.6,2.1,virginica 881 | 7.2,3.0,5.8,1.6,virginica 882 | 7.4,2.8,6.1,1.9,virginica 883 | 7.9,3.8,6.4,2.0,virginica 884 | 6.4,2.8,5.6,2.2,virginica 885 | 6.3,2.8,5.1,1.5,virginica 886 | 6.1,2.6,5.6,1.4,virginica 887 | 7.7,3.0,6.1,2.3,virginica 888 | 6.3,3.4,5.6,2.4,virginica 889 | 6.4,3.1,5.5,1.8,virginica 890 | 6.0,3.0,4.8,1.8,virginica 891 | 6.9,3.1,5.4,2.1,virginica 892 | 6.7,3.1,5.6,2.4,virginica 893 | 6.9,3.1,5.1,2.3,virginica 894 | 5.8,2.7,5.1,1.9,virginica 895 | 6.8,3.2,5.9,2.3,virginica 896 | 6.7,3.3,5.7,2.5,virginica 897 | 6.7,3.0,5.2,2.3,virginica 898 | 6.3,2.5,5.0,1.9,virginica 899 | 6.5,3.0,5.2,2.0,virginica 900 | 6.2,3.4,5.4,2.3,virginica 901 | 5.9,3.0,5.1,1.8,virginica 902 | 5.1,3.5,1.4,0.2,setosa 903 | 4.9,3.0,1.4,0.2,setosa 904 | 4.7,3.2,1.3,0.2,setosa 905 | 4.6,3.1,1.5,0.2,setosa 906 | 5.0,3.6,1.4,0.2,setosa 907 | 5.4,3.9,1.7,0.4,setosa 908 | 4.6,3.4,1.4,0.3,setosa 909 | 5.0,3.4,1.5,0.2,setosa 910 | 4.4,2.9,1.4,0.2,setosa 911 | 4.9,3.1,1.5,0.1,setosa 912 | 5.4,3.7,1.5,0.2,setosa 913 | 4.8,3.4,1.6,0.2,setosa 914 | 4.8,3.0,1.4,0.1,setosa 915 | 4.3,3.0,1.1,0.1,setosa 916 | 5.8,4.0,1.2,0.2,setosa 917 | 5.7,4.4,1.5,0.4,setosa 918 | 5.4,3.9,1.3,0.4,setosa 919 | 5.1,3.5,1.4,0.3,setosa 920 | 5.7,3.8,1.7,0.3,setosa 921 | 5.1,3.8,1.5,0.3,setosa 922 | 5.4,3.4,1.7,0.2,setosa 923 | 5.1,3.7,1.5,0.4,setosa 924 | 4.6,3.6,1.0,0.2,setosa 925 | 5.1,3.3,1.7,0.5,setosa 926 | 4.8,3.4,1.9,0.2,setosa 927 | 5.0,3.0,1.6,0.2,setosa 928 | 5.0,3.4,1.6,0.4,setosa 929 | 5.2,3.5,1.5,0.2,setosa 930 | 5.2,3.4,1.4,0.2,setosa 931 | 4.7,3.2,1.6,0.2,setosa 932 | 4.8,3.1,1.6,0.2,setosa 933 | 5.4,3.4,1.5,0.4,setosa 934 | 5.2,4.1,1.5,0.1,setosa 935 | 5.5,4.2,1.4,0.2,setosa 936 | 4.9,3.1,1.5,0.1,setosa 937 | 5.0,3.2,1.2,0.2,setosa 938 | 5.5,3.5,1.3,0.2,setosa 939 | 4.9,3.1,1.5,0.1,setosa 940 | 4.4,3.0,1.3,0.2,setosa 941 | 5.1,3.4,1.5,0.2,setosa 942 | 5.0,3.5,1.3,0.3,setosa 943 | 4.5,2.3,1.3,0.3,setosa 944 | 4.4,3.2,1.3,0.2,setosa 945 | 5.0,3.5,1.6,0.6,setosa 946 | 5.1,3.8,1.9,0.4,setosa 947 | 4.8,3.0,1.4,0.3,setosa 948 | 5.1,3.8,1.6,0.2,setosa 949 | 4.6,3.2,1.4,0.2,setosa 950 | 5.3,3.7,1.5,0.2,setosa 951 | 5.0,3.3,1.4,0.2,setosa 952 | 7.0,3.2,4.7,1.4,versicolor 953 | 6.4,3.2,4.5,1.5,versicolor 954 | 6.9,3.1,4.9,1.5,versicolor 955 | 5.5,2.3,4.0,1.3,versicolor 956 | 6.5,2.8,4.6,1.5,versicolor 957 | 5.7,2.8,4.5,1.3,versicolor 958 | 6.3,3.3,4.7,1.6,versicolor 959 | 4.9,2.4,3.3,1.0,versicolor 960 | 6.6,2.9,4.6,1.3,versicolor 961 | 5.2,2.7,3.9,1.4,versicolor 962 | 5.0,2.0,3.5,1.0,versicolor 963 | 5.9,3.0,4.2,1.5,versicolor 964 | 6.0,2.2,4.0,1.0,versicolor 965 | 6.1,2.9,4.7,1.4,versicolor 966 | 5.6,2.9,3.6,1.3,versicolor 967 | 6.7,3.1,4.4,1.4,versicolor 968 | 5.6,3.0,4.5,1.5,versicolor 969 | 5.8,2.7,4.1,1.0,versicolor 970 | 6.2,2.2,4.5,1.5,versicolor 971 | 5.6,2.5,3.9,1.1,versicolor 972 | 5.9,3.2,4.8,1.8,versicolor 973 | 6.1,2.8,4.0,1.3,versicolor 974 | 6.3,2.5,4.9,1.5,versicolor 975 | 6.1,2.8,4.7,1.2,versicolor 976 | 6.4,2.9,4.3,1.3,versicolor 977 | 6.6,3.0,4.4,1.4,versicolor 978 | 6.8,2.8,4.8,1.4,versicolor 979 | 6.7,3.0,5.0,1.7,versicolor 980 | 6.0,2.9,4.5,1.5,versicolor 981 | 5.7,2.6,3.5,1.0,versicolor 982 | 5.5,2.4,3.8,1.1,versicolor 983 | 5.5,2.4,3.7,1.0,versicolor 984 | 5.8,2.7,3.9,1.2,versicolor 985 | 6.0,2.7,5.1,1.6,versicolor 986 | 5.4,3.0,4.5,1.5,versicolor 987 | 6.0,3.4,4.5,1.6,versicolor 988 | 6.7,3.1,4.7,1.5,versicolor 989 | 6.3,2.3,4.4,1.3,versicolor 990 | 5.6,3.0,4.1,1.3,versicolor 991 | 5.5,2.5,4.0,1.3,versicolor 992 | 5.5,2.6,4.4,1.2,versicolor 993 | 6.1,3.0,4.6,1.4,versicolor 994 | 5.8,2.6,4.0,1.2,versicolor 995 | 5.0,2.3,3.3,1.0,versicolor 996 | 5.6,2.7,4.2,1.3,versicolor 997 | 5.7,3.0,4.2,1.2,versicolor 998 | 5.7,2.9,4.2,1.3,versicolor 999 | 6.2,2.9,4.3,1.3,versicolor 1000 | 5.1,2.5,3.0,1.1,versicolor 1001 | 5.7,2.8,4.1,1.3,versicolor 1002 | 6.3,3.3,6.0,2.5,virginica 1003 | 5.8,2.7,5.1,1.9,virginica 1004 | 7.1,3.0,5.9,2.1,virginica 1005 | 6.3,2.9,5.6,1.8,virginica 1006 | 6.5,3.0,5.8,2.2,virginica 1007 | 7.6,3.0,6.6,2.1,virginica 1008 | 4.9,2.5,4.5,1.7,virginica 1009 | 7.3,2.9,6.3,1.8,virginica 1010 | 6.7,2.5,5.8,1.8,virginica 1011 | 7.2,3.6,6.1,2.5,virginica 1012 | 6.5,3.2,5.1,2.0,virginica 1013 | 6.4,2.7,5.3,1.9,virginica 1014 | 6.8,3.0,5.5,2.1,virginica 1015 | 5.7,2.5,5.0,2.0,virginica 1016 | 5.8,2.8,5.1,2.4,virginica 1017 | 6.4,3.2,5.3,2.3,virginica 1018 | 6.5,3.0,5.5,1.8,virginica 1019 | 7.7,3.8,6.7,2.2,virginica 1020 | 7.7,2.6,6.9,2.3,virginica 1021 | 6.0,2.2,5.0,1.5,virginica 1022 | 6.9,3.2,5.7,2.3,virginica 1023 | 5.6,2.8,4.9,2.0,virginica 1024 | 7.7,2.8,6.7,2.0,virginica 1025 | 6.3,2.7,4.9,1.8,virginica 1026 | 6.7,3.3,5.7,2.1,virginica 1027 | 7.2,3.2,6.0,1.8,virginica 1028 | 6.2,2.8,4.8,1.8,virginica 1029 | 6.1,3.0,4.9,1.8,virginica 1030 | 6.4,2.8,5.6,2.1,virginica 1031 | 7.2,3.0,5.8,1.6,virginica 1032 | 7.4,2.8,6.1,1.9,virginica 1033 | 7.9,3.8,6.4,2.0,virginica 1034 | 6.4,2.8,5.6,2.2,virginica 1035 | 6.3,2.8,5.1,1.5,virginica 1036 | 6.1,2.6,5.6,1.4,virginica 1037 | 7.7,3.0,6.1,2.3,virginica 1038 | 6.3,3.4,5.6,2.4,virginica 1039 | 6.4,3.1,5.5,1.8,virginica 1040 | 6.0,3.0,4.8,1.8,virginica 1041 | 6.9,3.1,5.4,2.1,virginica 1042 | 6.7,3.1,5.6,2.4,virginica 1043 | 6.9,3.1,5.1,2.3,virginica 1044 | 5.8,2.7,5.1,1.9,virginica 1045 | 6.8,3.2,5.9,2.3,virginica 1046 | 6.7,3.3,5.7,2.5,virginica 1047 | 6.7,3.0,5.2,2.3,virginica 1048 | 6.3,2.5,5.0,1.9,virginica 1049 | 6.5,3.0,5.2,2.0,virginica 1050 | 6.2,3.4,5.4,2.3,virginica 1051 | 5.9,3.0,5.1,1.8,virginica 1052 | 5.1,3.5,1.4,0.2,setosa 1053 | 4.9,3.0,1.4,0.2,setosa 1054 | 4.7,3.2,1.3,0.2,setosa 1055 | 4.6,3.1,1.5,0.2,setosa 1056 | 5.0,3.6,1.4,0.2,setosa 1057 | 5.4,3.9,1.7,0.4,setosa 1058 | 4.6,3.4,1.4,0.3,setosa 1059 | 5.0,3.4,1.5,0.2,setosa 1060 | 4.4,2.9,1.4,0.2,setosa 1061 | 4.9,3.1,1.5,0.1,setosa 1062 | 5.4,3.7,1.5,0.2,setosa 1063 | 4.8,3.4,1.6,0.2,setosa 1064 | 4.8,3.0,1.4,0.1,setosa 1065 | 4.3,3.0,1.1,0.1,setosa 1066 | 5.8,4.0,1.2,0.2,setosa 1067 | 5.7,4.4,1.5,0.4,setosa 1068 | 5.4,3.9,1.3,0.4,setosa 1069 | 5.1,3.5,1.4,0.3,setosa 1070 | 5.7,3.8,1.7,0.3,setosa 1071 | 5.1,3.8,1.5,0.3,setosa 1072 | 5.4,3.4,1.7,0.2,setosa 1073 | 5.1,3.7,1.5,0.4,setosa 1074 | 4.6,3.6,1.0,0.2,setosa 1075 | 5.1,3.3,1.7,0.5,setosa 1076 | 4.8,3.4,1.9,0.2,setosa 1077 | 5.0,3.0,1.6,0.2,setosa 1078 | 5.0,3.4,1.6,0.4,setosa 1079 | 5.2,3.5,1.5,0.2,setosa 1080 | 5.2,3.4,1.4,0.2,setosa 1081 | 4.7,3.2,1.6,0.2,setosa 1082 | 4.8,3.1,1.6,0.2,setosa 1083 | 5.4,3.4,1.5,0.4,setosa 1084 | 5.2,4.1,1.5,0.1,setosa 1085 | 5.5,4.2,1.4,0.2,setosa 1086 | 4.9,3.1,1.5,0.1,setosa 1087 | 5.0,3.2,1.2,0.2,setosa 1088 | 5.5,3.5,1.3,0.2,setosa 1089 | 4.9,3.1,1.5,0.1,setosa 1090 | 4.4,3.0,1.3,0.2,setosa 1091 | 5.1,3.4,1.5,0.2,setosa 1092 | 5.0,3.5,1.3,0.3,setosa 1093 | 4.5,2.3,1.3,0.3,setosa 1094 | 4.4,3.2,1.3,0.2,setosa 1095 | 5.0,3.5,1.6,0.6,setosa 1096 | 5.1,3.8,1.9,0.4,setosa 1097 | 4.8,3.0,1.4,0.3,setosa 1098 | 5.1,3.8,1.6,0.2,setosa 1099 | 4.6,3.2,1.4,0.2,setosa 1100 | 5.3,3.7,1.5,0.2,setosa 1101 | 5.0,3.3,1.4,0.2,setosa 1102 | 7.0,3.2,4.7,1.4,versicolor 1103 | 6.4,3.2,4.5,1.5,versicolor 1104 | 6.9,3.1,4.9,1.5,versicolor 1105 | 5.5,2.3,4.0,1.3,versicolor 1106 | 6.5,2.8,4.6,1.5,versicolor 1107 | 5.7,2.8,4.5,1.3,versicolor 1108 | 6.3,3.3,4.7,1.6,versicolor 1109 | 4.9,2.4,3.3,1.0,versicolor 1110 | 6.6,2.9,4.6,1.3,versicolor 1111 | 5.2,2.7,3.9,1.4,versicolor 1112 | 5.0,2.0,3.5,1.0,versicolor 1113 | 5.9,3.0,4.2,1.5,versicolor 1114 | 6.0,2.2,4.0,1.0,versicolor 1115 | 6.1,2.9,4.7,1.4,versicolor 1116 | 5.6,2.9,3.6,1.3,versicolor 1117 | 6.7,3.1,4.4,1.4,versicolor 1118 | 5.6,3.0,4.5,1.5,versicolor 1119 | 5.8,2.7,4.1,1.0,versicolor 1120 | 6.2,2.2,4.5,1.5,versicolor 1121 | 5.6,2.5,3.9,1.1,versicolor 1122 | 5.9,3.2,4.8,1.8,versicolor 1123 | 6.1,2.8,4.0,1.3,versicolor 1124 | 6.3,2.5,4.9,1.5,versicolor 1125 | 6.1,2.8,4.7,1.2,versicolor 1126 | 6.4,2.9,4.3,1.3,versicolor 1127 | 6.6,3.0,4.4,1.4,versicolor 1128 | 6.8,2.8,4.8,1.4,versicolor 1129 | 6.7,3.0,5.0,1.7,versicolor 1130 | 6.0,2.9,4.5,1.5,versicolor 1131 | 5.7,2.6,3.5,1.0,versicolor 1132 | 5.5,2.4,3.8,1.1,versicolor 1133 | 5.5,2.4,3.7,1.0,versicolor 1134 | 5.8,2.7,3.9,1.2,versicolor 1135 | 6.0,2.7,5.1,1.6,versicolor 1136 | 5.4,3.0,4.5,1.5,versicolor 1137 | 6.0,3.4,4.5,1.6,versicolor 1138 | 6.7,3.1,4.7,1.5,versicolor 1139 | 6.3,2.3,4.4,1.3,versicolor 1140 | 5.6,3.0,4.1,1.3,versicolor 1141 | 5.5,2.5,4.0,1.3,versicolor 1142 | 5.5,2.6,4.4,1.2,versicolor 1143 | 6.1,3.0,4.6,1.4,versicolor 1144 | 5.8,2.6,4.0,1.2,versicolor 1145 | 5.0,2.3,3.3,1.0,versicolor 1146 | 5.6,2.7,4.2,1.3,versicolor 1147 | 5.7,3.0,4.2,1.2,versicolor 1148 | 5.7,2.9,4.2,1.3,versicolor 1149 | 6.2,2.9,4.3,1.3,versicolor 1150 | 5.1,2.5,3.0,1.1,versicolor 1151 | 5.7,2.8,4.1,1.3,versicolor 1152 | 6.3,3.3,6.0,2.5,virginica 1153 | 5.8,2.7,5.1,1.9,virginica 1154 | 7.1,3.0,5.9,2.1,virginica 1155 | 6.3,2.9,5.6,1.8,virginica 1156 | 6.5,3.0,5.8,2.2,virginica 1157 | 7.6,3.0,6.6,2.1,virginica 1158 | 4.9,2.5,4.5,1.7,virginica 1159 | 7.3,2.9,6.3,1.8,virginica 1160 | 6.7,2.5,5.8,1.8,virginica 1161 | 7.2,3.6,6.1,2.5,virginica 1162 | 6.5,3.2,5.1,2.0,virginica 1163 | 6.4,2.7,5.3,1.9,virginica 1164 | 6.8,3.0,5.5,2.1,virginica 1165 | 5.7,2.5,5.0,2.0,virginica 1166 | 5.8,2.8,5.1,2.4,virginica 1167 | 6.4,3.2,5.3,2.3,virginica 1168 | 6.5,3.0,5.5,1.8,virginica 1169 | 7.7,3.8,6.7,2.2,virginica 1170 | 7.7,2.6,6.9,2.3,virginica 1171 | 6.0,2.2,5.0,1.5,virginica 1172 | 6.9,3.2,5.7,2.3,virginica 1173 | 5.6,2.8,4.9,2.0,virginica 1174 | 7.7,2.8,6.7,2.0,virginica 1175 | 6.3,2.7,4.9,1.8,virginica 1176 | 6.7,3.3,5.7,2.1,virginica 1177 | 7.2,3.2,6.0,1.8,virginica 1178 | 6.2,2.8,4.8,1.8,virginica 1179 | 6.1,3.0,4.9,1.8,virginica 1180 | 6.4,2.8,5.6,2.1,virginica 1181 | 7.2,3.0,5.8,1.6,virginica 1182 | 7.4,2.8,6.1,1.9,virginica 1183 | 7.9,3.8,6.4,2.0,virginica 1184 | 6.4,2.8,5.6,2.2,virginica 1185 | 6.3,2.8,5.1,1.5,virginica 1186 | 6.1,2.6,5.6,1.4,virginica 1187 | 7.7,3.0,6.1,2.3,virginica 1188 | 6.3,3.4,5.6,2.4,virginica 1189 | 6.4,3.1,5.5,1.8,virginica 1190 | 6.0,3.0,4.8,1.8,virginica 1191 | 6.9,3.1,5.4,2.1,virginica 1192 | 6.7,3.1,5.6,2.4,virginica 1193 | 6.9,3.1,5.1,2.3,virginica 1194 | 5.8,2.7,5.1,1.9,virginica 1195 | 6.8,3.2,5.9,2.3,virginica 1196 | 6.7,3.3,5.7,2.5,virginica 1197 | 6.7,3.0,5.2,2.3,virginica 1198 | 6.3,2.5,5.0,1.9,virginica 1199 | 6.5,3.0,5.2,2.0,virginica 1200 | 6.2,3.4,5.4,2.3,virginica 1201 | 5.9,3.0,5.1,1.8,virginica 1202 | 5.1,3.5,1.4,0.2,setosa 1203 | 4.9,3.0,1.4,0.2,setosa 1204 | 4.7,3.2,1.3,0.2,setosa 1205 | 4.6,3.1,1.5,0.2,setosa 1206 | 5.0,3.6,1.4,0.2,setosa 1207 | 5.4,3.9,1.7,0.4,setosa 1208 | 4.6,3.4,1.4,0.3,setosa 1209 | 5.0,3.4,1.5,0.2,setosa 1210 | 4.4,2.9,1.4,0.2,setosa 1211 | 4.9,3.1,1.5,0.1,setosa 1212 | 5.4,3.7,1.5,0.2,setosa 1213 | 4.8,3.4,1.6,0.2,setosa 1214 | 4.8,3.0,1.4,0.1,setosa 1215 | 4.3,3.0,1.1,0.1,setosa 1216 | 5.8,4.0,1.2,0.2,setosa 1217 | 5.7,4.4,1.5,0.4,setosa 1218 | 5.4,3.9,1.3,0.4,setosa 1219 | 5.1,3.5,1.4,0.3,setosa 1220 | 5.7,3.8,1.7,0.3,setosa 1221 | 5.1,3.8,1.5,0.3,setosa 1222 | 5.4,3.4,1.7,0.2,setosa 1223 | 5.1,3.7,1.5,0.4,setosa 1224 | 4.6,3.6,1.0,0.2,setosa 1225 | 5.1,3.3,1.7,0.5,setosa 1226 | 4.8,3.4,1.9,0.2,setosa 1227 | 5.0,3.0,1.6,0.2,setosa 1228 | 5.0,3.4,1.6,0.4,setosa 1229 | 5.2,3.5,1.5,0.2,setosa 1230 | 5.2,3.4,1.4,0.2,setosa 1231 | 4.7,3.2,1.6,0.2,setosa 1232 | 4.8,3.1,1.6,0.2,setosa 1233 | 5.4,3.4,1.5,0.4,setosa 1234 | 5.2,4.1,1.5,0.1,setosa 1235 | 5.5,4.2,1.4,0.2,setosa 1236 | 4.9,3.1,1.5,0.1,setosa 1237 | 5.0,3.2,1.2,0.2,setosa 1238 | 5.5,3.5,1.3,0.2,setosa 1239 | 4.9,3.1,1.5,0.1,setosa 1240 | 4.4,3.0,1.3,0.2,setosa 1241 | 5.1,3.4,1.5,0.2,setosa 1242 | 5.0,3.5,1.3,0.3,setosa 1243 | 4.5,2.3,1.3,0.3,setosa 1244 | 4.4,3.2,1.3,0.2,setosa 1245 | 5.0,3.5,1.6,0.6,setosa 1246 | 5.1,3.8,1.9,0.4,setosa 1247 | 4.8,3.0,1.4,0.3,setosa 1248 | 5.1,3.8,1.6,0.2,setosa 1249 | 4.6,3.2,1.4,0.2,setosa 1250 | 5.3,3.7,1.5,0.2,setosa 1251 | 5.0,3.3,1.4,0.2,setosa 1252 | 7.0,3.2,4.7,1.4,versicolor 1253 | 6.4,3.2,4.5,1.5,versicolor 1254 | 6.9,3.1,4.9,1.5,versicolor 1255 | 5.5,2.3,4.0,1.3,versicolor 1256 | 6.5,2.8,4.6,1.5,versicolor 1257 | 5.7,2.8,4.5,1.3,versicolor 1258 | 6.3,3.3,4.7,1.6,versicolor 1259 | 4.9,2.4,3.3,1.0,versicolor 1260 | 6.6,2.9,4.6,1.3,versicolor 1261 | 5.2,2.7,3.9,1.4,versicolor 1262 | 5.0,2.0,3.5,1.0,versicolor 1263 | 5.9,3.0,4.2,1.5,versicolor 1264 | 6.0,2.2,4.0,1.0,versicolor 1265 | 6.1,2.9,4.7,1.4,versicolor 1266 | 5.6,2.9,3.6,1.3,versicolor 1267 | 6.7,3.1,4.4,1.4,versicolor 1268 | 5.6,3.0,4.5,1.5,versicolor 1269 | 5.8,2.7,4.1,1.0,versicolor 1270 | 6.2,2.2,4.5,1.5,versicolor 1271 | 5.6,2.5,3.9,1.1,versicolor 1272 | 5.9,3.2,4.8,1.8,versicolor 1273 | 6.1,2.8,4.0,1.3,versicolor 1274 | 6.3,2.5,4.9,1.5,versicolor 1275 | 6.1,2.8,4.7,1.2,versicolor 1276 | 6.4,2.9,4.3,1.3,versicolor 1277 | 6.6,3.0,4.4,1.4,versicolor 1278 | 6.8,2.8,4.8,1.4,versicolor 1279 | 6.7,3.0,5.0,1.7,versicolor 1280 | 6.0,2.9,4.5,1.5,versicolor 1281 | 5.7,2.6,3.5,1.0,versicolor 1282 | 5.5,2.4,3.8,1.1,versicolor 1283 | 5.5,2.4,3.7,1.0,versicolor 1284 | 5.8,2.7,3.9,1.2,versicolor 1285 | 6.0,2.7,5.1,1.6,versicolor 1286 | 5.4,3.0,4.5,1.5,versicolor 1287 | 6.0,3.4,4.5,1.6,versicolor 1288 | 6.7,3.1,4.7,1.5,versicolor 1289 | 6.3,2.3,4.4,1.3,versicolor 1290 | 5.6,3.0,4.1,1.3,versicolor 1291 | 5.5,2.5,4.0,1.3,versicolor 1292 | 5.5,2.6,4.4,1.2,versicolor 1293 | 6.1,3.0,4.6,1.4,versicolor 1294 | 5.8,2.6,4.0,1.2,versicolor 1295 | 5.0,2.3,3.3,1.0,versicolor 1296 | 5.6,2.7,4.2,1.3,versicolor 1297 | 5.7,3.0,4.2,1.2,versicolor 1298 | 5.7,2.9,4.2,1.3,versicolor 1299 | 6.2,2.9,4.3,1.3,versicolor 1300 | 5.1,2.5,3.0,1.1,versicolor 1301 | 5.7,2.8,4.1,1.3,versicolor 1302 | 6.3,3.3,6.0,2.5,virginica 1303 | 5.8,2.7,5.1,1.9,virginica 1304 | 7.1,3.0,5.9,2.1,virginica 1305 | 6.3,2.9,5.6,1.8,virginica 1306 | 6.5,3.0,5.8,2.2,virginica 1307 | 7.6,3.0,6.6,2.1,virginica 1308 | 4.9,2.5,4.5,1.7,virginica 1309 | 7.3,2.9,6.3,1.8,virginica 1310 | 6.7,2.5,5.8,1.8,virginica 1311 | 7.2,3.6,6.1,2.5,virginica 1312 | 6.5,3.2,5.1,2.0,virginica 1313 | 6.4,2.7,5.3,1.9,virginica 1314 | 6.8,3.0,5.5,2.1,virginica 1315 | 5.7,2.5,5.0,2.0,virginica 1316 | 5.8,2.8,5.1,2.4,virginica 1317 | 6.4,3.2,5.3,2.3,virginica 1318 | 6.5,3.0,5.5,1.8,virginica 1319 | 7.7,3.8,6.7,2.2,virginica 1320 | 7.7,2.6,6.9,2.3,virginica 1321 | 6.0,2.2,5.0,1.5,virginica 1322 | 6.9,3.2,5.7,2.3,virginica 1323 | 5.6,2.8,4.9,2.0,virginica 1324 | 7.7,2.8,6.7,2.0,virginica 1325 | 6.3,2.7,4.9,1.8,virginica 1326 | 6.7,3.3,5.7,2.1,virginica 1327 | 7.2,3.2,6.0,1.8,virginica 1328 | 6.2,2.8,4.8,1.8,virginica 1329 | 6.1,3.0,4.9,1.8,virginica 1330 | 6.4,2.8,5.6,2.1,virginica 1331 | 7.2,3.0,5.8,1.6,virginica 1332 | 7.4,2.8,6.1,1.9,virginica 1333 | 7.9,3.8,6.4,2.0,virginica 1334 | 6.4,2.8,5.6,2.2,virginica 1335 | 6.3,2.8,5.1,1.5,virginica 1336 | 6.1,2.6,5.6,1.4,virginica 1337 | 7.7,3.0,6.1,2.3,virginica 1338 | 6.3,3.4,5.6,2.4,virginica 1339 | 6.4,3.1,5.5,1.8,virginica 1340 | 6.0,3.0,4.8,1.8,virginica 1341 | 6.9,3.1,5.4,2.1,virginica 1342 | 6.7,3.1,5.6,2.4,virginica 1343 | 6.9,3.1,5.1,2.3,virginica 1344 | 5.8,2.7,5.1,1.9,virginica 1345 | 6.8,3.2,5.9,2.3,virginica 1346 | 6.7,3.3,5.7,2.5,virginica 1347 | 6.7,3.0,5.2,2.3,virginica 1348 | 6.3,2.5,5.0,1.9,virginica 1349 | 6.5,3.0,5.2,2.0,virginica 1350 | 6.2,3.4,5.4,2.3,virginica 1351 | 5.9,3.0,5.1,1.8,virginica 1352 | --------------------------------------------------------------------------------