diff --git a/app.py b/app.py new file mode 100644 index 0000000..027df5c --- /dev/null +++ b/app.py @@ -0,0 +1,36 @@ +from bottle import hook, request, response, route, run +from sklearn.externals import joblib + +mlb, classifier = joblib.load('offClassifier.pkl') + + +@hook('after_request') +def enable_cors(): + """ + You need to add some headers to each request. + Don't use the wildcard '*' for Access-Control-Allow-Origin in production. + """ + response.headers['Access-Control-Allow-Origin'] = '*' + response.headers['Access-Control-Allow-Methods'] = 'PUT, GET, POST, DELETE, OPTIONS' + response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token' + + +@route('/predict', method=['OPTIONS', 'POST']) +def predict(): + if request.method == 'OPTIONS': + return {} + + products = request.json + predictions = mlb.inverse_transform( + classifier.predict([p['name'] for p in products]) + ) + return { + 'data': [ + product.update({'predictedCategories': categories}) or product + for product, categories in zip(products, predictions) + ] + } + + +if __name__ == '__main__': + run(host='localhost', port=4242) diff --git a/notebook.ipynb b/notebook.ipynb index bb490de..2f2a59e 100644 --- a/notebook.ipynb +++ b/notebook.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 90, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -18,15 +18,13 @@ "from sklearn.externals import joblib\n", "from sklearn.feature_extraction.text import CountVectorizer\n", "from sklearn.feature_extraction.text import TfidfTransformer\n", - "from sklearn.metrics import accuracy_score\n", - "from sklearn.model_selection import train_test_split\n", "from sklearn.multiclass import OneVsRestClassifier\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.preprocessing import MultiLabelBinarizer\n", "from sklearn.svm import LinearSVC\n", "\n", - "MIN_NUMBER_PRODUCTS_PER_CATEGORY = 3000\n", - "TRAINING_DATASET_SIZE = 25 / 100" + "MIN_NUMBER_PRODUCTS_PER_CATEGORY = 25\n", + "TRAINING_DATASET_SIZE = 50 / 100" ] }, { @@ -38,7 +36,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -63,17 +61,9 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 27, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Keeping 33 categories.\n" - ] - } - ], + "outputs": [], "source": [ "# Let's build vectors of products and categories, for training purpose.\n", "categories = [\n", @@ -81,60 +71,31 @@ " for category, count in collections.Counter(\n", " category for category_list in products_with_categories['categories_tags'] for category in category_list\n", " ).items()\n", - " # Filter out categories without enough products\n", " if count > MIN_NUMBER_PRODUCTS_PER_CATEGORY and category != ''\n", "]\n", - "print('Keeping %d categories.' % len(categories))\n", "# Filter out empty lists of categories\n", "XY = products_with_categories.copy()\n", "XY['categories_tags'] = XY['categories_tags'].map(lambda c_list: [c for c in c_list if c in categories])\n", "mask = XY['categories_tags'].str.len() > 0\n", - "XY = XY[mask]" + "XY = XY[mask]\n", + "# TODO: We should ensure each category is sufficiently represented" ] }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 28, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/Users/lverney/.local/share/virtualenvs/machine_learning/lib/python3.6/site-packages/sklearn/model_selection/_split.py:2010: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n", - " FutureWarning)\n" - ] - }, - { - "data": { - "text/plain": [ - "741" - ] - }, - "execution_count": 93, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Select training and testing sample\n", - "X = XY['product_name'].values.astype('U')\n", - "Y = [np.array(c).astype('U') for c in XY['categories_tags'].values]\n", - "\n", - "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state=0, train_size=TRAINING_DATASET_SIZE)\n", - "\n", - "# Check each category is sufficiently represented\n", - "min([\n", - " count\n", - " for _, count in collections.Counter(\n", - " category for category_list in Y_train for category in category_list\n", - " ).items()\n", - "])" + "# Select training sample\n", + "XY_training = XY.sample(frac=0.5)\n", + "X_train = XY_training['product_name'].values.astype('U')\n", + "Y_train = [np.array(c).astype('U') for c in XY_training['categories_tags'].values]" ] }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 29, "metadata": {}, "outputs": [], "source": [ @@ -144,7 +105,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 335, "metadata": {}, "outputs": [ { @@ -160,7 +121,7 @@ " n_jobs=1))])" ] }, - "execution_count": 95, + "execution_count": 335, "metadata": {}, "output_type": "execute_result" } @@ -170,39 +131,29 @@ "classifier = Pipeline([\n", " ('vectorizer', CountVectorizer()),\n", " ('tfidf', TfidfTransformer()),\n", - " ('clf', OneVsRestClassifier(LinearSVC()))\n", - "])\n", + " ('clf', OneVsRestClassifier(LinearSVC()))])\n", "\n", "classifier.fit(X_train, Y_train_transformed)" ] }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 380, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.52062784115275751" - ] - }, - "execution_count": 96, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "# Compute predictions for testing set\n", - "predicted = classifier.predict(X_test)\n", - "all_labels = mlb.inverse_transform(predicted)\n", + "# Check score on a testing set\n", + "training_indices = np.in1d(XY['product_name'].values.astype('U'), X_train, invert=True)\n", + "X_test = XY['product_name'][training_indices]\n", + "Y_test = [np.array(c).astype('U') for c in XY['categories_tags'][training_indices].values]\n", "\n", - "accuracy_score(mlb.fit_transform(Y_test), predicted)" + "predicted = classifier.predict(X_test)\n", + "all_labels = mlb.inverse_transform(predicted)" ] }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 394, "metadata": {}, "outputs": [ { @@ -233,183 +184,183 @@ " \n", "
\n", "69954 rows × 3 columns
\n", + "38381 rows × 3 columns
\n", "" ], "text/plain": [ - " product_name \\\n", - "0 Fernandes Cherry Soda - Ga Mee Naar Suruname &... \n", - "1 Compotes allégée en sucres Pommes Carrefour \n", - "2 Tortellini 4 Fromages, LunchBox \n", - "3 Orange and mango squash \n", - "4 Crackers toast nature \n", - "5 Miellats du Maquis cru d'été 2016 \n", - "6 Cebollas "Juan de Dios" \n", - "7 Moules fraîches de Hollande \n", - "8 Thé citron \n", - "9 Rêves de chocolat Assortiment de chocolats fin... \n", - "10 Noir aux éclats de noisettes \n", - "11 Couscous royal poulet merguez \n", - "12 Baguette Céréales Carrefour \n", - "13 Pomme Fraise \n", - "14 Risotto Champignons \n", - "15 Bio Chocolat Noir aux Éclats de Noisettes \n", - "16 Angeliter Zitronenlimonade \n", - "17 Agar-Agar \n", - "18 Préparation à l'huile de thym, romarin et laur... \n", - "19 Velamints \n", - "20 Vegemil Black Bean Soymilk \n", - "21 Carottes Râpées \n", - "22 Budweiser Budvar \n", - "23 Mayonnaise aux oeufs frais \n", - "24 Kremsi krem sir \n", - "25 Domaine de l'Echauguette - 2010 \n", - "26 Strathmore Still Spring Water \n", - "27 Mousse de Viennois (8 Chocolat) \n", - "28 Poulet & Riz basquaise \n", - "29 Le Norvège -25% sel \n", - "... ... \n", - "69924 Cake Release Spray \n", - "69925 Maxi Quenelles à Gratiner, Jambon sauce béchamel \n", - "69926 Beurre gastronomique demi-sel \n", - "69927 Jambon à Griller \n", - "69928 Alpro Oat Almond \n", - "69929 Bière trappiste \n", - "69930 Viré-Clessé 2010 \n", - "69931 Cuillers aux œufs frais \n", - "69932 Super Smoothie Antioxidant Innocent \n", - "69933 6 petits pains précuits \n", - "69934 Indian tonic \n", - "69935 Merlot 2015 \n", - "69936 Jus multivitaminé 11 fruits \n", - "69937 Pain de mie complet \n", - "69938 Farfalle Zebra \n", - "69939 Nectarinas \n", - "69940 Ail et fines herbes fromage à tartiner (27% MG) \n", - "69941 Ratatouille cuisinée à la Provençale \n", - "69942 Confiture De Cerises Noires De Bâle \n", - "69943 Madeleines Marbrees chocolat \n", - "69944 Filet de poulet (-25% de sel) (4+2 gratuites) \n", - "69945 Boisson gazeuse goût framboise \n", - "69946 Mini billes Mozzarella di Bufala Campana AOP \n", - "69947 Crème fraîche épaisse de Montagne \n", - "69948 Cacahuètes grillées et salées \n", - "69949 Potato Wedges \n", - "69950 Jus d'orange à base de jus d'orange concentré \n", - "69951 Fleur de Sel aux Épices Grillées \n", - "69952 Pétales à la crevette \n", - "69953 Pommes rissolées Bio \n", + " product_name \\\n", + "176 Salade Cesar \n", + "184 lentilles vertes \n", + "185 Root Beer \n", + "186 Biscuits sablés fourrage au cacao \n", + "238 Blle Pet 50CL Coca Cola Cherry \n", + "244 Cauliflower \n", + "247 Salsa de mostaza \n", + "249 7Up \n", + "276 Mehrkomponeneten Protein 90 C6 Haselnuß \n", + "292 Cakes aux Fruits \n", + "309 Whey Protein aus Molke 1000 Gramm Vanilla \n", + "310 Fondants Citron \n", + "369 Sour Fruit Gummies \n", + "421 Mixed peppers \n", + "437 30 Panach' Fruits \n", + "440 Foie gras de canard du Périgord \n", + "454 Terrine de caille aux pruneaux d'Agen \n", + "455 Foie de canard aux figues \n", + "458 Foie gras d'oie Périgord \n", + "459 Foie gras d'oie du Périgord \n", + "464 All Butter Belgian White Chocolate Chunk Cookies \n", + "465 All Butter Fruity Flapjack Cookies \n", + "467 All butter Cranberry & Orange Cookies \n", + "468 All Butter Triple Belgian Chocolate Chunk Cookies \n", + "469 Cookies Stem Ginger \n", + "472 Stem Ginger Dunkers \n", + "484 Reduced Fat Mayonnaise \n", + "492 mostly mesquite honey \n", + "496 Clam Chowder A Condensed Soup \n", + "509 Salade Mac \n", + "... ... \n", + "358216 Sauc Nuoc Mam \n", + "358217 Sauce piment doux Thaï \n", + "358220 Sauce Piment Sriracha \n", + "358222 Sauce Thaï Satay \n", + "358225 Crème de coco allégée \n", + "358226 Nouilles instantanées \n", + "358231 Pad Thaï Sauce Wok \n", + "358233 Pâte de Curry Vert \n", + "358234 Pâte de curry rouge \n", + "358242 Gula Gula Durian \n", + "358254 Boisson au chrysanthème \n", + "358255 Lychee Drink \n", + "358279 Pudding nata de coco \n", + "358282 Glinter Soft Drink Orange \n", + "358283 Soft Drink \n", + "358293 Healtier palm oil (L'huile de palme) \n", + "358306 100% Pur Jus 4 agrumes \n", + "358325 tuna chunks in spring water \n", + "358335 Santa Cruz Chilli & Lime Dressing \n", + "358343 Fisherman's Friend Miel-Citron \n", + "358347 Dessert Noir (lot de 2) \n", + "358351 Kirkland Purified Drinking Water \n", + "358372 Boîte de saumon frais trouvée à l'extérieur d'... \n", + "358389 Cervoise Mexicaine \n", + "358399 Ma bite \n", + "358400 Les schtroumpfs & le village des fille \n", + "358426 Les Belles Tranches Bacon fumé \n", + "358428 Tartines craquantes bio au sarrasin \n", + "358438 Roussette du Bugey (2011) \n", + "358446 乐吧泡菜味薯片 \n", "\n", - " original_labels \\\n", - "0 [en:beverages, en:sugared-beverages] \n", - "1 [en:plant-based-foods-and-beverages, en:plant-... \n", - "2 [en:plant-based-foods-and-beverages, en:plant-... \n", - "3 [en:beverages] \n", - "4 [en:salty-snacks] \n", - "5 [en:spreads, en:breakfasts] \n", - "6 [en:plant-based-foods-and-beverages, en:plant-... \n", - "7 [en:seafood] \n", - "8 [en:plant-based-foods-and-beverages, en:bevera... \n", - "9 [en:sugary-snacks, en:confectioneries, en:dess... \n", - "10 [en:sugary-snacks, en:chocolates] \n", - "11 [en:canned-foods, en:meals] \n", - "12 [en:plant-based-foods-and-beverages, en:plant-... \n", - "13 [en:plant-based-foods-and-beverages, en:plant-... \n", - "14 [en:meals] \n", - "15 [en:sugary-snacks, en:chocolates] \n", - "16 [en:beverages, en:sugared-beverages] \n", - "17 [en:plant-based-foods-and-beverages, en:plant-... \n", - "18 [en:plant-based-foods-and-beverages, en:plant-... \n", - "19 [en:sugary-snacks, en:confectioneries] \n", - "20 [en:dairies] \n", - "21 [en:meals] \n", - "22 [en:beverages, en:alcoholic-beverages] \n", - "23 [en:groceries, en:sauces] \n", - "24 [en:dairies, en:cheeses] \n", - "25 [en:beverages, en:alcoholic-beverages] \n", - "26 [en:beverages, en:non-sugared-beverages] \n", - "27 [en:fresh-foods, en:sugary-snacks, en:dairies,... \n", - "28 [en:meals] \n", - "29 [en:seafood] \n", - "... ... \n", - "69924 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69925 [en:canned-foods, en:meals] \n", - "69926 [en:spreads, en:dairies] \n", - "69927 [en:meats, en:prepared-meats] \n", - "69928 [en:beverages, en:dairies, en:non-sugared-beve... \n", - "69929 [en:beverages, en:alcoholic-beverages] \n", - "69930 [en:beverages, en:alcoholic-beverages] \n", - "69931 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", - "69932 [en:beverages, en:non-sugared-beverages] \n", - "69933 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69934 [en:beverages] \n", - "69935 [en:beverages, en:alcoholic-beverages] \n", - "69936 [en:plant-based-foods-and-beverages, en:bevera... \n", - "69937 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69938 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69939 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69940 [en:spreads, en:dairies, en:cheeses] \n", - "69941 [en:canned-foods, en:meals] \n", - "69942 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69943 [en:sugary-snacks, en:biscuits-and-cakes, en:d... \n", - "69944 [en:meats, en:prepared-meats] \n", - "69945 [en:plant-based-foods-and-beverages, en:bevera... \n", - "69946 [en:dairies, en:cheeses] \n", - "69947 [en:dairies] \n", - "69948 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69949 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69950 [en:plant-based-foods-and-beverages, en:bevera... \n", - "69951 [en:plant-based-foods-and-beverages, en:plant-... \n", - "69952 [en:salty-snacks] \n", - "69953 [en:plant-based-foods-and-beverages, en:plant-... \n", + " original_labels \\\n", + "176 [en:plant-based-foods-and-beverages, en:plant-... \n", + "184 [en:plant-based-foods-and-beverages, en:plant-... \n", + "185 [en:beverages, en:carbonated-drinks, en:sodas,... \n", + "186 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "238 [en:beverages, en:sugared-beverages] \n", + "244 [en:plant-based-foods-and-beverages, en:plant-... \n", + "247 [en:groceries, en:condiments, en:sauces, en:mu... \n", + "249 [en:plant-based-foods-and-beverages, en:bevera... \n", + "276 [en:dietary-supplements, en:bodybuilding-suppl... \n", + "292 [en:sugary-snacks, en:biscuits-and-cakes, en:d... \n", + "309 [en:dietary-supplements, en:bodybuilding-suppl... \n", + "310 [en:sugary-snacks, en:biscuits-and-cakes, en:d... \n", + "369 [en:sugary-snacks, en:confectioneries, en:cand... \n", + "421 [en:plant-based-foods-and-beverages, en:plant-... \n", + "437 [en:sugary-snacks, en:biscuits-and-cakes, en:d... \n", + "440 [en:fish-and-meat-and-eggs, fr:foies-gras, fr:... \n", + "454 [en:terrine, fr:terrines-de-volailles] \n", + "455 [en:fish-and-meat-and-eggs, fr:foies-gras, fr:... \n", + "458 [en:fish-and-meat-and-eggs, fr:foies-gras] \n", + "459 [en:fish-and-meat-and-eggs, fr:foies-gras] \n", + "464 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "465 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "467 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "468 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "469 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "472 [en:sugary-snacks, en:biscuits-and-cakes, en:b... \n", + "484 [en:groceries, en:sauces, en:mayonnaises] \n", + "492 [en:spreads, en:breakfasts, en:sweet-spreads, ... \n", + "496 [en:meals, en:soups] \n", + "509 [en:plant-based-foods-and-beverages, en:plant-... \n", + "... ... \n", + "358216 [en:groceries, en:sauces] \n", + "358217 [en:groceries, en:sauces, en:pimented-sauces] \n", + "358220 [en:plant-based-foods-and-beverages, en:plant-... \n", + "358222 [en:groceries, en:sauces, en:pimented-sauces] \n", + "358225 [en:plant-based-foods-and-beverages, en:plant-... \n", + "358226 [en:plant-based-foods-and-beverages, en:plant-... \n", + "358231 [en:groceries, en:sauces] \n", + "358233 [en:groceries, en:sauces] \n", + "358234 [en:groceries, en:sauces, en:curry-pastes] \n", + "358242 [en:sugary-snacks, en:confectioneries, en:cand... \n", + "358254 [en:plant-based-foods-and-beverages, en:bevera... \n", + "358255 [en:plant-based-foods-and-beverages, en:bevera... \n", + "358279 [en:desserts, en:puddings] \n", + "358282 [en:beverages, en:non-sugared-beverages] \n", + "358283 [en:beverages, en:artificially-sweetened-bever... \n", + "358293 [en:plant-based-foods-and-beverages, en:plant-... \n", + "358306 [en:plant-based-foods-and-beverages, en:bevera... \n", + "358325 [en:canned-foods, en:seafood, en:fishes, en:ca... \n", + "358335 [en:groceries, en:sauces, en:salad-dressings] \n", + "358343 [en:sugary-snacks, en:confectioneries, en:cand... \n", + "358347 [en:sugary-snacks, en:chocolates, en:dark-choc... \n", + "358351 [en:beverages, en:waters, en:non-sugared-bever... \n", + "358372 [en:seafood, en:fishes, en:salmons] \n", + "358389 [en:beverages, en:alcoholic-beverages, en:arti... \n", + "358399 [en:beverages, en:non-sugared-beverages] \n", + "358400 [en:fats] \n", + "358426 [en:meats, en:pork, en:bacon, en:sliced-bacon] \n", + "358428 [en:plant-based-foods-and-beverages, en:plant-... \n", + "358438 [en:beverages, en:alcoholic-beverages, en:wine... \n", + "358446 [en:salty-snacks, en:appetizers, en:chips-and-... \n", "\n", - " guessed_labels \n", - "0 (en:beverages, en:plant-based-foods-and-bevera... \n", - "1 (en:desserts, en:fruits-and-vegetables-based-f... \n", - "2 (en:cereals-and-potatoes, en:cereals-and-their... \n", - "3 (en:beverages, en:plant-based-foods-and-bevera... \n", - "4 (en:cereals-and-potatoes, en:salty-snacks) \n", - "5 () \n", - "6 (en:fresh-foods, en:fruits-and-vegetables-base... \n", - "7 (en:seafood,) \n", - "8 (en:beverages, en:non-sugared-beverages, en:pl... \n", - "9 (en:chocolates, en:desserts, en:sugary-snacks) \n", - "10 (en:chocolates, en:sugary-snacks) \n", - "11 (en:meals,) \n", - "12 (en:cereals-and-potatoes, en:plant-based-foods... \n", - "13 (en:desserts, en:fruits-and-vegetables-based-f... \n", - "14 (en:meals, en:plant-based-foods, en:plant-base... \n", - "15 (en:chocolates, en:sugary-snacks) \n", - "16 () \n", - "17 () \n", - "18 (en:plant-based-foods, en:plant-based-foods-an... \n", - "19 () \n", - "20 (en:plant-based-foods-and-beverages,) \n", - "21 (en:meals,) \n", - "22 (en:alcoholic-beverages, en:beverages) \n", - "23 (en:groceries, en:sauces) \n", - "24 () \n", - "25 (en:alcoholic-beverages, en:beverages) \n", - "26 (en:beverages, en:non-sugared-beverages) \n", - "27 (en:chocolates, en:dairies, en:desserts, en:fr... \n", - "28 (en:meals,) \n", - "29 () \n", - "... ... \n", - "69924 (en:biscuits-and-cakes, en:desserts, en:sugary... \n", - "69925 () \n", - "69926 (en:dairies, en:spreads) \n", - "69927 (en:meats, en:prepared-meats) \n", - "69928 () \n", - "69929 (en:alcoholic-beverages, en:beverages) \n", - "69930 (en:alcoholic-beverages, en:beverages) \n", - "69931 (en:biscuits, en:biscuits-and-cakes, en:sugary... \n", - "69932 (en:beverages, en:non-sugared-beverages, en:pl... \n", - "69933 (en:cereals-and-potatoes, en:plant-based-foods... \n", - "69934 (en:beverages, en:sugared-beverages) \n", - "69935 (en:alcoholic-beverages, en:beverages) \n", - "69936 (en:beverages, en:fruit-based-beverages, en:pl... \n", - "69937 (en:cereals-and-potatoes, en:plant-based-foods... \n", - "69938 (en:cereals-and-potatoes, en:cereals-and-their... \n", - "69939 () \n", - "69940 (en:cheeses, en:dairies, en:spreads) \n", - "69941 (en:meals,) \n", - "69942 (en:breakfasts, en:fruits-and-vegetables-based... \n", - "69943 (en:biscuits-and-cakes, en:desserts, en:sugary... \n", - "69944 (en:meats,) \n", - "69945 (en:beverages, en:non-sugared-beverages) \n", - "69946 (en:cheeses, en:dairies) \n", - "69947 (en:dairies,) \n", - "69948 (en:plant-based-foods, en:plant-based-foods-an... \n", - "69949 (en:salty-snacks,) \n", - "69950 (en:beverages, en:fruit-based-beverages, en:pl... \n", - "69951 () \n", - "69952 () \n", - "69953 (en:frozen-foods, en:fruits-and-vegetables-bas... \n", + " guessed_labels \n", + "176 (en:meals, fr:salades-composees) \n", + "184 (en:green-lentils, en:legume-seeds, en:legumes... \n", + "185 (en:alcoholic-beverages, en:beers, en:beverage... \n", + "186 (en:biscuits, en:biscuits-and-cakes, en:chocol... \n", + "238 (en:beverages, en:non-sugared-beverages, en:so... \n", + "244 (en:fruits-and-vegetables-based-foods, en:leaf... \n", + "247 (en:condiments, en:groceries, en:mustards, en:... \n", + "249 (en:beverages, en:non-sugared-beverages) \n", + "276 (en:bodybuilding-supplements, en:dietary-suppl... \n", + "292 (en:biscuits-and-cakes, en:cakes, en:desserts,... \n", + "309 (en:bodybuilding-supplements, en:dietary-suppl... \n", + "310 () \n", + "369 (en:candies, en:confectioneries, en:sugary-sna... \n", + "421 (en:fruits-and-vegetables-based-foods, en:plan... \n", + "437 (en:fruits-and-vegetables-based-foods, en:frui... \n", + "440 (en:fish-and-meat-and-eggs, fr:foies-gras, fr:... \n", + "454 (en:terrine,) \n", + "455 (en:fish-and-meat-and-eggs, en:meats) \n", + "458 (en:fish-and-meat-and-eggs, fr:foies-gras) \n", + "459 (en:fish-and-meat-and-eggs, fr:foies-gras) \n", + "464 (en:biscuits, en:biscuits-and-cakes, en:chocol... \n", + "465 (en:biscuits, en:biscuits-and-cakes, en:cookie... \n", + "467 (en:biscuits, en:biscuits-and-cakes, en:cookie... \n", + "468 (en:biscuits, en:biscuits-and-cakes, en:cookie... \n", + "469 (en:biscuits, en:biscuits-and-cakes, en:cookie... \n", + "472 () \n", + "484 (en:dairies, en:groceries, en:milks, en:sauces) \n", + "492 (en:breakfasts,) \n", + "496 (en:meals, en:soups) \n", + "509 () \n", + "... ... \n", + "358216 (en:plant-based-foods, en:plant-based-foods-an... \n", + "358217 (en:groceries, en:sauces) \n", + "358220 (en:groceries, en:pimented-sauces, en:sauces) \n", + "358222 (en:groceries, en:sauces) \n", + "358225 (en:plant-based-creams, en:plant-based-foods-a... \n", + "358226 (en:cereals-and-potatoes, en:cereals-and-their... \n", + "358231 (en:sauces,) \n", + "358233 (en:curry-pastes, en:groceries) \n", + "358234 (en:groceries,) \n", + "358242 () \n", + "358254 (en:beverages, en:non-sugared-beverages, en:pl... \n", + "358255 (en:beverages, en:fruit-based-beverages, en:pl... \n", + "358279 (en:desserts, en:puddings) \n", + "358282 (en:beverages, en:plant-based-foods-and-bevera... \n", + "358283 () \n", + "358293 (en:fats, en:plant-based-foods, en:plant-based... \n", + "358306 (en:beverages, en:fruit-based-beverages, en:fr... \n", + "358325 (en:canned-fishes, en:canned-foods, en:canned-... \n", + "358335 (en:groceries, en:salad-dressings, en:sauces) \n", + "358343 (en:candies, en:confectioneries, en:sugary-sna... \n", + "358347 (en:chocolates, en:dark-chocolates, en:dessert... \n", + "358351 (en:beverages, en:non-sugared-beverages, en:wa... \n", + "358372 () \n", + "358389 (en:alcoholic-beverages, en:amber-beers, en:be... \n", + "358399 (en:plant-based-foods, en:plant-based-foods-an... \n", + "358400 (en:confectioneries, en:sugary-snacks) \n", + "358426 (en:bacon, en:meats, en:pork, en:sliced-bacon) \n", + "358428 (en:breads, en:cereals-and-potatoes, en:crispb... \n", + "358438 (en:alcoholic-beverages, en:beverages, en:fren... \n", + "358446 () \n", "\n", - "[69954 rows x 3 columns]" + "[38381 rows x 3 columns]" ] }, - "execution_count": 97, + "execution_count": 394, "metadata": {}, "output_type": "execute_result" } @@ -813,748 +764,7 @@ }, { "cell_type": "code", - "execution_count": 98, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " | product_name | \n", - "good_guessed_labels | \n", - "extra_guessed_labels | \n", - "missing_guessed_labels | \n", - "
---|---|---|---|---|
0 | \n", - "Fernandes Cherry Soda - Ga Mee Naar Suruname &... | \n", - "{en:beverages} | \n", - "[en:plant-based-foods-and-beverages] | \n", - "[en:sugared-beverages] | \n", - "
1 | \n", - "Miellats du Maquis cru d'été 2016 | \n", - "{} | \n", - "[] | \n", - "[en:spreads, en:breakfasts] | \n", - "
2 | \n", - "Thé citron | \n", - "{en:non-sugared-beverages, en:plant-based-food... | \n", - "[] | \n", - "[en:plant-based-foods] | \n", - "
3 | \n", - "Rêves de chocolat Assortiment de chocolats fin... | \n", - "{en:chocolates, en:desserts, en:sugary-snacks} | \n", - "[] | \n", - "[en:confectioneries] | \n", - "
4 | \n", - "Couscous royal poulet merguez | \n", - "{en:meals} | \n", - "[] | \n", - "[en:canned-foods] | \n", - "
5 | \n", - "Baguette Céréales Carrefour | \n", - "{en:plant-based-foods, en:cereals-and-potatoes... | \n", - "[] | \n", - "[en:cereals-and-their-products] | \n", - "
6 | \n", - "Angeliter Zitronenlimonade | \n", - "{} | \n", - "[] | \n", - "[en:beverages, en:sugared-beverages] | \n", - "
7 | \n", - "Agar-Agar | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
8 | \n", - "Velamints | \n", - "{} | \n", - "[] | \n", - "[en:sugary-snacks, en:confectioneries] | \n", - "
9 | \n", - "Vegemil Black Bean Soymilk | \n", - "{} | \n", - "[en:plant-based-foods-and-beverages] | \n", - "[en:dairies] | \n", - "
10 | \n", - "Kremsi krem sir | \n", - "{} | \n", - "[] | \n", - "[en:dairies, en:cheeses] | \n", - "
11 | \n", - "Le Norvège -25% sel | \n", - "{} | \n", - "[] | \n", - "[en:seafood] | \n", - "
12 | \n", - "Petit Munster Géromé | \n", - "{en:cheeses} | \n", - "[] | \n", - "[en:dairies] | \n", - "
13 | \n", - "Nectarines jaunes | \n", - "{en:plant-based-foods, en:plant-based-foods-an... | \n", - "[] | \n", - "[en:fruits-and-vegetables-based-foods, en:frui... | \n", - "
14 | \n", - "Carotte nouvelle | \n", - "{en:plant-based-foods, en:plant-based-foods-an... | \n", - "[] | \n", - "[en:fresh-foods, en:fruits-and-vegetables-base... | \n", - "
15 | \n", - "Apple Real Fruit Pie | \n", - "{} | \n", - "[en:plant-based-foods-and-beverages] | \n", - "[en:sugary-snacks] | \n", - "
16 | \n", - "Jus de pomme | \n", - "{en:plant-based-foods-and-beverages, en:fruit-... | \n", - "[] | \n", - "[en:non-sugared-beverages] | \n", - "
17 | \n", - "Roquefort Premium | \n", - "{en:dairies} | \n", - "[] | \n", - "[en:cheeses] | \n", - "
18 | \n", - "Antésite concentré de Réglisse Menthe | \n", - "{} | \n", - "[en:plant-based-foods-and-beverages] | \n", - "[en:beverages, en:non-sugared-beverages] | \n", - "
19 | \n", - "Menta piperita en bolsitas | \n", - "{en:non-sugared-beverages, en:plant-based-food... | \n", - "[] | \n", - "[en:plant-based-foods, en:groceries, en:plant-... | \n", - "
20 | \n", - "Demi-Lunes Cèpes aux oeufs frais | \n", - "{en:plant-based-foods, en:cereals-and-potatoes... | \n", - "[] | \n", - "[en:fresh-foods, en:meals] | \n", - "
21 | \n", - "Sirop de Grenadine Bio | \n", - "{en:beverages} | \n", - "[en:sugared-beverages] | \n", - "[en:non-sugared-beverages] | \n", - "
22 | \n", - "Gulaschsuppe | \n", - "{} | \n", - "[] | \n", - "[en:meals] | \n", - "
23 | \n", - "Déli'Pocket Montagnard | \n", - "{} | \n", - "[en:biscuits, en:biscuits-and-cakes, en:sugary... | \n", - "[en:frozen-foods] | \n", - "
24 | \n", - "Orzo by Sainsbury's | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
25 | \n", - "Vive soy Vainilla | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:bevera... | \n", - "
26 | \n", - "Excellence 99% Cacao Noir Absolu | \n", - "{en:chocolates, en:sugary-snacks} | \n", - "[] | \n", - "[en:confectioneries] | \n", - "
27 | \n", - "nan | \n", - "{} | \n", - "[] | \n", - "[en:sugary-snacks, en:chocolates] | \n", - "
28 | \n", - "jupiter | \n", - "{} | \n", - "[] | \n", - "[en:sugary-snacks, en:confectioneries] | \n", - "
29 | \n", - "Faux-Filet | \n", - "{} | \n", - "[] | \n", - "[en:meats] | \n", - "
... | \n", - "... | \n", - "... | \n", - "... | \n", - "... | \n", - "
29197 | \n", - "Noix d'épaule cuite choix désossée | \n", - "{} | \n", - "[] | \n", - "[en:canned-foods] | \n", - "
29198 | \n", - "Lait de coco | \n", - "{en:non-sugared-beverages, en:beverages, en:pl... | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages] | \n", - "
29199 | \n", - "Tagliatelles au poulet | \n", - "{en:meals} | \n", - "[en:cereals-and-potatoes, en:cereals-and-their... | \n", - "[en:fresh-foods] | \n", - "
29200 | \n", - "Dim Sum Shao Mai | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29201 | \n", - "Waffel Blätter mit Vollmilchschokolade | \n", - "{} | \n", - "[] | \n", - "[en:sugary-snacks, en:biscuits-and-cakes, en:b... | \n", - "
29202 | \n", - "Génépi de Savoie L'Ancienne | \n", - "{} | \n", - "[] | \n", - "[en:beverages, en:alcoholic-beverages] | \n", - "
29203 | \n", - "6 carrés fourrés, saveur amande | \n", - "{en:biscuits-and-cakes, en:sugary-snacks} | \n", - "[] | \n", - "[en:desserts] | \n", - "
29204 | \n", - "Multivitamins | \n", - "{en:plant-based-foods-and-beverages} | \n", - "[] | \n", - "[en:beverages, en:plant-based-beverages, en:no... | \n", - "
29205 | \n", - "Instantané aux châtaignes | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29206 | \n", - "Nuggets de Poulet | \n", - "{en:meats} | \n", - "[] | \n", - "[en:fresh-foods, en:meals] | \n", - "
29207 | \n", - "Jus d'orange | \n", - "{en:beverages} | \n", - "[en:fruit-based-beverages, en:plant-based-beve... | \n", - "[en:non-sugared-beverages] | \n", - "
29208 | \n", - "Зефир с ароматом крем-брюле | \n", - "{} | \n", - "[] | \n", - "[en:sugary-snacks] | \n", - "
29209 | \n", - "Coca-cola | \n", - "{en:beverages} | \n", - "[en:sugared-beverages] | \n", - "[en:non-sugared-beverages] | \n", - "
29210 | \n", - "Citron vert bio | \n", - "{} | \n", - "[en:beverages] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29211 | \n", - "Weiße Riesenbohnen | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29212 | \n", - "Haricots Verts à la Périgourdine | \n", - "{en:plant-based-foods, en:plant-based-foods-an... | \n", - "[en:fruits-and-vegetables-based-foods, en:vege... | \n", - "[en:frozen-foods] | \n", - "
29213 | \n", - "Steaks Hachés Charolais Façon Bouchère | \n", - "{en:meats} | \n", - "[] | \n", - "[en:frozen-foods] | \n", - "
29214 | \n", - "Tortilla Wraps Plain | \n", - "{} | \n", - "[en:salty-snacks] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29215 | \n", - "nan | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:bevera... | \n", - "
29216 | \n", - "Korma de légumes BIO | \n", - "{} | \n", - "[] | \n", - "[en:meals] | \n", - "
29217 | \n", - "Cake Release Spray | \n", - "{} | \n", - "[en:biscuits-and-cakes, en:desserts, en:sugary... | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29218 | \n", - "Maxi Quenelles à Gratiner, Jambon sauce béchamel | \n", - "{} | \n", - "[] | \n", - "[en:canned-foods, en:meals] | \n", - "
29219 | \n", - "Alpro Oat Almond | \n", - "{} | \n", - "[] | \n", - "[en:beverages, en:dairies, en:non-sugared-beve... | \n", - "
29220 | \n", - "Nectarinas | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29221 | \n", - "Ratatouille cuisinée à la Provençale | \n", - "{en:meals} | \n", - "[] | \n", - "[en:canned-foods] | \n", - "
29222 | \n", - "Filet de poulet (-25% de sel) (4+2 gratuites) | \n", - "{en:meats} | \n", - "[] | \n", - "[en:prepared-meats] | \n", - "
29223 | \n", - "Boisson gazeuse goût framboise | \n", - "{en:beverages} | \n", - "[en:non-sugared-beverages] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29224 | \n", - "Potato Wedges | \n", - "{} | \n", - "[en:salty-snacks] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29225 | \n", - "Fleur de Sel aux Épices Grillées | \n", - "{} | \n", - "[] | \n", - "[en:plant-based-foods-and-beverages, en:plant-... | \n", - "
29226 | \n", - "Pétales à la crevette | \n", - "{} | \n", - "[] | \n", - "[en:salty-snacks] | \n", - "
29227 rows × 4 columns
\n", - "254732 rows × 2 columns
\n", + "254376 rows × 2 columns
\n", "" ], "text/plain": [ @@ -2008,44 +1218,44 @@ "28 Thai Curry Roasted Cashews \n", "29 Wasabi Tamari Almonds \n", "... ... \n", - "254702 Fairy Tail \n", - "254703 Biscuits aux céréales, aux pépites de chocolat... \n", - "254704 Dico anglais \n", - "254705 Neszt Cochon Con \n", - "254706 Drid apricot the queen \n", - "254707 Natural Cassava \n", - "254708 nan \n", - "254709 nan \n", - "254710 Soda 1 \n", - "254711 Merci 1 \n", - "254712 Merci2 \n", - "254713 Merci3 \n", - "254714 Libro parachute3 \n", - "254715 nan \n", - "254716 Vegan easy \n", - "254717 Tarifs djoghrafia \n", - "254718 nan \n", - "254719 Ferrero Rocher \n", - "254720 nan \n", - "254721 Raspados Ice Bars \n", - "254722 nf test \n", - "254723 Amandes \n", - "254724 Mleko wiejskie \n", - "254725 Poireaux \n", - "254726 Cheese cake thé vert, yuzu \n", - "254727 Tomato & ricotta \n", - "254728 Mint Melange Tea A Blend Of Peppermint, Lemon ... \n", - "254729 Biscottes bio \n", - "254730 Tomates aux Vermicelles \n", - "254731 Sugar Free Drink Mix, Peach Tea \n", + "254346 Fairy Tail \n", + "254347 Biscuits aux céréales, aux pépites de chocolat... \n", + "254348 Neszt Cochon Con \n", + "254349 nan \n", + "254350 Drid apricot the queen \n", + "254351 Natural Cassava \n", + "254352 nan \n", + "254353 nan \n", + "254354 Soda 1 \n", + "254355 Merci 1 \n", + "254356 Merci2 \n", + "254357 Merci3 \n", + "254358 Libro parachute3 \n", + "254359 nan \n", + "254360 Vegan easy \n", + "254361 Tarifs djoghrafia \n", + "254362 nan \n", + "254363 Ferrero Rocher \n", + "254364 nan \n", + "254365 Raspados Ice Bars \n", + "254366 nf test \n", + "254367 Amandes \n", + "254368 Mleko wiejskie \n", + "254369 Poireaux \n", + "254370 Cheese cake thé vert, yuzu \n", + "254371 Tomato & ricotta \n", + "254372 Mint Melange Tea A Blend Of Peppermint, Lemon ... \n", + "254373 Biscottes bio \n", + "254374 Tomates aux Vermicelles \n", + "254375 Sugar Free Drink Mix, Peach Tea \n", "\n", " guessed_labels \n", - "0 (en:cereals-and-potatoes, en:cereals-and-their... \n", - "1 (en:appetizers, en:chips-and-fries, en:crisps,... \n", + "0 (en:cereal-flours, en:cereals-and-potatoes, en... \n", + "1 () \n", "2 (en:legumes, en:legumes-and-their-products, en... \n", "3 () \n", "4 (en:cereals-and-potatoes, en:cereals-and-their... \n", - "5 (en:breakfasts, en:cereals-and-potatoes, en:ce... \n", + "5 (en:breakfasts, en:sugary-snacks) \n", "6 (en:cereal-grains, en:cereals-and-potatoes, en... \n", "7 (en:breakfast-cereals, en:breakfasts, en:cerea... \n", "8 (en:chocolates, en:dark-chocolates, en:sugary-... \n", @@ -2056,56 +1266,56 @@ "13 (en:plant-based-foods, en:plant-based-foods-an... \n", "14 () \n", "15 (en:breakfast-cereals, en:breakfasts, en:cerea... \n", - "16 (en:sugary-snacks,) \n", - "17 (en:appetizers, en:chips-and-fries, en:crisps,... \n", - "18 (en:cereals-and-potatoes, en:cereals-and-their... \n", + "16 () \n", + "17 () \n", + "18 (en:cereal-grains, en:cereals-and-their-produc... \n", "19 () \n", - "20 (en:beverages,) \n", - "21 (en:sugary-snacks,) \n", - "22 (en:cereals-and-potatoes, en:plant-based-foods... \n", - "23 (en:plant-based-foods, en:plant-based-foods-an... \n", - "24 (en:plant-based-foods, en:spreads) \n", - "25 (en:groceries,) \n", - "26 (en:plant-based-foods-and-beverages,) \n", - "27 (en:appetizers, en:plant-based-foods-and-bever... \n", - "28 (en:plant-based-foods, en:plant-based-foods-an... \n", - "29 () \n", + "20 () \n", + "21 (en:plant-based-foods-and-beverages,) \n", + "22 (en:plant-based-foods, en:plant-based-foods-an... \n", + "23 () \n", + "24 (en:plant-based-foods,) \n", + "25 (en:chips-and-fries, en:crisps, en:groceries, ... \n", + "26 (en:plant-based-foods, en:plant-based-foods-an... \n", + "27 (en:cashew-nuts, en:nuts, en:plant-based-foods... \n", + "28 (en:cashew-nuts, en:plant-based-foods, en:plan... \n", + "29 (en:condiments, en:groceries, en:plant-based-f... \n", "... ... \n", - "254702 () \n", - "254703 (en:biscuits, en:biscuits-and-cakes, en:sugary... \n", - "254704 (en:plant-based-foods, en:plant-based-foods-an... \n", - "254705 () \n", - "254706 (en:beverages,) \n", - "254707 (en:beverages,) \n", - "254708 () \n", - "254709 () \n", - "254710 (en:beverages, en:carbonated-drinks, en:sodas,... \n", - "254711 (en:candies, en:chocolates, en:confectioneries... \n", - "254712 () \n", - "254713 () \n", - "254714 () \n", - "254715 () \n", - "254716 () \n", - "254717 () \n", - "254718 () \n", - "254719 (en:chocolates,) \n", - "254720 () \n", - "254721 (en:sugary-snacks,) \n", - "254722 () \n", - "254723 (en:nuts-and-their-products, en:plant-based-fo... \n", - "254724 (en:dairies, en:milks) \n", - "254725 (en:fruits-and-vegetables-based-foods, en:plan... \n", - "254726 (en:herbal-teas,) \n", - "254727 (en:plant-based-foods, en:plant-based-foods-an... \n", - "254728 (en:beverages, en:non-sugared-beverages) \n", - "254729 (en:breads, en:cereals-and-potatoes, en:plant-... \n", - "254730 (en:fruits-and-vegetables-based-foods, en:plan... \n", - "254731 (en:beverages, en:plant-based-beverages, en:su... \n", + "254346 () \n", + "254347 (en:biscuits, en:biscuits-and-cakes, en:sugary... \n", + "254348 () \n", + "254349 () \n", + "254350 (en:beverages,) \n", + "254351 (en:plant-based-foods-and-beverages,) \n", + "254352 () \n", + "254353 () \n", + "254354 (en:beverages, en:carbonated-drinks, en:sodas,... \n", + "254355 (en:bonbons, en:candies, en:chocolates, en:cho... \n", + "254356 () \n", + "254357 () \n", + "254358 () \n", + "254359 () \n", + "254360 (en:plant-based-foods, en:plant-based-foods-an... \n", + "254361 () \n", + "254362 () \n", + "254363 (en:chocolates, en:sugary-snacks) \n", + "254364 () \n", + "254365 (en:bars, en:cereal-bars, en:sugary-snacks) \n", + "254366 (en:beverages,) \n", + "254367 (en:almonds, en:chocolates-with-almonds, en:nu... \n", + "254368 (en:dairies, en:milks) \n", + "254369 (en:fruits-and-vegetables-based-foods, en:leek... \n", + "254370 () \n", + "254371 () \n", + "254372 (en:beverages, en:non-sugared-beverages, en:su... \n", + "254373 (en:breads, en:cereals-and-potatoes, en:plant-... \n", + "254374 (en:fruits-and-vegetables-based-foods, en:meal... \n", + "254375 (en:artificially-sweetened-beverages, en:bever... \n", "\n", - "[254732 rows x 2 columns]" + "[254376 rows x 2 columns]" ] }, - "execution_count": 102, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -2119,85 +1329,71 @@ "prediction_dataframe" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Port to JS" + ] + }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn_porter import Porter" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the classifier\n", + "mlb, classifier = joblib.load('offClassifier.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "0 True\n", - "1 True\n", - "2 True\n", - "3 False\n", - "4 True\n", - "5 True\n", - "6 True\n", - "7 True\n", - "8 True\n", - "9 True\n", - "10 True\n", - "11 True\n", - "12 False\n", - "13 True\n", - "14 False\n", - "15 True\n", - "16 True\n", - "17 True\n", - "18 True\n", - "19 False\n", - "20 True\n", - "21 True\n", - "22 True\n", - "23 True\n", - "24 True\n", - "25 True\n", - "26 True\n", - "27 True\n", - "28 True\n", - "29 False\n", - " ... \n", - "254702 False\n", - "254703 True\n", - "254704 True\n", - "254705 False\n", - "254706 True\n", - "254707 True\n", - "254708 False\n", - "254709 False\n", - "254710 True\n", - "254711 True\n", - "254712 False\n", - "254713 False\n", - "254714 False\n", - "254715 False\n", - "254716 False\n", - "254717 False\n", - "254718 False\n", - "254719 True\n", - "254720 False\n", - "254721 True\n", - "254722 False\n", - "254723 True\n", - "254724 True\n", - "254725 True\n", - "254726 True\n", - "254727 True\n", - "254728 True\n", - "254729 True\n", - "254730 True\n", - "254731 True\n", - "Name: guessed_labels, Length: 254732, dtype: bool" - ] - }, - "execution_count": 103, - "metadata": {}, - "output_type": "execute_result" + "ename": "ValueError", + "evalue": "The given model 'Pipeline(memory=None,\n steps=[('vectorizer', CountVectorizer(analyzer='word', binary=False, decode_error='strict',\n dtype=