From 31c5292467ec2cc90189fcca452fe642d2df06a0 Mon Sep 17 00:00:00 2001 From: raygaeta Date: Fri, 26 Jan 2024 09:17:39 -0800 Subject: [PATCH] Cuisine Matcher Model --- .../4-Applied/My Model/index.html | 97 ++++ .../4-Applied/My Model/model.onnx | Bin 0 -> 2185674 bytes .../4-Applied/My Model/notebook.ipynb | 459 ++++++++++++++++++ 3 files changed, 556 insertions(+) create mode 100644 4-Classification/4-Applied/My Model/index.html create mode 100644 4-Classification/4-Applied/My Model/model.onnx create mode 100644 4-Classification/4-Applied/My Model/notebook.ipynb diff --git a/4-Classification/4-Applied/My Model/index.html b/4-Classification/4-Applied/My Model/index.html new file mode 100644 index 00000000..ab76e2d9 --- /dev/null +++ b/4-Classification/4-Applied/My Model/index.html @@ -0,0 +1,97 @@ + + +
+ Cuisine Matcher +
+ +

Check your refrigerator. What can you create?

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+ + + + + diff --git a/4-Classification/4-Applied/My Model/model.onnx b/4-Classification/4-Applied/My Model/model.onnx new file mode 100644 index 0000000000000000000000000000000000000000..385321807595b2d073a5b08b70e0e768615383f5 GIT binary patch literal 2185674 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 literal 0 HcmV?d00001 diff --git a/4-Classification/4-Applied/My Model/notebook.ipynb b/4-Classification/4-Applied/My Model/notebook.ipynb new file mode 100644 index 00000000..fc65df28 --- /dev/null +++ b/4-Classification/4-Applied/My Model/notebook.ipynb @@ -0,0 +1,459 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Build a cuisine recommender" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import pandas as pd " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "ename": "FileNotFoundError", + "evalue": "[Errno 2] No such file or directory: '../data/cleaned_cuisines.csv'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m data \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_csv\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43m../data/cleaned_cuisines.csv\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2\u001b[0m data\u001b[38;5;241m.\u001b[39mhead()\n", + "File \u001b[0;32m~/Desktop/ML-For-Beginners/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py:948\u001b[0m, in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[1;32m 935\u001b[0m kwds_defaults \u001b[38;5;241m=\u001b[39m _refine_defaults_read(\n\u001b[1;32m 936\u001b[0m dialect,\n\u001b[1;32m 937\u001b[0m delimiter,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 944\u001b[0m dtype_backend\u001b[38;5;241m=\u001b[39mdtype_backend,\n\u001b[1;32m 945\u001b[0m )\n\u001b[1;32m 946\u001b[0m kwds\u001b[38;5;241m.\u001b[39mupdate(kwds_defaults)\n\u001b[0;32m--> 948\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_read\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/ML-For-Beginners/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py:611\u001b[0m, in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 608\u001b[0m _validate_names(kwds\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnames\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m))\n\u001b[1;32m 610\u001b[0m \u001b[38;5;66;03m# Create the parser.\u001b[39;00m\n\u001b[0;32m--> 611\u001b[0m parser \u001b[38;5;241m=\u001b[39m \u001b[43mTextFileReader\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfilepath_or_buffer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwds\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 613\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mor\u001b[39;00m iterator:\n\u001b[1;32m 614\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m parser\n", + "File \u001b[0;32m~/Desktop/ML-For-Beginners/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py:1448\u001b[0m, in \u001b[0;36mTextFileReader.__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 1445\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m kwds[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mhas_index_names\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m 1447\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles: IOHandles \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 1448\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_engine\u001b[49m\u001b[43m(\u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mengine\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/Desktop/ML-For-Beginners/.venv/lib/python3.12/site-packages/pandas/io/parsers/readers.py:1705\u001b[0m, in \u001b[0;36mTextFileReader._make_engine\u001b[0;34m(self, f, engine)\u001b[0m\n\u001b[1;32m 1703\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m mode:\n\u001b[1;32m 1704\u001b[0m mode \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m-> 1705\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;241m=\u001b[39m \u001b[43mget_handle\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1706\u001b[0m \u001b[43m \u001b[49m\u001b[43mf\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1707\u001b[0m \u001b[43m \u001b[49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1708\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1709\u001b[0m \u001b[43m \u001b[49m\u001b[43mcompression\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mcompression\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1710\u001b[0m \u001b[43m \u001b[49m\u001b[43mmemory_map\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mmemory_map\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1711\u001b[0m \u001b[43m \u001b[49m\u001b[43mis_text\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mis_text\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1712\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mencoding_errors\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstrict\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1713\u001b[0m \u001b[43m \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mstorage_options\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 1714\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1715\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 1716\u001b[0m f \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mhandles\u001b[38;5;241m.\u001b[39mhandle\n", + "File \u001b[0;32m~/Desktop/ML-For-Beginners/.venv/lib/python3.12/site-packages/pandas/io/common.py:863\u001b[0m, in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 858\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(handle, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 859\u001b[0m \u001b[38;5;66;03m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[1;32m 860\u001b[0m \u001b[38;5;66;03m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[1;32m 861\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mencoding \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m ioargs\u001b[38;5;241m.\u001b[39mmode:\n\u001b[1;32m 862\u001b[0m \u001b[38;5;66;03m# Encoding\u001b[39;00m\n\u001b[0;32m--> 863\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 864\u001b[0m \u001b[43m \u001b[49m\u001b[43mhandle\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 865\u001b[0m \u001b[43m \u001b[49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 866\u001b[0m \u001b[43m \u001b[49m\u001b[43mencoding\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mioargs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mencoding\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 867\u001b[0m \u001b[43m \u001b[49m\u001b[43merrors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43merrors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 868\u001b[0m \u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 869\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 870\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 871\u001b[0m \u001b[38;5;66;03m# Binary mode\u001b[39;00m\n\u001b[1;32m 872\u001b[0m handle \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mopen\u001b[39m(handle, ioargs\u001b[38;5;241m.\u001b[39mmode)\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '../data/cleaned_cuisines.csv'" + ] + } + ], + "source": [ + "data = pd.read_csv('../data/cleaned_cuisines.csv')\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
almondangelicaaniseanise_seedappleapple_brandyapricotarmagnacartemisiaartichoke...whiskeywhite_breadwhite_winewhole_grain_wheat_flourwinewoodyamyeastyogurtzucchini
00000000000...0000000000
11000000000...0000000000
20000000000...0000000000
30000000000...0000000000
40000000000...0000000010
\n", + "

5 rows × 380 columns

\n", + "
" + ], + "text/plain": [ + " almond angelica anise anise_seed apple apple_brandy apricot \\\n", + "0 0 0 0 0 0 0 0 \n", + "1 1 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 0 0 \n", + "\n", + " armagnac artemisia artichoke ... whiskey white_bread white_wine \\\n", + "0 0 0 0 ... 0 0 0 \n", + "1 0 0 0 ... 0 0 0 \n", + "2 0 0 0 ... 0 0 0 \n", + "3 0 0 0 ... 0 0 0 \n", + "4 0 0 0 ... 0 0 0 \n", + "\n", + " whole_grain_wheat_flour wine wood yam yeast yogurt zucchini \n", + "0 0 0 0 0 0 0 0 \n", + "1 0 0 0 0 0 0 0 \n", + "2 0 0 0 0 0 0 0 \n", + "3 0 0 0 0 0 0 0 \n", + "4 0 0 0 0 0 1 0 \n", + "\n", + "[5 rows x 380 columns]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X = data.iloc[:,2:]\n", + "X.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
cuisine
0indian
1indian
2indian
3indian
4indian
\n", + "
" + ], + "text/plain": [ + " cuisine\n", + "0 indian\n", + "1 indian\n", + "2 indian\n", + "3 indian\n", + "4 indian" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y = data[['cuisine']]\n", + "y.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "from sklearn.svm import SVC\n", + "from sklearn.model_selection import cross_val_score\n", + "from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
SVC(C=10, kernel='linear', probability=True, random_state=0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "SVC(C=10, kernel='linear', probability=True, random_state=0)" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model = SVC(kernel='linear', C=10, probability=True,random_state=0)\n", + "model.fit(X_train,y_train.values.ravel())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred = model.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " chinese 0.74 0.71 0.73 249\n", + " indian 0.91 0.84 0.87 243\n", + " japanese 0.73 0.76 0.74 223\n", + " korean 0.84 0.76 0.80 246\n", + " thai 0.77 0.89 0.82 238\n", + "\n", + " accuracy 0.79 1199\n", + " macro avg 0.80 0.79 0.79 1199\n", + "weighted avg 0.80 0.79 0.79 1199\n", + "\n" + ] + } + ], + "source": [ + "print(classification_report(y_test,y_pred))\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from skl2onnx import convert_sklearn\n", + "from skl2onnx.common.data_types import FloatTensorType\n", + "\n", + "initial_type = [('float_input', FloatTensorType([None, 380]))]\n", + "options = {id(model): {'nocl': True, 'zipmap': False}}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "onx = convert_sklearn(model, initial_types=initial_type, options=options)\n", + "with open(\"./model.onnx\", \"wb\") as f:\n", + " f.write(onx.SerializeToString())" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.0" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}