{ "cells": [ { "cell_type": "markdown", "id": "6bdfd636", "metadata": {}, "source": [ "# Import Libaries" ] }, { "cell_type": "code", "execution_count": 1, "id": "7bee9b73", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd" ] }, { "cell_type": "markdown", "id": "2822305c", "metadata": {}, "source": [ "# Importing Data" ] }, { "cell_type": "code", "execution_count": 2, "id": "5b6f8884", "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", "
NPKtemperaturehumidityphrainfalllabel
090424320.87974482.0027446.502985202.935536rice
185584121.77046280.3196447.038096226.655537rice
260554423.00445982.3207637.840207263.964248rice
374354026.49109680.1583636.980401242.864034rice
478424220.13017581.6048737.628473262.717340rice
\n", "
" ], "text/plain": [ " N P K temperature humidity ph rainfall label\n", "0 90 42 43 20.879744 82.002744 6.502985 202.935536 rice\n", "1 85 58 41 21.770462 80.319644 7.038096 226.655537 rice\n", "2 60 55 44 23.004459 82.320763 7.840207 263.964248 rice\n", "3 74 35 40 26.491096 80.158363 6.980401 242.864034 rice\n", "4 78 42 42 20.130175 81.604873 7.628473 262.717340 rice" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop = pd.read_csv(\"Crop_recommendation.csv\")\n", "crop.head()" ] }, { "cell_type": "markdown", "id": "e9ddfb22", "metadata": {}, "source": [ "# Asq Six Question to yourself" ] }, { "cell_type": "code", "execution_count": 3, "id": "3ca70c00", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2200, 8)" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop.shape" ] }, { "cell_type": "code", "execution_count": 4, "id": "e2ae9b60", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 2200 entries, 0 to 2199\n", "Data columns (total 8 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 N 2200 non-null int64 \n", " 1 P 2200 non-null int64 \n", " 2 K 2200 non-null int64 \n", " 3 temperature 2200 non-null float64\n", " 4 humidity 2200 non-null float64\n", " 5 ph 2200 non-null float64\n", " 6 rainfall 2200 non-null float64\n", " 7 label 2200 non-null object \n", "dtypes: float64(4), int64(3), object(1)\n", "memory usage: 137.6+ KB\n" ] } ], "source": [ "crop.info()" ] }, { "cell_type": "code", "execution_count": 5, "id": "9efad4c4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "N 0\n", "P 0\n", "K 0\n", "temperature 0\n", "humidity 0\n", "ph 0\n", "rainfall 0\n", "label 0\n", "dtype: int64" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop.isnull().sum()" ] }, { "cell_type": "code", "execution_count": 6, "id": "1f7bf8c5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop.duplicated().sum()" ] }, { "cell_type": "code", "execution_count": 7, "id": "3d5b7413", "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", "
NPKtemperaturehumidityphrainfall
count2200.0000002200.0000002200.0000002200.0000002200.0000002200.0000002200.000000
mean50.55181853.36272748.14909125.61624471.4817796.469480103.463655
std36.91733432.98588350.6479315.06374922.2638120.77393854.958389
min0.0000005.0000005.0000008.82567514.2580403.50475220.211267
25%21.00000028.00000020.00000022.76937560.2619535.97169364.551686
50%37.00000051.00000032.00000025.59869380.4731466.42504594.867624
75%84.25000068.00000049.00000028.56165489.9487716.923643124.267508
max140.000000145.000000205.00000043.67549399.9818769.935091298.560117
\n", "
" ], "text/plain": [ " N P K temperature humidity \\\n", "count 2200.000000 2200.000000 2200.000000 2200.000000 2200.000000 \n", "mean 50.551818 53.362727 48.149091 25.616244 71.481779 \n", "std 36.917334 32.985883 50.647931 5.063749 22.263812 \n", "min 0.000000 5.000000 5.000000 8.825675 14.258040 \n", "25% 21.000000 28.000000 20.000000 22.769375 60.261953 \n", "50% 37.000000 51.000000 32.000000 25.598693 80.473146 \n", "75% 84.250000 68.000000 49.000000 28.561654 89.948771 \n", "max 140.000000 145.000000 205.000000 43.675493 99.981876 \n", "\n", " ph rainfall \n", "count 2200.000000 2200.000000 \n", "mean 6.469480 103.463655 \n", "std 0.773938 54.958389 \n", "min 3.504752 20.211267 \n", "25% 5.971693 64.551686 \n", "50% 6.425045 94.867624 \n", "75% 6.923643 124.267508 \n", "max 9.935091 298.560117 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop.describe()" ] }, { "cell_type": "code", "execution_count": 8, "id": "1056bfba", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "label\n", "rice 100\n", "maize 100\n", "jute 100\n", "cotton 100\n", "coconut 100\n", "papaya 100\n", "orange 100\n", "apple 100\n", "muskmelon 100\n", "watermelon 100\n", "grapes 100\n", "mango 100\n", "banana 100\n", "pomegranate 100\n", "lentil 100\n", "blackgram 100\n", "mungbean 100\n", "mothbeans 100\n", "pigeonpeas 100\n", "kidneybeans 100\n", "chickpea 100\n", "coffee 100\n", "Name: count, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop['label'].value_counts()" ] }, { "cell_type": "markdown", "id": "3e3af150", "metadata": {}, "source": [ "# Encoding" ] }, { "cell_type": "code", "execution_count": 9, "id": "8c35d395", "metadata": {}, "outputs": [], "source": [ "crop_dict = {\n", " 'rice': 1,\n", " 'maize': 2,\n", " 'jute': 3,\n", " 'cotton': 4,\n", " 'coconut': 5,\n", " 'papaya': 6,\n", " 'orange': 7,\n", " 'apple': 8,\n", " 'muskmelon': 9,\n", " 'watermelon': 10,\n", " 'grapes': 11,\n", " 'mango': 12,\n", " 'banana': 13,\n", " 'pomegranate': 14,\n", " 'lentil': 15,\n", " 'blackgram': 16,\n", " 'mungbean': 17,\n", " 'mothbeans': 18,\n", " 'pigeonpeas': 19,\n", " 'kidneybeans': 20,\n", " 'chickpea': 21,\n", " 'coffee': 22\n", "}\n", "crop['crop_num']= crop['label'].map(crop_dict)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b1a53f7f", "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", "
NPKtemperaturehumidityphrainfalllabelcrop_num
090424320.87974482.0027446.502985202.935536rice1
185584121.77046280.3196447.038096226.655537rice1
260554423.00445982.3207637.840207263.964248rice1
374354026.49109680.1583636.980401242.864034rice1
478424220.13017581.6048737.628473262.717340rice1
..............................
2195107343226.77463766.4132696.780064177.774507coffee22
219699152727.41711256.6363626.086922127.924610coffee22
2197118333024.13179767.2251236.362608173.322839coffee22
2198117323426.27241852.1273946.758793127.175293coffee22
2199104183023.60301660.3964756.779833140.937041coffee22
\n", "

2200 rows × 9 columns

\n", "
" ], "text/plain": [ " N P K temperature humidity ph rainfall label \\\n", "0 90 42 43 20.879744 82.002744 6.502985 202.935536 rice \n", "1 85 58 41 21.770462 80.319644 7.038096 226.655537 rice \n", "2 60 55 44 23.004459 82.320763 7.840207 263.964248 rice \n", "3 74 35 40 26.491096 80.158363 6.980401 242.864034 rice \n", "4 78 42 42 20.130175 81.604873 7.628473 262.717340 rice \n", "... ... .. .. ... ... ... ... ... \n", "2195 107 34 32 26.774637 66.413269 6.780064 177.774507 coffee \n", "2196 99 15 27 27.417112 56.636362 6.086922 127.924610 coffee \n", "2197 118 33 30 24.131797 67.225123 6.362608 173.322839 coffee \n", "2198 117 32 34 26.272418 52.127394 6.758793 127.175293 coffee \n", "2199 104 18 30 23.603016 60.396475 6.779833 140.937041 coffee \n", "\n", " crop_num \n", "0 1 \n", "1 1 \n", "2 1 \n", "3 1 \n", "4 1 \n", "... ... \n", "2195 22 \n", "2196 22 \n", "2197 22 \n", "2198 22 \n", "2199 22 \n", "\n", "[2200 rows x 9 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop" ] }, { "cell_type": "code", "execution_count": 11, "id": "dff5caca", "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", "
NPKtemperaturehumidityphrainfallcrop_num
090424320.87974482.0027446.502985202.9355361
185584121.77046280.3196447.038096226.6555371
260554423.00445982.3207637.840207263.9642481
374354026.49109680.1583636.980401242.8640341
478424220.13017581.6048737.628473262.7173401
\n", "
" ], "text/plain": [ " N P K temperature humidity ph rainfall crop_num\n", "0 90 42 43 20.879744 82.002744 6.502985 202.935536 1\n", "1 85 58 41 21.770462 80.319644 7.038096 226.655537 1\n", "2 60 55 44 23.004459 82.320763 7.840207 263.964248 1\n", "3 74 35 40 26.491096 80.158363 6.980401 242.864034 1\n", "4 78 42 42 20.130175 81.604873 7.628473 262.717340 1" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "crop.drop(['label'],axis=1,inplace=True)\n", "crop.head()" ] }, { "cell_type": "markdown", "id": "a5494675", "metadata": {}, "source": [ "# Train Test Split" ] }, { "cell_type": "code", "execution_count": 12, "id": "5a049f55", "metadata": {}, "outputs": [], "source": [ "X = crop.drop(['crop_num'],axis=1)\n", "y = crop['crop_num']" ] }, { "cell_type": "code", "execution_count": 13, "id": "9d223a69", "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", "
NPKtemperaturehumidityphrainfall
090424320.87974482.0027446.502985202.935536
185584121.77046280.3196447.038096226.655537
260554423.00445982.3207637.840207263.964248
374354026.49109680.1583636.980401242.864034
478424220.13017581.6048737.628473262.717340
........................
2195107343226.77463766.4132696.780064177.774507
219699152727.41711256.6363626.086922127.924610
2197118333024.13179767.2251236.362608173.322839
2198117323426.27241852.1273946.758793127.175293
2199104183023.60301660.3964756.779833140.937041
\n", "

2200 rows × 7 columns

\n", "
" ], "text/plain": [ " N P K temperature humidity ph rainfall\n", "0 90 42 43 20.879744 82.002744 6.502985 202.935536\n", "1 85 58 41 21.770462 80.319644 7.038096 226.655537\n", "2 60 55 44 23.004459 82.320763 7.840207 263.964248\n", "3 74 35 40 26.491096 80.158363 6.980401 242.864034\n", "4 78 42 42 20.130175 81.604873 7.628473 262.717340\n", "... ... .. .. ... ... ... ...\n", "2195 107 34 32 26.774637 66.413269 6.780064 177.774507\n", "2196 99 15 27 27.417112 56.636362 6.086922 127.924610\n", "2197 118 33 30 24.131797 67.225123 6.362608 173.322839\n", "2198 117 32 34 26.272418 52.127394 6.758793 127.175293\n", "2199 104 18 30 23.603016 60.396475 6.779833 140.937041\n", "\n", "[2200 rows x 7 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 14, "id": "d2601fcf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0 1\n", "1 1\n", "2 1\n", "3 1\n", "4 1\n", " ..\n", "2195 22\n", "2196 22\n", "2197 22\n", "2198 22\n", "2199 22\n", "Name: crop_num, Length: 2200, dtype: int64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y" ] }, { "cell_type": "code", "execution_count": 15, "id": "c561ea31", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(2200,)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y.shape" ] }, { "cell_type": "code", "execution_count": 16, "id": "caba8efb", "metadata": {}, "outputs": [], "source": [ "from sklearn.model_selection import train_test_split" ] }, { "cell_type": "code", "execution_count": 17, "id": "6774a9dd", "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", "execution_count": 18, "id": "41b6bcbb", "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", "
NPKtemperaturehumidityphrainfall
165617161416.39624392.1815196.625539102.944161
75237791927.54384869.3478637.14394369.408782
8927732527.52185663.1321537.28805745.208411
1041101704825.36059275.0319336.012697116.553145
11790173035.47478347.9723056.27913497.790725
........................
1638105521.21307091.3534927.817846112.983436
1095108944727.35911684.5462506.38743190.812505
113011363127.92063351.7796596.475449100.258567
12941112420413.42988680.0663406.36114171.400430
86032782223.97081462.3555767.00703853.409060
\n", "

1760 rows × 7 columns

\n", "
" ], "text/plain": [ " N P K temperature humidity ph rainfall\n", "1656 17 16 14 16.396243 92.181519 6.625539 102.944161\n", "752 37 79 19 27.543848 69.347863 7.143943 69.408782\n", "892 7 73 25 27.521856 63.132153 7.288057 45.208411\n", "1041 101 70 48 25.360592 75.031933 6.012697 116.553145\n", "1179 0 17 30 35.474783 47.972305 6.279134 97.790725\n", "... ... ... ... ... ... ... ...\n", "1638 10 5 5 21.213070 91.353492 7.817846 112.983436\n", "1095 108 94 47 27.359116 84.546250 6.387431 90.812505\n", "1130 11 36 31 27.920633 51.779659 6.475449 100.258567\n", "1294 11 124 204 13.429886 80.066340 6.361141 71.400430\n", "860 32 78 22 23.970814 62.355576 7.007038 53.409060\n", "\n", "[1760 rows x 7 columns]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train" ] }, { "cell_type": "markdown", "id": "ab13cdf8", "metadata": {}, "source": [ "\n", "# Scale the features using MinMaxScaler" ] }, { "cell_type": "code", "execution_count": 19, "id": "f19981a7", "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import MinMaxScaler\n", "ms = MinMaxScaler()\n", "\n", "X_train = ms.fit_transform(X_train)\n", "X_test = ms.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 20, "id": "f3f50c64", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0.12142857, 0.07857143, 0.045 , ..., 0.9089898 , 0.48532225,\n", " 0.29685161],\n", " [0.26428571, 0.52857143, 0.07 , ..., 0.64257946, 0.56594073,\n", " 0.17630752],\n", " [0.05 , 0.48571429, 0.1 , ..., 0.57005802, 0.58835229,\n", " 0.08931844],\n", " ...,\n", " [0.07857143, 0.22142857, 0.13 , ..., 0.43760347, 0.46198144,\n", " 0.28719815],\n", " [0.07857143, 0.85 , 0.995 , ..., 0.76763665, 0.44420505,\n", " 0.18346657],\n", " [0.22857143, 0.52142857, 0.085 , ..., 0.56099735, 0.54465022,\n", " 0.11879596]])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X_train" ] }, { "cell_type": "markdown", "id": "752a08ae", "metadata": {}, "source": [ "# Training Models" ] }, { "cell_type": "code", "execution_count": 21, "id": "ac6ef55e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Support Vector Machine with accuracy: 0.9681818181818181\n", "Confusion matrix: [[14 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 20 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]\n", " [ 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 19 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 21 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 20 2 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17]]\n", "==========================================================\n", "K-Nearest Neighbors with accuracy: 0.9704545454545455\n", "Confusion matrix: [[14 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 1 0 22 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 19 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 21 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 20 2 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17]]\n", "==========================================================\n", "Random Forest with accuracy: 0.9931818181818182\n", "Confusion matrix: [[17 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 21 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 27 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 17 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 21 0 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 11 0 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 19 0 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 23 0 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 23 0 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20 0 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 26 0]\n", " [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17]]\n", "==========================================================\n" ] } ], "source": [ "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.metrics import accuracy_score, confusion_matrix\n", "\n", "# create instances of only the selected models\n", "models = {\n", " 'Support Vector Machine': SVC(),\n", " 'K-Nearest Neighbors': KNeighborsClassifier(),\n", " 'Random Forest': RandomForestClassifier(),\n", "}\n", "\n", "# iterate through the selected models\n", "for name, model in models.items():\n", " model.fit(X_train, y_train)\n", " y_pred = model.predict(X_test)\n", " \n", " print(f\"{name} with accuracy: {accuracy_score(y_test, y_pred)}\")\n", " print(\"Confusion matrix:\", confusion_matrix(y_test, y_pred))\n", " print(\"==========================================================\")\n" ] }, { "cell_type": "code", "execution_count": 22, "id": "e63aba03-0610-4864-87a1-7f755bdfaf07", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Support Vector Machine with accuracy: 0.9681818181818181\n", "K-Nearest Neighbors with accuracy: 0.9704545454545455\n", "Random Forest with accuracy: 0.9931818181818182\n" ] }, { "data": { "image/png": "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fpejo6P69OmjqVOnytHRUb1799azzz5rDe1vvvmmWrdurfLlyyssLEzffPONli1bpu+///6B444YMUIVKlRQyZIldePGDa1atSpNwR4AAAAAMlu6nkmX7swI3+9l1oB+V8GCBRUbG6uEhATVq1dPCQkJD90nODhYERERun79uk17ZGSkXn31VQ0aNEjFihVT06ZNtW3bNuuCesOHD1f58uVVv3591apVS76+vmrevPlDj1egQAFt3rxZSUlJql+/vkqVKqV+/frJy8tLdnZ28vT01MaNG9WwYUMFBwfrnXfe0aRJk/Tiiy9Kkrp27apixYqpYsWKypMnjzZv3pzmz+c///mPDMOwaStdurRiY2N1+PBhPffccypXrpyGDx9ufYb8Xvb29lqxYoUuX76sSpUqqUuXLnrnnXckKcUicw/j5uamIUOGqH379qpatapcXV21cOFC6/bmzZvro48+0oQJE1SyZEl99tlnioyMVK1atR44rpOTk4YNG6bSpUvr+eefl729vc24AAAAAJBVLMa9qQzIYJs3b1aNGjX022+/pVgpP7tJTEyUl5eXptUNkKtDur/jAgAAAJAFIlYfyfAx72aDixcvytPTM8PGfaSUERsbqyZNmigoKEjPPPOMmjZtqh9//DHDikL2tnz5cq1fv17Hjh3T999/r27duql69erZPqADAAAAQGZLd0j/8ssvVbduXbm5ualv377q3bu3XF1dFRYWpvnz52dGjchmLl26pF69eikkJETh4eGqVKmSvv7666wuCwAAAABML923uxcvXlzdunXTgAEDbNonT56smTNnpviNauBJwu3uAAAAQPbzRN/ufuTIETVp0iRFe9OmTXX06NEMKQoAAAAAgKdRukO6n5+foqOjU7RHR0dbVzYHAAAAAADpl+7fSR80aJD69u2ruLg4VatWTRaLRZs2bVJUVJQ++uijzKgRAAAAAICnQrpDes+ePeXr66tJkyZp8eLFku48p75o0SI1a9YswwsEAAAAAOBpke6QLkkvvfSSXnrppYyuBQAAAACApxrLUwMAAAAAYBLpnknPmTOnLBZLinaLxSIXFxcFBQUpPDxcr732WoYUCAAAAADA0yLdIX3EiBEaM2aMXnzxRVWuXFmGYWjHjh1as2aNXn/9dR09elQ9e/bU7du31bVr18yoGQAAAACAJ1K6Q/qmTZv0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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "from sklearn.svm import SVC\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.metrics import accuracy_score, confusion_matrix\n", "\n", "# create instances of only the selected models\n", "models = {\n", " 'Support Vector Machine': SVC(),\n", " 'K-Nearest Neighbors': KNeighborsClassifier(),\n", " 'Random Forest': RandomForestClassifier(),\n", "}\n", "\n", "# to store model names and accuracies for plotting\n", "model_names = []\n", "accuracies = []\n", "\n", "# iterate through the selected models\n", "for name, model in models.items():\n", " model.fit(X_train, y_train)\n", " y_pred = model.predict(X_test)\n", " \n", " accuracy = accuracy_score(y_test, y_pred)\n", " model_names.append(name)\n", " accuracies.append(accuracy)\n", " \n", " print(f\"{name} with accuracy: {accuracy}\")\n", " \n", "\n", "# set up the DataFrame for Seaborn\n", "import pandas as pd\n", "results_df = pd.DataFrame({'Algorithm': model_names, 'Accuracy': accuracies})\n", "\n", "# plot the accuracies using Seaborn\n", "plt.figure(figsize=(10, 5), dpi=100)\n", "sns.barplot(x='Accuracy', y='Algorithm', data=results_df, palette='dark')\n", "plt.title('Accuracy Comparison')\n", "plt.xlabel('Accuracy')\n", "plt.ylabel('Algorithm')\n", "plt.xlim(0, 1) # assuming accuracy is between 0 and 1\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 23, "id": "4659be4d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.9931818181818182" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rfc = RandomForestClassifier()\n", "rfc.fit(X_train,y_train)\n", "ypred = rfc.predict(X_test)\n", "accuracy_score(y_test,ypred)" ] }, { "cell_type": "markdown", "id": "859d9922", "metadata": {}, "source": [ "# Predictive System" ] }, { "cell_type": "code", "execution_count": 24, "id": "17f3a3fe", "metadata": {}, "outputs": [], "source": [ "def recommendation(N, P, K, temperature, humidity, ph, rainfall):\n", " features = np.array([[N, P, K, temperature, humidity, ph, rainfall]])\n", " transformed_features = ms.transform(features) # Use transform only\n", " prediction = rfc.predict(transformed_features)\n", " return prediction[0]" ] }, { "cell_type": "code", "execution_count": 25, "id": "64ffd9d3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Kidneybeans is a best crop to be cultivated \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "E:\\anaconda\\Lib\\site-packages\\sklearn\\base.py:493: UserWarning: X does not have valid feature names, but MinMaxScaler was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "# new inputs\n", "\n", "\n", "N = 40\n", "P = 50\n", "k = 50\n", "temperature = 40.0\n", "humidity = 20\n", "ph = 100\n", "rainfall = 100\n", "\n", "predict = recommendation(N,P,k,temperature,humidity,ph,rainfall)\n", "\n", "crop_dict = {1: \"Rice\", 2: \"Maize\", 3: \"Jute\", 4: \"Cotton\", 5: \"Coconut\", 6: \"Papaya\", 7: \"Orange\",\n", " 8: \"Apple\", 9: \"Muskmelon\", 10: \"Watermelon\", 11: \"Grapes\", 12: \"Mango\", 13: \"Banana\",\n", " 14: \"Pomegranate\", 15: \"Lentil\", 16: \"Blackgram\", 17: \"Mungbean\", 18: \"Mothbeans\",\n", " 19: \"Pigeonpeas\", 20: \"Kidneybeans\", 21: \"Chickpea\", 22: \"Coffee\"}\n", "\n", "if predict in crop_dict:\n", " crop = crop_dict[predict]\n", " print(\"{} is a best crop to be cultivated \".format(crop))\n", "else:\n", " print(\"Sorry are not able to recommend a proper crop for this environment\")" ] }, { "cell_type": "code", "execution_count": 26, "id": "2ea8ffda", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Banana is a best crop to be cultivated \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "E:\\anaconda\\Lib\\site-packages\\sklearn\\base.py:493: UserWarning: X does not have valid feature names, but MinMaxScaler was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "# new inputs 2\n", "\n", "\n", "N = 100\n", "P = 90\n", "k = 100\n", "temperature = 50.0\n", "humidity = 90.0\n", "ph = 100\n", "rainfall = 202.0\n", "\n", "predict = recommendation(N,P,k,temperature,humidity,ph,rainfall)\n", "\n", "crop_dict = {1: \"Rice\", 2: \"Maize\", 3: \"Jute\", 4: \"Cotton\", 5: \"Coconut\", 6: \"Papaya\", 7: \"Orange\",\n", " 8: \"Apple\", 9: \"Muskmelon\", 10: \"Watermelon\", 11: \"Grapes\", 12: \"Mango\", 13: \"Banana\",\n", " 14: \"Pomegranate\", 15: \"Lentil\", 16: \"Blackgram\", 17: \"Mungbean\", 18: \"Mothbeans\",\n", " 19: \"Pigeonpeas\", 20: \"Kidneybeans\", 21: \"Chickpea\", 22: \"Coffee\"}\n", "\n", "if predict in crop_dict:\n", " crop = crop_dict[predict]\n", " print(\"{} is a best crop to be cultivated \".format(crop))\n", "else:\n", " print(\"Sorry are not able to recommend a proper crop for this environment\")" ] }, { "cell_type": "code", "execution_count": 27, "id": "d0dccd4e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Orange is a best crop to be cultivated \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "E:\\anaconda\\Lib\\site-packages\\sklearn\\base.py:493: UserWarning: X does not have valid feature names, but MinMaxScaler was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "# new inputs 2\n", "N = 10\n", "P = 10\n", "k = 10\n", "temperature = 15.0\n", "humidity = 80.0\n", "ph = 4.5\n", "rainfall = 10.0\n", "\n", "predict = recommendation(N,P,k,temperature,humidity,ph,rainfall)\n", "\n", "crop_dict = {1: \"Rice\", 2: \"Maize\", 3: \"Jute\", 4: \"Cotton\", 5: \"Coconut\", 6: \"Papaya\", 7: \"Orange\",\n", " 8: \"Apple\", 9: \"Muskmelon\", 10: \"Watermelon\", 11: \"Grapes\", 12: \"Mango\", 13: \"Banana\",\n", " 14: \"Pomegranate\", 15: \"Lentil\", 16: \"Blackgram\", 17: \"Mungbean\", 18: \"Mothbeans\",\n", " 19: \"Pigeonpeas\", 20: \"Kidneybeans\", 21: \"Chickpea\", 22: \"Coffee\"}\n", "\n", "if predict in crop_dict:\n", " crop = crop_dict[predict]\n", " print(\"{} is a best crop to be cultivated \".format(crop))\n", "else:\n", " print(\"Sorry are not able to recommend a proper crop for this environment\")" ] }, { "cell_type": "code", "execution_count": 28, "id": "6761fdaf-6bd8-464e-b61a-2cff2f98e08d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Papaya is the best crop to be cultivated.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "E:\\anaconda\\Lib\\site-packages\\sklearn\\base.py:493: UserWarning: X does not have valid feature names, but MinMaxScaler was fitted with feature names\n", " warnings.warn(\n" ] } ], "source": [ "N = 40 # Nitrogen\n", "P = 45 # Phosphorus\n", "K = 40 # Potassium\n", "temperature = 20.0 # Celsius\n", "humidity = 80.0 # Percentage\n", "ph = 6.0 # pH\n", "rainfall = 150.0 # mm\n", "\n", "predict = recommendation(N, P, K, temperature, humidity, ph, rainfall)\n", "\n", "if predict in crop_dict:\n", " crop = crop_dict[predict]\n", " print(\"{} is the best crop to be cultivated.\".format(crop))\n", "else:\n", " print(\"Sorry, we are not able to recommend a proper crop for this environment.\")" ] }, { "cell_type": "code", "execution_count": 29, "id": "fa3d3b8c", "metadata": {}, "outputs": [], "source": [ "import pickle\n", "pickle.dump(rfc,open('model.pkl','wb'))\n", "pickle.dump(ms,open('minmaxscaler.pkl','wb'))" ] }, { "cell_type": "code", "execution_count": null, "id": "a55a48a3", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "c97733fc", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.3" } }, "nbformat": 4, "nbformat_minor": 5 }