From 58ecfde92e342e222762f09b01d7c975264b3825 Mon Sep 17 00:00:00 2001 From: Akash Date: Tue, 19 Dec 2023 14:46:56 +0530 Subject: [PATCH] RF --- README.md | 1 + .../LinearRegressionSingleVariable.py | 79 -- .../Linear_Regression_Single_Variable.ipynb | 56 - ...ngle_Variable_(DataSet with area only).csv | 14 - ...r_Regression_Single_Variable_(DataSet).csv | 6 - .../support_vector_machine.py | 95 -- .../support_vector_machine_(SVM).ipynb | 1068 ---------------- ...ple_Variable_(MultiLinearRegression).ipynb | 1090 ----------------- .../MultiLinear Regression(Exercise).csv | 9 - .../MultiLinear Regression.csv | 6 - .../MultiLinearRegression.py | 76 -- .../Gradient_Decent_and_Cost_Function.ipynb | 43 - .../Save_Model_Using_Joblib_and_Pickle.ipynb | 286 ----- .../Save_model_using_Joblib_pickle.py | 70 -- .../model_joblib | Bin 848 -> 0 bytes .../model_pickle | Bin 512 -> 0 bytes ...Dummy_Variables_and_One_Hot_Encoding.ipynb | 0 .../canada_per_capita_income.csv | 48 - .../Train_Test_Split.py | 45 - .../Training_and_Testing_Data.ipynb | 515 -------- .../carprices.csv | 21 - .../Binary_Classification.ipynb | 510 -------- .../Binary_Classification.py | 68 - .../insurance_data.csv | 28 - ...gression_(MulitClass_Classification).ipynb | 560 --------- .../logistic_regression(multi_class).py | 81 -- Tutorial/9. Decision Tree/Decision_Tree.ipynb | 711 ----------- Tutorial/9. Decision Tree/Decision_tree.py | 57 - Tutorial/9. Decision Tree/salaries.csv | 17 - 29 files changed, 1 insertion(+), 5559 deletions(-) delete mode 100644 Tutorial/1. Linear Regression Single Variable/LinearRegressionSingleVariable.py delete mode 100644 Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable.ipynb delete mode 100644 Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet with area only).csv delete mode 100644 Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet).csv delete mode 100644 Tutorial/10. Support Vector Machine (SVM)/support_vector_machine.py delete mode 100644 Tutorial/10. Support Vector Machine (SVM)/support_vector_machine_(SVM).ipynb delete mode 100644 Tutorial/2. Linear Regression Multiple Variable/Linear_Regression_Multiple_Variable_(MultiLinearRegression).ipynb delete mode 100644 Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression(Exercise).csv delete mode 100644 Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression.csv delete mode 100644 Tutorial/2. Linear Regression Multiple Variable/MultiLinearRegression.py delete mode 100644 Tutorial/3. Gradient Decent and Cost Function/Gradient_Decent_and_Cost_Function.ipynb delete mode 100644 Tutorial/4. Save Model Using Joblib and Pickle/Save_Model_Using_Joblib_and_Pickle.ipynb delete mode 100644 Tutorial/4. Save Model Using Joblib and Pickle/Save_model_using_Joblib_pickle.py delete mode 100644 Tutorial/4. Save Model Using Joblib and Pickle/model_joblib delete mode 100644 Tutorial/4. Save Model Using Joblib and Pickle/model_pickle delete mode 100644 Tutorial/5. Dummy Variable and One Hot Encoding/Dummy_Variables_and_One_Hot_Encoding.ipynb delete mode 100644 Tutorial/5. Dummy Variable and One Hot Encoding/canada_per_capita_income.csv delete mode 100644 Tutorial/6. Training and Testing Data/Train_Test_Split.py delete mode 100644 Tutorial/6. Training and Testing Data/Training_and_Testing_Data.ipynb delete mode 100644 Tutorial/6. Training and Testing Data/carprices.csv delete mode 100644 Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.ipynb delete mode 100644 Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.py delete mode 100644 Tutorial/7. Logistic Regression(Binary Classification)/insurance_data.csv delete mode 100644 Tutorial/8. Logistic Regression(Multiclass Classification)/Logistic_Regression_(MulitClass_Classification).ipynb delete mode 100644 Tutorial/8. Logistic Regression(Multiclass Classification)/logistic_regression(multi_class).py delete mode 100644 Tutorial/9. Decision Tree/Decision_Tree.ipynb delete mode 100644 Tutorial/9. Decision Tree/Decision_tree.py delete mode 100644 Tutorial/9. Decision Tree/salaries.csv diff --git a/README.md b/README.md index d64b560..068bfe7 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ 8. Logistic Regression (Multiclass Classification)
9. Decision Tree
10. Support Vector Machine (SVM)
+11. Random Forest

Deep Learning


1. [Potato Disease Classification](https://github.com/AkashKobal/potato-disease-classification.git) diff --git a/Tutorial/1. Linear Regression Single Variable/LinearRegressionSingleVariable.py b/Tutorial/1. Linear Regression Single Variable/LinearRegressionSingleVariable.py deleted file mode 100644 index 562e784..0000000 --- a/Tutorial/1. Linear Regression Single Variable/LinearRegressionSingleVariable.py +++ /dev/null @@ -1,79 +0,0 @@ -# Linear Regression Single Variable -# How to predict home price using Machine Learning. -# We will use Linear Regression to predict the price of a home in the Bengaluru, YNK area. -# Price = m * area + b (m = slope intercept, b = Y intercept) -# area is an independent variable, Price is a dependent variable (depend on x) - -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt -from sklearn import linear_model -# importing the data file using pandas -df = pd.read_csv("Linear_Regression_Single_Variable_(DataSet).csv") -df - -%matplotlib inline -import matplotlib.pyplot as plt - - - -# importing the data file using pandas -df = pd.read_csv("Linear_Regression_Single_Variable_(DataSet).csv") - -#ploting the scatter plot to get idea, .scatter(df.name_of_the_colum_for_x-axis, df.name_of_the_colum_for_y-axis, aditional feature(color,size,marker)) -plt.scatter(df.area, df.price, color = "red", marker="+") -plt.xlabel("area(sq ft)") #labeling the x-axis -plt.ylabel("price(INR)") #labeling the y-axis - -reg = linear_model.LinearRegression() #creating an object for linear regression using linear_model package from sklearn -# reg is the model name -reg.fit(df[["area"]],df.price) #fit the data (training the model with available data set) -#passing the argumnents i,e dataFrame in 2D as x-axis and price as y-axis -#know, It is ready to predict the price. - -#Doing prediction -reg.predict([[3300]]) -#By giving the new area , it is going to predict the new price -# y = m * x + b -reg.coef_ # to find the coefficient(m) -reg.intercept_ # to find the intercept(b) -# y = m * x +b -y = 135.78767123 * 3300 + 180616.43835616432 #3300 is the area which we want to predict the price -#ploting the line using the predicted data(x-axis(df.area),y-axis(reg.predict(df[['area']]))) - -plt.scatter(df.area, df.price, color = "red", marker="+") -plt.xlabel("area(sq ft)") #labeling the x-axis -plt.ylabel("price(INR)") #labeling the y-axis -plt.plot(df.area, reg.predict(df[["area"]]), color = "blue") #plotting the line -plt.show()#Predicted price of houses with area greater than 1000 sqft is : **print -#ploting the line using the formula y = m * x + b -# df without price -d = pd.read_csv("Linear_Regression_Single_Variable_(DataSet with area only).csv") -d.head(3) -#predicting the data set using the previous data -# previous data set contain area and price, but new data set contain only area , here we are going to predict whole price of the data set using previous dataset -p = reg.predict(d) -reg.predict(d) -d['price'] = p #creating a colum price to store or dispaly the data(predicted price data), and assigning the data(pridicted value) to it. -d -#to get the data (export the data in same csv file) -# d.to_csv("Linear_Regression_Single_Variable_(DataSet with area only).csv",index=False) #index = False to remove index value (which it will defalt add in csv file while exporting) -#Exercise predict the Canada income of the year 2020 using canada_per_capita_income.csv - -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt -from sklearn import linear_model -data = pd.read_csv("canada_per_capita_income.csv") -data.head(5) - -%matplotlib inline -import matplotlib.pyplot as plt -plt.scatter(df.year,df.income,color = "blue", marker="*") -plt.xlabel("area") -plt.ylabel("price") -plt.plot(df.year,reg.predict(df[['year']]),color = "red") -plt.show() -reg = linear_model.LinearRegression() -reg.fit(df[['year']],df.income) -reg.predict([[2020]]) \ No newline at end of file diff --git a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable.ipynb b/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable.ipynb deleted file mode 100644 index 34d7e40..0000000 --- a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable.ipynb +++ /dev/null @@ -1,56 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "ename": "FileNotFoundError", - "evalue": "[Errno 2] No such file or directory: 'Prediction\\\\stockData.csv'", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32mc:\\Users\\Admin\\Desktop\\ADS Github\\Learnings\\Linear_Regression_Single_Variable.ipynb Cell 2\u001b[0m line \u001b[0;36m1\n\u001b[1;32m----> 1\u001b[0m df \u001b[39m=\u001b[39m pd\u001b[39m.\u001b[39;49mread_csv(\u001b[39m\"\u001b[39;49m\u001b[39mPrediction\u001b[39;49m\u001b[39m\\\u001b[39;49m\u001b[39mstockData.csv\u001b[39;49m\u001b[39m\"\u001b[39;49m)\n\u001b[0;32m 2\u001b[0m df\n", - "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pandas\\io\\parsers\\readers.py:912\u001b[0m, in \u001b[0;36mread_csv\u001b[1;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[0;32m 899\u001b[0m kwds_defaults \u001b[39m=\u001b[39m _refine_defaults_read(\n\u001b[0;32m 900\u001b[0m dialect,\n\u001b[0;32m 901\u001b[0m delimiter,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 908\u001b[0m dtype_backend\u001b[39m=\u001b[39mdtype_backend,\n\u001b[0;32m 909\u001b[0m )\n\u001b[0;32m 910\u001b[0m kwds\u001b[39m.\u001b[39mupdate(kwds_defaults)\n\u001b[1;32m--> 912\u001b[0m \u001b[39mreturn\u001b[39;00m _read(filepath_or_buffer, kwds)\n", - "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pandas\\io\\parsers\\readers.py:577\u001b[0m, in \u001b[0;36m_read\u001b[1;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[0;32m 574\u001b[0m _validate_names(kwds\u001b[39m.\u001b[39mget(\u001b[39m\"\u001b[39m\u001b[39mnames\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mNone\u001b[39;00m))\n\u001b[0;32m 576\u001b[0m \u001b[39m# Create the parser.\u001b[39;00m\n\u001b[1;32m--> 577\u001b[0m parser \u001b[39m=\u001b[39m TextFileReader(filepath_or_buffer, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwds)\n\u001b[0;32m 579\u001b[0m \u001b[39mif\u001b[39;00m chunksize \u001b[39mor\u001b[39;00m iterator:\n\u001b[0;32m 580\u001b[0m \u001b[39mreturn\u001b[39;00m parser\n", - "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pandas\\io\\parsers\\readers.py:1407\u001b[0m, in \u001b[0;36mTextFileReader.__init__\u001b[1;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[0;32m 1404\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39moptions[\u001b[39m\"\u001b[39m\u001b[39mhas_index_names\u001b[39m\u001b[39m\"\u001b[39m] \u001b[39m=\u001b[39m kwds[\u001b[39m\"\u001b[39m\u001b[39mhas_index_names\u001b[39m\u001b[39m\"\u001b[39m]\n\u001b[0;32m 1406\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles: IOHandles \u001b[39m|\u001b[39m \u001b[39mNone\u001b[39;00m \u001b[39m=\u001b[39m \u001b[39mNone\u001b[39;00m\n\u001b[1;32m-> 1407\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_engine \u001b[39m=\u001b[39m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_make_engine(f, \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49mengine)\n", - "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pandas\\io\\parsers\\readers.py:1661\u001b[0m, in \u001b[0;36mTextFileReader._make_engine\u001b[1;34m(self, f, engine)\u001b[0m\n\u001b[0;32m 1659\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39mb\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m mode:\n\u001b[0;32m 1660\u001b[0m mode \u001b[39m+\u001b[39m\u001b[39m=\u001b[39m \u001b[39m\"\u001b[39m\u001b[39mb\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m-> 1661\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles \u001b[39m=\u001b[39m get_handle(\n\u001b[0;32m 1662\u001b[0m f,\n\u001b[0;32m 1663\u001b[0m mode,\n\u001b[0;32m 1664\u001b[0m encoding\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49moptions\u001b[39m.\u001b[39;49mget(\u001b[39m\"\u001b[39;49m\u001b[39mencoding\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39mNone\u001b[39;49;00m),\n\u001b[0;32m 1665\u001b[0m compression\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49moptions\u001b[39m.\u001b[39;49mget(\u001b[39m\"\u001b[39;49m\u001b[39mcompression\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39mNone\u001b[39;49;00m),\n\u001b[0;32m 1666\u001b[0m memory_map\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49moptions\u001b[39m.\u001b[39;49mget(\u001b[39m\"\u001b[39;49m\u001b[39mmemory_map\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39mFalse\u001b[39;49;00m),\n\u001b[0;32m 1667\u001b[0m is_text\u001b[39m=\u001b[39;49mis_text,\n\u001b[0;32m 1668\u001b[0m errors\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49moptions\u001b[39m.\u001b[39;49mget(\u001b[39m\"\u001b[39;49m\u001b[39mencoding_errors\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39m\"\u001b[39;49m\u001b[39mstrict\u001b[39;49m\u001b[39m\"\u001b[39;49m),\n\u001b[0;32m 1669\u001b[0m storage_options\u001b[39m=\u001b[39;49m\u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49moptions\u001b[39m.\u001b[39;49mget(\u001b[39m\"\u001b[39;49m\u001b[39mstorage_options\u001b[39;49m\u001b[39m\"\u001b[39;49m, \u001b[39mNone\u001b[39;49;00m),\n\u001b[0;32m 1670\u001b[0m )\n\u001b[0;32m 1671\u001b[0m \u001b[39massert\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m\n\u001b[0;32m 1672\u001b[0m f \u001b[39m=\u001b[39m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mhandles\u001b[39m.\u001b[39mhandle\n", - "File \u001b[1;32m~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\pandas\\io\\common.py:859\u001b[0m, in \u001b[0;36mget_handle\u001b[1;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[0;32m 854\u001b[0m \u001b[39melif\u001b[39;00m \u001b[39misinstance\u001b[39m(handle, \u001b[39mstr\u001b[39m):\n\u001b[0;32m 855\u001b[0m \u001b[39m# Check whether the filename is to be opened in binary mode.\u001b[39;00m\n\u001b[0;32m 856\u001b[0m \u001b[39m# Binary mode does not support 'encoding' and 'newline'.\u001b[39;00m\n\u001b[0;32m 857\u001b[0m \u001b[39mif\u001b[39;00m ioargs\u001b[39m.\u001b[39mencoding \u001b[39mand\u001b[39;00m \u001b[39m\"\u001b[39m\u001b[39mb\u001b[39m\u001b[39m\"\u001b[39m \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m ioargs\u001b[39m.\u001b[39mmode:\n\u001b[0;32m 858\u001b[0m \u001b[39m# Encoding\u001b[39;00m\n\u001b[1;32m--> 859\u001b[0m handle \u001b[39m=\u001b[39m \u001b[39mopen\u001b[39;49m(\n\u001b[0;32m 860\u001b[0m handle,\n\u001b[0;32m 861\u001b[0m ioargs\u001b[39m.\u001b[39;49mmode,\n\u001b[0;32m 862\u001b[0m encoding\u001b[39m=\u001b[39;49mioargs\u001b[39m.\u001b[39;49mencoding,\n\u001b[0;32m 863\u001b[0m errors\u001b[39m=\u001b[39;49merrors,\n\u001b[0;32m 864\u001b[0m newline\u001b[39m=\u001b[39;49m\u001b[39m\"\u001b[39;49m\u001b[39m\"\u001b[39;49m,\n\u001b[0;32m 865\u001b[0m )\n\u001b[0;32m 866\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 867\u001b[0m \u001b[39m# Binary mode\u001b[39;00m\n\u001b[0;32m 868\u001b[0m handle \u001b[39m=\u001b[39m \u001b[39mopen\u001b[39m(handle, ioargs\u001b[39m.\u001b[39mmode)\n", - "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'Prediction\\\\stockData.csv'" - ] - } - ], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet with area only).csv b/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet with area only).csv deleted file mode 100644 index 21ad34e..0000000 --- a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet with area only).csv +++ /dev/null @@ -1,14 +0,0 @@ -area -1000 -1500 -2300 -3540 -4120 -4560 -5490 -3860 -4750 -2300 -9000 -8600 -7100 diff --git a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet).csv b/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet).csv deleted file mode 100644 index dfd67fd..0000000 --- a/Tutorial/1. Linear Regression Single Variable/Linear_Regression_Single_Variable_(DataSet).csv +++ /dev/null @@ -1,6 +0,0 @@ -area,price -2600,550000 -3000,565000 -3200,610000 -3600,680000 -4000,725000 diff --git a/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine.py b/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine.py deleted file mode 100644 index 66ecd46..0000000 --- a/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine.py +++ /dev/null @@ -1,95 +0,0 @@ -print("Support Vector Machine") -# z = x^2 + y^2 -# z is a transformation -#importing iris dataset from sklearn.datasets -import pandas as pd -from sklearn.datasets import load_iris -iris = load_iris() -#get the features of the dataset -iris.feature_names -#get the target of the dataset -iris.target_names - -#convert dataset into dataframe -df = pd.DataFrame(iris.data, columns=iris.feature_names) -df.head() -#create a target colum -df['target'] = iris.target -df.head() - -df0 = df[df.target==0] -df1 = df[df.target==1] -df2 = df[df.target==2] -df['flower_name'] =df.target.apply(lambda x: iris.target_names[x]) -#lambada is function or transformation, which transforms the target value to the -#corresponding flower name, for this transformation we use apply function -# target value 0 is converted into setosa -# target value 1 is converted into versicolor -# target value 2 is converted into virginica -df.head() -df0.head()# 0 for setosa -df1.head()# 1 for versicolor -df2.head()# 2 for virginica -# creating the graphs for better visualization -import matplotlib.pyplot as plt -# **Sepal length vs Sepal Width (Setosa vs Versicolor)** -plt.xlabel('Sepal Length') -plt.ylabel('Sepal Width') -plt.scatter(df0['sepal length (cm)'], df0['sepal width (cm)'],color="green",marker='+') -plt.scatter(df1['sepal length (cm)'], df1['sepal width (cm)'],color="blue",marker='.') - - -# **Petal length vs Pepal Width (Setosa vs Versicolor)** -plt.xlabel('Petal Length') -plt.ylabel('Petal Width') -plt.scatter(df0['petal length (cm)'], df0['petal width (cm)'],color="green",marker='+') -plt.scatter(df1['petal length (cm)'], df1['petal width (cm)'],color="blue",marker='.') - -# **Train Using Support Vector Machine (SVM)** -from sklearn.model_selection import train_test_split -X = df.drop(['target','flower_name'], axis='columns') -y = df.target -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) - -#find the length of the model -len(X_train) -len(y_train) -#print out the first 5 rows of X_train and y_train -X_train.head() -y_train.head() - -from sklearn.svm import SVC -#create an object to train. -model = SVC() -#train the model fit function -model.fit(X_train, y_train) - -#check the score of the trained model -acc = model.score(X_test, y_test) -#print the accuracy of the test data -print("Accuracy of the test data is: ",acc*100,"%") -#prediction for seatosa -model.predict([[4.8,3.0,1.5,0.3]]) -#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]]) -#prediction for versicolor -model.predict([[6.0,2.9,4.5,1.5]]) -#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]]) -#prediction for virginica -model.predict([[6.0,3.4,4.5,2.8]]) -#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]]) -# **Tune parameters** -# **1. Regularization (C)** -model_C = SVC(C=1) -model_C.fit(X_train, y_train) -model_C.score(X_test, y_test) -model_C = SVC(C=10) -model_C.fit(X_train, y_train) -model_C.score(X_test, y_test) -# **2. Gamma** -model_g = SVC(gamma=10) -model_g.fit(X_train, y_train) -model_g.score(X_test, y_test) -# **3. Kernel** -model_linear_kernal = SVC(kernel='linear') -model_linear_kernal.fit(X_train, y_train) -model_linear_kernal.score(X_test, y_test) \ No newline at end of file diff --git a/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine_(SVM).ipynb b/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine_(SVM).ipynb deleted file mode 100644 index db584bc..0000000 --- a/Tutorial/10. Support Vector Machine (SVM)/support_vector_machine_(SVM).ipynb +++ /dev/null @@ -1,1068 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 122, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Support Vector Machine\n" - ] - } - ], - "source": [ - "print(\"Support Vector Machine\")\n", - "# z = x^2 + y^2\n", - "# z is a transformation" - ] - }, - { - "cell_type": "code", - "execution_count": 123, - "metadata": {}, - "outputs": [], - "source": [ - "#importing iris dataset from sklearn.datasets\n", - "import pandas as pd\n", - "from sklearn.datasets import load_iris\n", - "iris = load_iris()" - ] - }, - { - "cell_type": "code", - "execution_count": 124, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['sepal length (cm)',\n", - " 'sepal width (cm)',\n", - " 'petal length (cm)',\n", - " 'petal width (cm)']" - ] - }, - "execution_count": 124, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#get the features of the dataset\n", - "iris.feature_names" - ] - }, - { - "cell_type": "code", - "execution_count": 125, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array(['setosa', 'versicolor', 'virginica'], dtype='\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)
05.13.51.40.2
14.93.01.40.2
24.73.21.30.2
34.63.11.50.2
45.03.61.40.2
\n", - "" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)\n", - "0 5.1 3.5 1.4 0.2\n", - "1 4.9 3.0 1.4 0.2\n", - "2 4.7 3.2 1.3 0.2\n", - "3 4.6 3.1 1.5 0.2\n", - "4 5.0 3.6 1.4 0.2" - ] - }, - "execution_count": 126, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#convert dataset into dataframe\n", - "df = pd.DataFrame(iris.data, columns=iris.feature_names)\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 127, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \n", - "0 5.1 3.5 1.4 0.2 \\\n", - "1 4.9 3.0 1.4 0.2 \n", - "2 4.7 3.2 1.3 0.2 \n", - "3 4.6 3.1 1.5 0.2 \n", - "4 5.0 3.6 1.4 0.2 \n", - "\n", - " target \n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 " - ] - }, - "execution_count": 127, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#create a target colum\n", - "df['target'] = iris.target\n", - "df.head()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 128, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)targetflower_name
05.13.51.40.20setosa
14.93.01.40.20setosa
24.73.21.30.20setosa
34.63.11.50.20setosa
45.03.61.40.20setosa
\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \n", - "0 5.1 3.5 1.4 0.2 \\\n", - "1 4.9 3.0 1.4 0.2 \n", - "2 4.7 3.2 1.3 0.2 \n", - "3 4.6 3.1 1.5 0.2 \n", - "4 5.0 3.6 1.4 0.2 \n", - "\n", - " target flower_name \n", - "0 0 setosa \n", - "1 0 setosa \n", - "2 0 setosa \n", - "3 0 setosa \n", - "4 0 setosa " - ] - }, - "execution_count": 128, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df0 = df[df.target==0]\n", - "df1 = df[df.target==1]\n", - "df2 = df[df.target==2]\n", - "df['flower_name'] =df.target.apply(lambda x: iris.target_names[x])\n", - "#lambada is function or transformation, which transforms the target value to the\n", - "#corresponding flower name, for this transformation we use apply function\n", - "# target value 0 is converted into setosa\n", - "# target value 1 is converted into versicolor\n", - "# target value 2 is converted into virginica\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 129, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \n", - "0 5.1 3.5 1.4 0.2 \\\n", - "1 4.9 3.0 1.4 0.2 \n", - "2 4.7 3.2 1.3 0.2 \n", - "3 4.6 3.1 1.5 0.2 \n", - "4 5.0 3.6 1.4 0.2 \n", - "\n", - " target \n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 " - ] - }, - "execution_count": 129, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df0.head()# 0 for setosa" - ] - }, - { - "cell_type": "code", - "execution_count": 130, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
507.03.24.71.41
516.43.24.51.51
526.93.14.91.51
535.52.34.01.31
546.52.84.61.51
\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \n", - "50 7.0 3.2 4.7 1.4 \\\n", - "51 6.4 3.2 4.5 1.5 \n", - "52 6.9 3.1 4.9 1.5 \n", - "53 5.5 2.3 4.0 1.3 \n", - "54 6.5 2.8 4.6 1.5 \n", - "\n", - " target \n", - "50 1 \n", - "51 1 \n", - "52 1 \n", - "53 1 \n", - "54 1 " - ] - }, - "execution_count": 130, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df1.head()# 1 for versicolor" - ] - }, - { - "cell_type": "code", - "execution_count": 131, - "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", - "
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
1006.33.36.02.52
1015.82.75.11.92
1027.13.05.92.12
1036.32.95.61.82
1046.53.05.82.22
\n", - "
" - ], - "text/plain": [ - " sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \n", - "100 6.3 3.3 6.0 2.5 \\\n", - "101 5.8 2.7 5.1 1.9 \n", - "102 7.1 3.0 5.9 2.1 \n", - "103 6.3 2.9 5.6 1.8 \n", - "104 6.5 3.0 5.8 2.2 \n", - "\n", - " target \n", - "100 2 \n", - "101 2 \n", - "102 2 \n", - "103 2 \n", - "104 2 " - ] - }, - "execution_count": 131, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df2.head()# 2 for virginica" - ] - }, - { - "cell_type": "code", - "execution_count": 132, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 132, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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Vuiyyy5TYWGhNm/erB9++MHXoQFAvRi5AdCg06dPa9u2bVq0aJFGjRql7t2766qrrlJ6erpuuukml+1mzZqlTp06KTIyUqNHj9aBAwecrz/22GO64oortHTpUsXHx6tt27a67bbbVFxc7NwmNzdX48aN08UXX6yoqCglJydr7969ph7PoUOHdP311ysiIkIxMTG644479P333ztfHzlypObOnavf/OY36tChg2JjY/XYY4+5vMdf//pXXXPNNQoLC1O/fv20adMml+mySy+9VJI0ePBgORwOjRw50mX/5557TnFxcerYsaPmzJmjM2fOmHqMAEhuADQiIiJCERERyszMVEVFRYPb3XrrrSoqKtL69eu1Z88eJSYmasyYMfrxxx+d2xw9elTvvPOOPvzwQ23YsEH79u3TL3/5S+frpaWlSktL06effqqdO3cqISFBKSkpKi0tNeVYTp8+rdGjR2vw4MHavXu3NmzYoMLCQt12220u261YsULh4eHatWuXnnnmGT3++OPKysqSJFVVVSk1NVVt27bVrl27tGzZMv3ud79z2f+zzz6TJG3atEknT57Un//8Z+drW7Zs0VdffaUtW7ZoxYoVWr58uZYvX27K8QE4i8frjgPwa++++67Rvn17IywszBg+fLiRnp5uHDhwwPn6tm3bjMjISOPnn3922a9Hjx7G0qVLDcMwjAULFhhBQUFGfn6+8/X169cbrVq1Mk6ePFnv362qqjLatWtnfPjhh842Scb777/fYKxpaWnG5MmT633tiSeeMMaPH+/SduLECUOScfjwYcMwDCM5Odm45pprXLYZOnSo8dBDDzljDg4Odok5KyvLJa5jx44Zkox9+/adF1v37t2N//u//3O23XrrrcaUKVMaPB4AzcPIDYBG3XLLLfr222/1wQcfaOLEicrOzlZiYqJzxOHAgQMqKytTx44dnSM9EREROnbsmL766ivn+3Tr1k1dunRxPk9KSlJ1dbUOHz4sSSosLNRdd92lhIQERUVFKTIyUmVlZcrLyzPlOA4cOKAtW7a4xNinTx9Jcolz0KBBLvvFxcWpqKhIknT48GHFx8crNjbW+fpVV13V5Bj69++voKCget8bgHlYUAzggsLCwjRu3DiNGzdOjz76qGbNmqUFCxZoxowZKisrU1xcnLKzs8/b76KLLmry30hLS9MPP/ygl156Sd27d1doaKiSkpJUWVlpyjGUlZXpxhtv1KJFi857LS4uzvl7SEiIy2sOh0PV1dWmxODJ9wZQh+QGgNv69evnXECbmJiogoICBQcH65JLLmlwn7y8PH377bfq3LmzJGnnzp1q1aqVevfuLUnKycnRH//4R6WkpEiSTpw44bLYt6USExP13nvv6ZJLLlFwcPP+6evdu7dOnDihwsJCxcTESKpZCH221q1bS6pZnwPAN5iWAtCgH374QaNHj9bKlSv1+eef69ixY1qzZo2eeeYZTZ48WZI0duxYJSUlKTU1Vf/93/+t48ePa/v27frd736n3bt3O98rLCxMaWlpOnDggLZt26a5c+fqtttuc07xJCQk6D/+4z/05ZdfateuXZo2bZratGnjdszFxcXav3+/y+PEiROaM2eOfvzxR02dOlW5ubn66quvtHHjRs2cObPJici4cePUo0cPpaWl6fPPP1dOTo4eeeQRSTWjMJIUHR2tNm3aOBcsn31FGADvILkB0KCIiAhdffXVevHFF3XddddpwIABevTRR3XXXXdp8eLFkmq+1D/66CNdd911mjlzpnr16qXbb79dX3/9tXN0Q5J69uypm2++WSkpKRo/frwGDRqkP/7xj87XX3/9dZ06dUqJiYm64447NHfuXEVHR7sdc3Z2tgYPHuzyWLhwoTp37qycnBxVVVVp/PjxGjhwoObPn6+LLrpIrVo17Z/CoKAgZWZmqqysTEOHDtWsWbOcV0uFhYVJkoKDg/Xyyy9r6dKl6ty5szMJBOA9DsMwDF8HAcDeHnvsMWVmZtryrr05OTm65pprdPToUfXo0cPX4QAQa24AwC3vv/++IiIilJCQoKNHj2revHkaMWIEiQ1gISQ3AOCG0tJSPfTQQ8rLy9PFF1+ssWPH6vnnn/d1WADOwrQUAACwFRYUAwAAWyG5AQAAtkJyAwAAbIXkBgAA2ArJDQAAsBWSGwAAYCskNwAAwFZIbgAAgK38PyuYTyvmFsJ4AAAAAElFTkSuQmCC", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# creating the graphs for better visualization\n", - "import matplotlib.pyplot as plt\n", - "# **Sepal length vs Sepal Width (Setosa vs Versicolor)**\n", - "plt.xlabel('Sepal Length')\n", - "plt.ylabel('Sepal Width')\n", - "plt.scatter(df0['sepal length (cm)'], df0['sepal width (cm)'],color=\"green\",marker='+')\n", - "plt.scatter(df1['sepal length (cm)'], df1['sepal width (cm)'],color=\"blue\",marker='.')\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 133, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 133, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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tQh6xIgROnfunCRp+PDhGjFixFU3X+zatUvTpk1TQkKCLBaLtmzZcs3XFBQUaMSIEYqIiFBKSory8vIa9Vm9erX69OmjDh06KDU1Vfv37/epLgAA0LZ5dQZo+vTpioiIcN23WCx++ePV1dUaOnSo7rrrLq9+bfro0aO69dZbdf/99+vll19Wfn6+7r77bsXHxys9PV2S9OqrryorK0tr165VamqqVq5cqfT0dB0+fFixsbF+qRsAvFVYKL33njR+vDRqVPCPW1IiFRdL/fsbd/FSX2oIhnoRohxBQpLj9ddfb7LPww8/7Bg8eLBb25133ulIT093PR49erRj/vz5rsd1dXWOhIQER05Ojte1VFZWOiQ5KisrvX4NAFwpI8PhkC5vGRnBPe4LLzgcYWHOMcPCnI9bmy81BEO9CC6+HL+9/h2g5ORkZWZm6g9/+INOnDgRsEDWlD179igtLc2tLT09XXv27JEk1dbWqqioyK1PWFiY0tLSXH08qampUVVVldsGAC1RWCht3OjetnGjsz0Yxy0pke69V6r/OTe7XbrvPmd7a/GlhmCoF6HN6wCUmZmpo0eP6t5771WfPn2UkpKie+65R6+88orKysoCWaNLWVmZevbs6dbWs2dPVVVV6X//93915swZ1dXVeezTVI05OTlu1ztLSkoKSP0AzOO99zy3794dnOMWF18OE/Xq6qQjR1o2bqBqCIZ6Edq8DkBLlixRQUGBzp8/r3fffVezZs3S//zP/ygzM1O9evXSN7/5Tc2fPz+QtQZMdna2KisrXZtRZ7gAtB3jx3tuHzcuOMft318Ku+KIYLVKKSktGzdQNQRDvQhtPl8KIyIiQpMmTdLSpUu1c+dOlZaWKjs7W6dOndLatWsDUaNLXFycysvL3drKy8sVFRWljh07qkePHrJarR77xMXFXXXciIgIRUVFuW0A0BKjRkkZGe5tGRktX7AcqHETE6X1650hQnLerlvXuguLfakhGOpFaPP5d4Bqa2u1Z88eFRQUqKCgQPv27VOvXr10++23a8KECYGo0WXMmDF666233NreffddjRkzRpIUHh6ukSNHKj8/XzNmzJAk2e125efna8GCBQGtDQCulJcnzZ/vnJ4aN85/39YK1Lhz50rp6c5ppJQUY8KELzUEQ70IXV7/EvTjjz/uCjzJycn6zne+owkTJmjChAlK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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# **Petal length vs Pepal Width (Setosa vs Versicolor)**\n", - "plt.xlabel('Petal Length')\n", - "plt.ylabel('Petal Width')\n", - "plt.scatter(df0['petal length (cm)'], df0['petal width (cm)'],color=\"green\",marker='+')\n", - "plt.scatter(df1['petal length (cm)'], df1['petal width (cm)'],color=\"blue\",marker='.')\n" - ] - }, - { - "cell_type": "code", - "execution_count": 134, - "metadata": {}, - "outputs": [], - "source": [ - "# **Train Using Support Vector Machine (SVM)**\n", - "from sklearn.model_selection import train_test_split\n", - "X = df.drop(['target','flower_name'], axis='columns')\n", - "y = df.target\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 135, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "120" - ] - }, - "execution_count": 135, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#find the length of the model\n", - "len(X_train)\n", - "len(y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 136, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "112 2\n", - "46 0\n", - "90 1\n", - "114 2\n", - "92 1\n", - "Name: target, dtype: int32" - ] - }, - "execution_count": 136, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#print out the first 5 rows of X_train and y_train\n", - "X_train.head()\n", - "y_train.head()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 137, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
SVC()
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()" - ] - }, - "execution_count": 137, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.svm import SVC\n", - "#create an object to train.\n", - "model = SVC()\n", - "#train the model fit function\n", - "model.fit(X_train, y_train)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 138, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy of the test data is: 90.0 %\n" - ] - } - ], - "source": [ - "#check the score of the trained model\n", - "acc = model.score(X_test, y_test)\n", - "#print the accuracy of the test data\n", - "print(\"Accuracy of the test data is: \",acc*100,\"%\")" - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0])" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#prediction for seatosa\n", - "model.predict([[4.8,3.0,1.5,0.3]])\n", - "#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]])" - ] - }, - { - "cell_type": "code", - "execution_count": 140, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([1])" - ] - }, - "execution_count": 140, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#prediction for versicolor\n", - "model.predict([[6.0,2.9,4.5,1.5]])\n", - "#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]])" - ] - }, - { - "cell_type": "code", - "execution_count": 141, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([2])" - ] - }, - "execution_count": 141, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#prediction for virginica\n", - "model.predict([[6.0,3.4,4.5,2.8]])\n", - "#moel.predict([[new sepal length (cm),new sepal width (cm),new petal length (cm),new petal width (cm)]])" - ] - }, - { - "cell_type": "code", - "execution_count": 142, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9666666666666667" - ] - }, - "execution_count": 142, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# **Tune parameters**\n", - "# **1. Regularization (C)**\n", - "model_C = SVC(C=1)\n", - "model_C.fit(X_train, y_train)\n", - "model_C.score(X_test, y_test)\n", - "model_C = SVC(C=10)\n", - "model_C.fit(X_train, y_train)\n", - "model_C.score(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 143, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9" - ] - }, - "execution_count": 143, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# **2. Gamma**\n", - "model_g = SVC(gamma=10)\n", - "model_g.fit(X_train, y_train)\n", - "model_g.score(X_test, y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 144, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9333333333333333" - ] - }, - "execution_count": 144, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# **3. Kernel**\n", - "model_linear_kernal = SVC(kernel='linear')\n", - "model_linear_kernal.fit(X_train, y_train)\n", - "model_linear_kernal.score(X_test, y_test)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/2. Linear Regression Multiple Variable/Linear_Regression_Multiple_Variable_(MultiLinearRegression).ipynb b/Tutorial/2. Linear Regression Multiple Variable/Linear_Regression_Multiple_Variable_(MultiLinearRegression).ipynb deleted file mode 100644 index df42294..0000000 --- a/Tutorial/2. Linear Regression Multiple Variable/Linear_Regression_Multiple_Variable_(MultiLinearRegression).ipynb +++ /dev/null @@ -1,1090 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 160, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "MultiLinear Regression\n" - ] - } - ], - "source": [ - "print(\"MultiLinear Regression\")" - ] - }, - { - "cell_type": "code", - "execution_count": 161, - "metadata": {}, - "outputs": [], - "source": [ - "# Formula \n", - "# price = m1 * area + m2 * bedroom + m3 * age + b // ( y = (M1 * X1) + (M2 * X2) + (M3 * X3) + b )\n", - "# area,bedroom,age are independent variable\n", - "# price is a dependent variable\n", - "# m1,m2,m3 are coefficient and b is an intercept\n" - ] - }, - { - "cell_type": "code", - "execution_count": 162, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn import linear_model" - ] - }, - { - "cell_type": "code", - "execution_count": 163, - "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", - "
areabedroomageprice
026003.020550000
130004.015565000
23200NaN18610000
336003.030595000
440005.08760000
\n", - "
" - ], - "text/plain": [ - " area bedroom age price\n", - "0 2600 3.0 20 550000\n", - "1 3000 4.0 15 565000\n", - "2 3200 NaN 18 610000\n", - "3 3600 3.0 30 595000\n", - "4 4000 5.0 8 760000" - ] - }, - "execution_count": 163, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.read_csv(\"MultiLinear Regression.csv\")\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 164, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3.5" - ] - }, - "execution_count": 164, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# filling the missing value (filling the NaN by taking the medain of the dataColumn(bedroom median))\n", - "df.bedroom.median() #calculating the median of the column bedroom" - ] - }, - { - "cell_type": "code", - "execution_count": 165, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "3" - ] - }, - "execution_count": 165, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# To get only integer value use math module math.floor\n", - "import math # import the library for floor function\n", - "median_bedroom = math.floor(df.bedroom.median()) #floor function\n", - "median_bedroom" - ] - }, - { - "cell_type": "code", - "execution_count": 166, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 3.0\n", - "1 4.0\n", - "2 3.0\n", - "3 3.0\n", - "4 5.0\n", - "Name: bedroom, dtype: float64" - ] - }, - "execution_count": 166, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# syntex : df.cloumName_which_we_Want_to_fill = df.cloumName.fillna(value_to_be_filled)\n", - "df.bedroom = df.bedroom.fillna(median_bedroom) #filling the missing value with median value\n", - "# first we have the data set with one missing value, so we took median of that missing value column and fill the missing value with median.\n", - "df.bedroom\n", - "# Now we have the data set with no missing value" - ] - }, - { - "cell_type": "code", - "execution_count": 167, - "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", - "
areabedroomageprice
026003.020550000
130004.015565000
232003.018610000
336003.030595000
440005.08760000
\n", - "
" - ], - "text/plain": [ - " area bedroom age price\n", - "0 2600 3.0 20 550000\n", - "1 3000 4.0 15 565000\n", - "2 3200 3.0 18 610000\n", - "3 3600 3.0 30 595000\n", - "4 4000 5.0 8 760000" - ] - }, - "execution_count": 167, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 168, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
LinearRegression()
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": [ - "LinearRegression()" - ] - }, - "execution_count": 168, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg = linear_model.LinearRegression() #creating the linear regression module\n", - "reg.fit(df[['area','bedroom','age']],df.price) #fit() is a method we use to train the data set, independent variable are written inside 2D in double\n", - "# (i,e area, bedroom, age) are independent variable , price is a dependent variable\n", - "# we train independent variable (i,e area, bedroom, age) and predict the dependent variable(i,e price)" - ] - }, - { - "cell_type": "code", - "execution_count": 169, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 137.25, -26025. , -6825. ])" - ] - }, - "execution_count": 169, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.coef_ # M1, M2, M3" - ] - }, - { - "cell_type": "code", - "execution_count": 170, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "383724.9999999998" - ] - }, - "execution_count": 170, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.intercept_# b" - ] - }, - { - "cell_type": "code", - "execution_count": 171, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([444400.])" - ] - }, - "execution_count": 171, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#predicting the room with 3000 sq ft, bedroom 3. and 40 years old \n", - "reg.predict([[3000,3,40]])" - ] - }, - { - "cell_type": "code", - "execution_count": 172, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "444399.9999999998" - ] - }, - "execution_count": 172, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# ( y = (M1 * X1) + (M2 * X2) + (M3 * X3) + b )\n", - "y = 137.25 * 3000 + -26025 * 3 + -6825* 40 + 383724.9999999998 \n", - "y\n", - "# we get the same value as we get from the predict method(rounOff value we get here using formula)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 173, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([588625.])" - ] - }, - "execution_count": 173, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#predicting the room with 2500 sq ft, bedroom 4. and 5 years old \n", - "reg.predict([[2500,4,5]])" - ] - }, - { - "cell_type": "code", - "execution_count": 174, - "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", - "
experiencetest_score(out of 10)interview_score(out 0f 10)salary($
0NaN8.0950000
1NaN8.0645000
2five6.0760000
3two10.01065000
4seven9.0670000
5three7.01062000
6tenNaN772000
7eleven7.0880000
\n", - "
" - ], - "text/plain": [ - " experience test_score(out of 10) interview_score(out 0f 10) salary($\n", - "0 NaN 8.0 9 50000\n", - "1 NaN 8.0 6 45000\n", - "2 five 6.0 7 60000\n", - "3 two 10.0 10 65000\n", - "4 seven 9.0 6 70000\n", - "5 three 7.0 10 62000\n", - "6 ten NaN 7 72000\n", - "7 eleven 7.0 8 80000" - ] - }, - "execution_count": 174, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#Exercise\n", - "# predict 2 yr of experiences, 9 test score, 6 interview score\n", - "# predict 12 yr of experiences, 10 test score, 10 interview score \n", - "\n", - "import pandas as pd\n", - "import numpy as np\n", - "from sklearn import linear_model\n", - "\n", - "df = pd.read_csv(\"MultiLinear Regression(Exercise).csv\")\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 175, - "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", - "
experiencetest_score(out of 10)interview_score(out 0f 10)salary($
008.0950000
108.0645000
256.0760000
3210.01065000
479.0670000
537.01062000
610NaN772000
7117.0880000
\n", - "
" - ], - "text/plain": [ - " experience test_score(out of 10) interview_score(out 0f 10) salary($\n", - "0 0 8.0 9 50000\n", - "1 0 8.0 6 45000\n", - "2 5 6.0 7 60000\n", - "3 2 10.0 10 65000\n", - "4 7 9.0 6 70000\n", - "5 3 7.0 10 62000\n", - "6 10 NaN 7 72000\n", - "7 11 7.0 8 80000" - ] - }, - "execution_count": 175, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from word2number import w2n\n", - "# asuming experience as zero \n", - "\n", - "\n", - "# syntax : data_frame.column_name = data_frame.column_name.apply(w2n.word_to_num)\n", - "df['experience'] = df['experience'].fillna('zero')\n", - "df.experience = df.experience.apply(w2n.word_to_num)\n", - "\n", - "# converting the words to number because regression is only for numbers\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 176, - "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", - "
experiencetest_scoreinterview_scoresalary
008.0950000
108.0645000
256.0760000
3210.01065000
479.0670000
537.01062000
610NaN772000
7117.0880000
\n", - "
" - ], - "text/plain": [ - " experience test_score interview_score salary\n", - "0 0 8.0 9 50000\n", - "1 0 8.0 6 45000\n", - "2 5 6.0 7 60000\n", - "3 2 10.0 10 65000\n", - "4 7 9.0 6 70000\n", - "5 3 7.0 10 62000\n", - "6 10 NaN 7 72000\n", - "7 11 7.0 8 80000" - ] - }, - "execution_count": 176, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#changing the column name\n", - "\n", - "df.rename(columns={\"test_score(out of 10)\":\"test_score\"},inplace=True)\n", - "df.rename(columns={\"interview_score(out 0f 10)\":\"interview_score\"},inplace=True)\n", - "df.rename(columns={\"salary($\":\"salary\"},inplace=True)\n", - "\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 177, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "8" - ] - }, - "execution_count": 177, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import math\n", - "median_testScore = math.floor(df.test_score.median())\n", - "median_testScore" - ] - }, - { - "cell_type": "code", - "execution_count": 178, - "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", - "
experiencetest_scoreinterview_scoresalary
008.0950000
108.0645000
256.0760000
3210.01065000
479.0670000
537.01062000
6108.0772000
7117.0880000
\n", - "
" - ], - "text/plain": [ - " experience test_score interview_score salary\n", - "0 0 8.0 9 50000\n", - "1 0 8.0 6 45000\n", - "2 5 6.0 7 60000\n", - "3 2 10.0 10 65000\n", - "4 7 9.0 6 70000\n", - "5 3 7.0 10 62000\n", - "6 10 8.0 7 72000\n", - "7 11 7.0 8 80000" - ] - }, - "execution_count": 178, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df.test_score = df.test_score.fillna(median_testScore)\n", - "df" - ] - }, - { - "cell_type": "code", - "execution_count": 179, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
LinearRegression()
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": [ - "LinearRegression()" - ] - }, - "execution_count": 179, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg = linear_model.LinearRegression()\n", - "reg.fit(df[[\"experience\",\"test_score\",\"interview_score\"]],df.salary)" - ] - }, - { - "cell_type": "code", - "execution_count": 181, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([2812.95487627, 1845.70596798, 2205.24017467])" - ] - }, - "execution_count": 181, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.coef_" - ] - }, - { - "cell_type": "code", - "execution_count": 182, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "17737.263464337688" - ] - }, - "execution_count": 182, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.intercept_" - ] - }, - { - "cell_type": "code", - "execution_count": 183, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([53205.96797671])" - ] - }, - "execution_count": 183, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.predict([[2,9,6]])" - ] - }, - { - "cell_type": "code", - "execution_count": 184, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([92002.18340611])" - ] - }, - "execution_count": 184, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reg.predict([[12,10,10]])" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression(Exercise).csv b/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression(Exercise).csv deleted file mode 100644 index a0bff41..0000000 --- a/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression(Exercise).csv +++ /dev/null @@ -1,9 +0,0 @@ -experience,test_score(out of 10),interview_score(out 0f 10),salary($ -,8,9,50000 -,8,6,45000 -five,6,7,60000 -two,10,10,65000 -seven,9,6,70000 -three,7,10,62000 -ten,,7,72000 -eleven,7,8,80000 diff --git a/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression.csv b/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression.csv deleted file mode 100644 index 9f13533..0000000 --- a/Tutorial/2. Linear Regression Multiple Variable/MultiLinear Regression.csv +++ /dev/null @@ -1,6 +0,0 @@ -area,bedroom,age,price -2600,3,20,550000 -3000,4,15,565000 -3200,,18,610000 -3600,3,30,595000 -4000,5,8,760000 diff --git a/Tutorial/2. Linear Regression Multiple Variable/MultiLinearRegression.py b/Tutorial/2. Linear Regression Multiple Variable/MultiLinearRegression.py deleted file mode 100644 index 1281545..0000000 --- a/Tutorial/2. Linear Regression Multiple Variable/MultiLinearRegression.py +++ /dev/null @@ -1,76 +0,0 @@ -print("MultiLinear Regression") -# Formula -# price = m1 * area + m2 * bedroom + m3 * age + b // ( y = (M1 * X1) + (M2 * X2) + (M3 * X3) + b ) -# area,bedroom,age are independent variable -# price is a dependent variable -# m1,m2,m3 are coefficient and b is an intercept - -import pandas as pd -import numpy as np -from sklearn import linear_model -df = pd.read_csv("MultiLinear Regression.csv") -df -# filling the missing value (filling the NaN by taking the medain of the dataColumn(bedroom median)) -df.bedroom.median() #calculating the median of the column bedroom -# To get only integer value use math module math.floor -import math # import the library for floor function -median_bedroom = math.floor(df.bedroom.median()) #floor function -median_bedroom -# syntex : df.cloumName_which_we_Want_to_fill = df.cloumName.fillna(value_to_be_filled) -df.bedroom = df.bedroom.fillna(median_bedroom) #filling the missing value with median value -# first we have the data set with one missing value, so we took median of that missing value column and fill the missing value with median. -df.bedroom -# Now we have the data set with no missing value -df -reg = linear_model.LinearRegression() #creating the linear regression module -reg.fit(df[['area','bedroom','age']],df.price) #fit() is a method we use to train the data set, independent variable are written inside 2D in double -# (i,e area, bedroom, age) are independent variable , price is a dependent variable -# we train independent variable (i,e area, bedroom, age) and predict the dependent variable(i,e price) -reg.coef_ # M1, M2, M3 -reg.intercept_# b -#predicting the room with 3000 sq ft, bedroom 3. and 40 years old -reg.predict([[3000,3,40]]) -# ( y = (M1 * X1) + (M2 * X2) + (M3 * X3) + b ) -y = 137.25 * 3000 + -26025 * 3 + -6825* 40 + 383724.9999999998 -y -# we get the same value as we get from the predict method(rounOff value we get here using formula) - -#predicting the room with 2500 sq ft, bedroom 4. and 5 years old -reg.predict([[2500,4,5]]) -#Exercise -# predict 2 yr of experiences, 9 test score, 6 interview score -# predict 12 yr of experiences, 10 test score, 10 interview score - -import pandas as pd -import numpy as np -from sklearn import linear_model - -df = pd.read_csv("MultiLinear Regression(Exercise).csv") -df -from word2number import w2n -# asuming experience as zero - - -# syntax : data_frame.column_name = data_frame.column_name.apply(w2n.word_to_num) -df['experience'] = df['experience'].fillna('zero') -df.experience = df.experience.apply(w2n.word_to_num) - -# converting the words to number because regression is only for numbers -df -#changing the column name - -df.rename(columns={"test_score(out of 10)":"test_score"},inplace=True) -df.rename(columns={"interview_score(out 0f 10)":"interview_score"},inplace=True) -df.rename(columns={"salary($":"salary"},inplace=True) - -df -import math -median_testScore = math.floor(df.test_score.median()) -median_testScore -df.test_score = df.test_score.fillna(median_testScore) -df -reg = linear_model.LinearRegression() -reg.fit(df[["experience","test_score","interview_score"]],df.salary) -reg.coef_ -reg.intercept_ -reg.predict([[2,9,6]]) \ No newline at end of file diff --git a/Tutorial/3. Gradient Decent and Cost Function/Gradient_Decent_and_Cost_Function.ipynb b/Tutorial/3. Gradient Decent and Cost Function/Gradient_Decent_and_Cost_Function.ipynb deleted file mode 100644 index 2b2c470..0000000 --- a/Tutorial/3. Gradient Decent and Cost Function/Gradient_Decent_and_Cost_Function.ipynb +++ /dev/null @@ -1,43 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Gradient Decent and Cost Function\n" - ] - } - ], - "source": [ - "print(\"Gradient Decent and Cost Function\")\n", - "# Gradient decent is an algorithm that finds best fit line for given training data set\n" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/4. Save Model Using Joblib and Pickle/Save_Model_Using_Joblib_and_Pickle.ipynb b/Tutorial/4. Save Model Using Joblib and Pickle/Save_Model_Using_Joblib_and_Pickle.ipynb deleted file mode 100644 index 1b64d2d..0000000 --- a/Tutorial/4. Save Model Using Joblib and Pickle/Save_Model_Using_Joblib_and_Pickle.ipynb +++ /dev/null @@ -1,286 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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7P6rROLigNatlYLK0hL46CNg61YWVERERGWBLVWVgIgyV19YGJCTAzz2GLBqlXJTOhEREZUNFlUVnIgyEfLKlcp69+5ARARQo4a2eREREVU17P6r4HQ6IDAQsLYGZs8GfvyRBRUREZEW2FJVCYweDXTpAjzxhNaZEBERVV1sqaoEdDoWVERERFpjUUVERERUAlhUEREREZUAFlVEREREJYBFFREREVEJYFFFREREVAJYVBERERGVABZVRERERCWARRURERFRCWBRRURERFQCNC2qpk2bBp1OZ7b4+voCAK5du4YxY8agYcOGsLW1hbe3N8aOHQuj0Wh2jDtfr9PpEBkZaRazc+dOtGrVCgaDAfXr18fSpUsL5TJnzhzUqVMHNjY2CAgIwMGDB832Z2VlYfTo0ahRowYcHBzQu3dvpKamluwFISIiogpL85aqJk2aIDk5WV327t0LALh8+TIuX76MTz75BPHx8Vi6dCm2bNmCIUOGFDpGRESE2TF69uyp7ktMTERISAieeeYZxMXFYdy4cRg6dCi2bt2qxqxevRphYWGYOnUqjhw5ghYtWiA4OBhXrlxRY8aPH48NGzZg7dq12LVrFy5fvoxevXqV3oUhIiKiCkUnIqLVm0+bNg0//PAD4uLiihW/du1a9OvXDxkZGbCyUuaC1ul0WLdunVkhdbuJEydi48aNiI+PV7e9/PLLSEtLw5YtWwAAAQEBaNOmDb7++msAQEFBAby8vDBmzBi88847MBqNqFmzJlauXIl//etfAIDffvsNjRo1QnR0NJ588ski3zs7OxvZ2dnquslkgpeXF4xGIxwdHYt1zkRERKQtk8kEJyen+35/a95SdebMGXh6eqJevXro27cvkpKS7hp762RuFVS3jB49Gq6urmjbti2++eYb3F4nRkdHIygoyCw+ODgY0dHRAICcnBzExsaaxVhYWCAoKEiNiY2NRW5urlmMr68vvL291ZiihIeHw8nJSV28vLyKcUWIiIioIrK6f0jpCQgIwNKlS9GwYUMkJyfjvffeQ4cOHRAfH49q1aqZxV69ehUffPABhg8fbrb9/fffx7PPPgs7Ozv8/PPPGDVqFG7cuIGxY8cCAFJSUuDu7m72Gnd3d5hMJmRmZuL69evIz88vMua3335Tj6HX6+Hs7FwoJiUl5a7nN2nSJISFhanrRqMR3t7eMJlM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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([859554.79452055])" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import matplotlib.pyplot as plt\n", - "from sklearn import linear_model\n", - "# importing the data file using pandas\n", - "df = pd.read_csv(\"Linear_Regression_Single_Variable_(DataSet).csv\")\n", - "df\n", - "\n", - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "\n", - "# importing the data file using pandas\n", - "df = pd.read_csv(\"Linear_Regression_Single_Variable_(DataSet).csv\")\n", - "\n", - "#ploting the scatter plot to get idea, .scatter(df.name_of_the_colum_for_x-axis, df.name_of_the_colum_for_y-axis, aditional feature(color,size,marker))\n", - "plt.scatter(df.area, df.price, color = \"red\", marker=\"+\")\n", - "plt.xlabel(\"area(sq ft)\") #labeling the x-axis\n", - "plt.ylabel(\"price(INR)\") #labeling the y-axis\n", - "plt.plot(df.area, reg.predict(df[[\"area\"]]), color = \"blue\") #plotting the line\n", - "plt.show()\n", - "\n", - "\n", - "reg = linear_model.LinearRegression() #creating an object for linear regression using linear_model package from sklearn\n", - "# reg is the model name \n", - "reg.fit(df[[\"area\"]],df.price) #fit the data (training the model with available data set)\n", - "#passing the argumnents i,e dataFrame in 2D as x-axis and price as y-axis\n", - "#know, It is ready to predict the price.\n", - "\n", - "#Doing prediction\n", - "reg.predict([[5000]])\n", - "#By giving the new area , it is going to predict the new price" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "# First Approach\n", - "# Save Model Using Pickle\n", - "import pickle" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "# creates a file in our directory as a file \\\n", - "# with open ('file_name_to_create','write_mode') as flie: \n", - "# open a file and load(write) the trained model into it , (because we dont want to train the model again)\n", - "with open('model_pickle','wb') as f: # f = file , wb is a write mode\n", - " pickle.dump(reg,f) #dumping the model into the file " - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "with open('model_pickle','rb') as f: # opening the file as a only read able file,\n", - " mp = pickle.load(f) # mp is an object" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([859554.79452055])" - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mp.predict([[5000]]) # predicted the data with trained model , now we can share this flie to someOne to use , say: here is my trained model know you can ask the question\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#know if i want to predict the data , just open the trained model using \n", - "with open('model_name','rb') as f: \n", - " mp = pickle.load(f)\n", - "\n", - "# and know ask the question like mp.predict()\n", - "# no need of training the data again" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "# in pickle file is given f , but in joblib it automaticly takes the file \n", - "\n", - "# Second Approach\n", - "# Save Model Using joblib\n", - "# from sklearn.externals import joblib\n", - "import joblib" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['model_joblib']" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#joblib directly takes the file\n", - "joblib.dump(reg,'model_joblib') # creates a new file (model_joblib) in our directory and dump the file (reg, which we created) into it \n", - "# joblib.dump(model_name_we_trained_(ex:reg),'Flie_name_to_be_created')" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": {}, - "outputs": [], - "source": [ - "mj = joblib.load('model_joblib')\n", - "# joblib.load('file_name') # know using mj.predict we can easily predict the data" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LinearRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([859554.79452055])" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mj.predict([[5000]])" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([135.78767123])" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mj.coef_" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "180616.43835616432" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mj.intercept_" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/4. Save Model Using Joblib and Pickle/Save_model_using_Joblib_pickle.py b/Tutorial/4. Save Model Using Joblib and Pickle/Save_model_using_Joblib_pickle.py deleted file mode 100644 index 80704fe..0000000 --- a/Tutorial/4. Save Model Using Joblib and Pickle/Save_model_using_Joblib_pickle.py +++ /dev/null @@ -1,70 +0,0 @@ -import pandas as pd -import numpy as np -import matplotlib.pyplot as plt -from sklearn import linear_model -# importing the data file using pandas -df = pd.read_csv("Linear_Regression_Single_Variable_(DataSet).csv") -df - -%matplotlib inline -import matplotlib.pyplot as plt - - - -# importing the data file using pandas -df = pd.read_csv("Linear_Regression_Single_Variable_(DataSet).csv") - -#ploting the scatter plot to get idea, .scatter(df.name_of_the_colum_for_x-axis, df.name_of_the_colum_for_y-axis, aditional feature(color,size,marker)) -plt.scatter(df.area, df.price, color = "red", marker="+") -plt.xlabel("area(sq ft)") #labeling the x-axis -plt.ylabel("price(INR)") #labeling the y-axis -plt.plot(df.area, reg.predict(df[["area"]]), color = "blue") #plotting the line -plt.show() - - -reg = linear_model.LinearRegression() #creating an object for linear regression using linear_model package from sklearn -# reg is the model name -reg.fit(df[["area"]],df.price) #fit the data (training the model with available data set) -#passing the argumnents i,e dataFrame in 2D as x-axis and price as y-axis -#know, It is ready to predict the price. - -#Doing prediction -reg.predict([[5000]]) -#By giving the new area , it is going to predict the new price - - - - - - - -# First Approach -# Save Model Using Pickle -import pickle -# creates a file in our directory as a file \ -# with open ('file_name_to_create','write_mode') as flie: -# open a file and load(write) the trained model into it , (because we dont want to train the model again) -with open('model_pickle','wb') as f: # f = file , wb is a write mode - pickle.dump(reg,f) #dumping the model into the file -with open('model_pickle','rb') as f: # opening the file as a only read able file, - mp = pickle.load(f) # mp is an object -mp.predict([[5000]]) # predicted the data with trained model , now we can share this flie to someOne to use , say: here is my trained model know you can ask the question - -#know if i want to predict the data , just open the trained model using -with open('model_name','rb') as f: - mp = pickle.load(f) - -# and know ask the question like mp.predict() -# no need of training the data again -# Second Approach -# Save Model Using joblib -# from sklearn.externals import joblib -import joblib -#joblib directly takes the file -joblib.dump(reg,'model_joblib') # creates a new file (model_joblib) in our directory and dump the file (reg, which we created) into it -# joblib.dump(model_name_we_trained_(ex:reg),'Flie_name_to_be_created') -mj = joblib.load('model_joblib') -# joblib.load('file_name') # know using mj.predict we can easily predict the data -mj.predict([[5000]]) -mj.coef_ -mj.intercept_ \ No newline at end of file diff --git a/Tutorial/4. Save Model Using Joblib and Pickle/model_joblib b/Tutorial/4. Save Model Using Joblib and Pickle/model_joblib deleted file mode 100644 index cc9377a3a29f2a26aa3423b22610c1a3761d09d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 848 zcmZ`&O-~a+815Ffl(j$$L5wDP6S!;w@qmemAQ$6mNqVstGtN$@%*yWU&c|Y!U;+oA zBy%uvdhyrzQ;hL9ka)s(w^d`K?_uZN$@6|a?=z>fqvuYgG;>!S#S}~K#}S7UC25bw zJ_@m-)-+$1mmPX2sZvqO?I*i=W3153gF@>^m(2@Y!(sd#hO;T_}!Bd4_-^0WmNttTUU8V zVyu)kZW(3G9Pi-*3n1evhBImd=N$Z0_8`}nc z9_y$Cdq`4}a;0TXv?nTKls9SF6HZV$7gd4?&`y*`dEt0srd#YM6tmqLoH5oB-xBVH zsCC5LrKoqr{6^rwl){@NEa&sYt!@?Y2Rotx^NEFyScD17Tqj~_dP>m@uil7OcNRjh zq*yFtEmlH*6v9PeW|5=G*2W799OIId_K{_cu@2Z0TV^W--)xoLW^3$@srLV3_sJBy z6=0X$AF>ApZEnH(jeYp)^P?YccSn!Mbt}e|m>(h7qnTF`Kg?rL=KpK1PvyJ*zV+<- z+sEAz`jyZ7tyECm>OVJSO-&IDg+NDaeZS7XemUE3)b{KJ=)^S9S5XT#BYL)tR(1QWDCohD!W@K- z7oWyQ5%Co)c+yQ;L(yXcsKaxhF3z@q z>r?_0yba1o8R48r+eydqV+l?>jdaMR8aliiA zqdRKQl54rv4F!{EH+3h0Ofqt?PTl*#>nK_mRIk@}KaJ&!yQ#_R9uXF~1Ww$Xa7wUY zjf3)B3vEA!7NejNOlQ1c_9tx~M_Rua8-Eyuj8QAo;{Max$MF_r5LnIzSD`pb zBh&ML@>h+v|F*Kze|;EeC%*e_BokOtJ~wjn*`Qi0i\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
MileageAge(yrs)Sell Price($)
069000618000
135000334000
257000526100
322500240000
446000431500
\n", - "" - ], - "text/plain": [ - " Mileage Age(yrs) Sell Price($)\n", - "0 69000 6 18000\n", - "1 35000 3 34000\n", - "2 57000 5 26100\n", - "3 22500 2 40000\n", - "4 46000 4 31500" - ] - }, - "execution_count": 21, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "print(\"Training and Testing Data\")\n", - "#in this data set mileage and age are independent variable and sell price is dependent variable\n", - "#in this data set we have to predict the sell price of the car\n", - "#we have to split the data into training and testing data\n", - "#we have to use linear regression model to predict the sell price of the car\n", - "#we have to use train_test_split to split the data into training and testing data\n", - "import pandas as pd\n", - "df = pd.read_csv(\"carprices.csv\")\n", - "df.head(5)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "#assigining milage and age to x and sell price to y\n", - "\n", - "x = df[[\"Mileage\",\"Age(yrs)\"]]\n", - "y = df[\"Sell Price($)\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "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", - "
MileageAge(yrs)
0690006
1350003
2570005
3225002
4460004
\n", - "
" - ], - "text/plain": [ - " Mileage Age(yrs)\n", - "0 69000 6\n", - "1 35000 3\n", - "2 57000 5\n", - "3 22500 2\n", - "4 46000 4" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "x.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "#importing train_test_split from sklearn.model_selection\n", - "#split the data into test and training , here we splited data 20% test and 80% for train\n", - "#we can also use random_state=10 in train_test_split\n", - "#random_state=10 means it will split the data randomly\n", - "# after spliting you get four parameters(X_train, X_test, Y_train, Y_test)\n", - "\n", - "from sklearn.model_selection import train_test_split\n", - "X_train, X_test, Y_train, Y_test = train_test_split(x,y,test_size=0.2,train_size=0.8)\n", - "\n", - "#X_train is the training data of independent variable\n", - "#X_test is the testing data of independent variable\n", - "#Y_train is the training data of dependent variable\n", - "#Y_test is the testing data of dependent variable\n" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "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", - "
MileageAge(yrs)
18876008
16280002
17690005
19520005
12590005
8910008
4460004
2570005
15254003
7720006
3225002
13587804
6520005
0690006
11790007
9670006
\n", - "
" - ], - "text/plain": [ - " Mileage Age(yrs)\n", - "18 87600 8\n", - "16 28000 2\n", - "17 69000 5\n", - "19 52000 5\n", - "12 59000 5\n", - "8 91000 8\n", - "4 46000 4\n", - "2 57000 5\n", - "15 25400 3\n", - "7 72000 6\n", - "3 22500 2\n", - "13 58780 4\n", - "6 52000 5\n", - "0 69000 6\n", - "11 79000 7\n", - "9 67000 6" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train\n", - "#it choose random data,(run again and clarify)\n", - "#to stop the random data should be selected use random state(it freeze the no. of data to be changed)\n", - "#X_train, X_test, Y_train, Y_test = train_test_split(x,y,test_size=0.2,train_size=0.8,random_state=10)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "16" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(X_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "4" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
LinearRegression()
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": [ - "LinearRegression()" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from sklearn.linear_model import LinearRegression\n", - "#using linear model\n", - "#creating a linear regression object\n", - "#fitting the model to train\n", - "clf = LinearRegression()\n", - "clf.fit(X_train,Y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([25129.22081466, 34406.12803841, 16055.93358693, 15852.31359091])" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "clf.predict(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "5 26750\n", - "1 34000\n", - "14 19400\n", - "10 18700\n", - "Name: Sell Price($), dtype: int64" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "Y_test" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.8573220332756071" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#find the accuracy of the data set using score\n", - "clf.score(X_test,Y_test)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/6. Training and Testing Data/carprices.csv b/Tutorial/6. Training and Testing Data/carprices.csv deleted file mode 100644 index 3ac6532..0000000 --- a/Tutorial/6. Training and Testing Data/carprices.csv +++ /dev/null @@ -1,21 +0,0 @@ -Mileage,Age(yrs),Sell Price($) -69000,6,18000 -35000,3,34000 -57000,5,26100 -22500,2,40000 -46000,4,31500 -59000,5,26750 -52000,5,32000 -72000,6,19300 -91000,8,12000 -67000,6,22000 -83000,7,18700 -79000,7,19500 -59000,5,26000 -58780,4,27500 -82450,7,19400 -25400,3,35000 -28000,2,35500 -69000,5,19700 -87600,8,12800 -52000,5,28200 diff --git a/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.ipynb b/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.ipynb deleted file mode 100644 index 2beb0bd..0000000 --- a/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.ipynb +++ /dev/null @@ -1,510 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logistic Regression (Binary Classification)\n" - ] - } - ], - "source": [ - "print(\"Logistic Regression (Binary Classification)\")\n", - "#Logistic Regression is a technique used to solve classification problem.\n", - "#It is used to predict a binary outcome (1 / 0, Yes / No, True / False) given a set of independent variables.\n", - "#To represent binary / categorical outcome, we use dummy variables.\n", - "#In logistic regression, we get a probabilistic value which lies between 0 and 1.\n", - "#So, for example, we can take a threshold value 0.5.\n", - "#Now, if the probabilistic value is more than 0.5, we can classify it as 1 (or YES),\n", - "\n", - "# sigmoid function\n", - "# sigmoid(z) = 1/(1+e^-z)\n", - "# e= Eulers number 2.71828\n", - "\n", - "#in linear function we use y = m*x+c\n", - "#in logistic regression we use y = 1/(1+e^-z)\n", - "#where z = m*x+c\n", - "#here z is the linear function" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from matplotlib import pyplot as plt \n", - "%matplotlib inline" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "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", - "
agebought_insurance
0220
1250
2471
3520
4461
\n", - "
" - ], - "text/plain": [ - " age bought_insurance\n", - "0 22 0\n", - "1 25 0\n", - "2 47 1\n", - "3 52 0\n", - "4 46 1" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = pd.read_csv(\"insurance_data.csv\")\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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339/9Pf3x8MPPxx33HFHbNiwIf7kT/7klPfT0tISlZWVhUtNTU0x0wQAxpAR/22agYGBmD59etxzzz2xePHiaGxsjM9+9rPR2tp6yn2am5uju7u7cDl8+PBITxMASKSoN7BOmzYtxo0bF11dXYO2d3V1RXV19Un3mTFjRkyYMCHGjRtX2HbJJZdEZ2dn9PX1RVlZ2Qn75HK5yOVyxUwNABijijozUlZWFosXL462trbCtoGBgWhra4u6urqT7rN06dI4cOBADAwMFLY99dRTMWPGjJOGCABwdin6ZZqmpqbYsmVLfPOb34wnn3wybrrppujp6YmVK1dGRMTy5cujubm5MP6mm26K//mf/4nVq1fHU089FQ899FDceeedsWrVquE7CgBgzCr6c0YaGxvj6NGjsXbt2ujs7IyFCxfG9u3bC29qPXToUJSWvtE4NTU18cgjj8Stt94a8+fPj1mzZsXq1avjtttuG76jAADGrKI/ZyQFnzMCAGPPiHzOCADAcBMjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQ1GnFyObNm2P27NlRXl4etbW1sXv37iHtt3Xr1igpKYnrrrvudO4WADgDFR0j27Zti6ampli3bl3s3bs3FixYEA0NDXHkyJG33O+nP/1p/OEf/mFceeWVpz1ZAODMU3SM3HXXXfGpT30qVq5cGZdeemm0trbGOeecE1//+tdPuU9/f3/ccMMN8fnPfz7e/e53v60JAwBnlqJipK+vLzo6OqK+vv6NGygtjfr6+mhvbz/lfn/8x38c06dPj0984hNDup/e3t7I5/ODLgDAmamoGDl27Fj09/dHVVXVoO1VVVXR2dl50n0ee+yx+NrXvhZbtmwZ8v20tLREZWVl4VJTU1PMNAGAMWREf5vm+PHj8bGPfSy2bNkS06ZNG/J+zc3N0d3dXbgcPnx4BGcJAKQ0vpjB06ZNi3HjxkVXV9eg7V1dXVFdXX3C+J/85Cfx05/+NJYtW1bYNjAw8Nodjx8f+/fvj1/4hV84Yb9cLhe5XK6YqQEAY1RRZ0bKyspi8eLF0dbWVtg2MDAQbW1tUVdXd8L4uXPnxuOPPx779u0rXH7t134tPvzhD8e+ffu8/AIAFHdmJCKiqakpVqxYEUuWLIkrrrgiNm7cGD09PbFy5cqIiFi+fHnMmjUrWlpaory8PObNmzdo/ylTpkREnLAdADg7FR0jjY2NcfTo0Vi7dm10dnbGwoULY/v27YU3tR46dChKS32wKwAwNCVZlmWpJ/Hz5PP5qKysjO7u7qioqEg9HQBgCIb6/O0UBgCQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkTitGNm/eHLNnz47y8vKora2N3bt3n3Lsli1b4sorr4ypU6fG1KlTo76+/i3HAwBnl6JjZNu2bdHU1BTr1q2LvXv3xoIFC6KhoSGOHDly0vE7d+6M66+/Pr7//e9He3t71NTUxNVXXx3PPvvs2548ADD2lWRZlhWzQ21tbVx++eWxadOmiIgYGBiImpqauPnmm2PNmjU/d//+/v6YOnVqbNq0KZYvXz6k+8zn81FZWRnd3d1RUVFRzHQBgESG+vxd1JmRvr6+6OjoiPr6+jduoLQ06uvro729fUi38dJLL8Wrr74a55133inH9Pb2Rj6fH3QBAM5MRcXIsWPHor+/P6qqqgZtr6qqis7OziHdxm233RYzZ84cFDQ/q6WlJSorKwuXmpqaYqYJAIwh7+hv06xfvz62bt0aDzzwQJSXl59yXHNzc3R3dxcuhw8ffgdnCQC8k8YXM3jatGkxbty46OrqGrS9q6srqqur33LfP/uzP4v169fHP//zP8f8+fPfcmwul4tcLlfM1ACAMaqoMyNlZWWxePHiaGtrK2wbGBiItra2qKurO+V+X/rSl+ILX/hCbN++PZYsWXL6swUAzjhFnRmJiGhqaooVK1bEkiVL4oorroiNGzdGT09PrFy5MiIili9fHrNmzYqWlpaIiPjTP/3TWLt2bdx7770xe/bswntLJk+eHJMnTx7GQwEAxqKiY6SxsTGOHj0aa9eujc7Ozli4cGFs37698KbWQ4cORWnpGydc7r777ujr64vf+q3fGnQ769ati8997nNvb/YAwJhX9OeMpOBzRgBg7BmRzxkBABhuYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCSEiMAQFJiBABISowAAEmJEQAgKTECACQlRgCApMQIAJCUGAEAkhIjAEBSYgQASEqMAABJiREAICkxAgAkJUYAgKTECACQlBgBAJI6rRjZvHlzzJ49O8rLy6O2tjZ27979luPvu+++mDt3bpSXl8dll10WDz/88GlNdlgdORJRUvLa5ciRtx7b0/PG2J6et3/fQ729Yu53tM9xJI5luI8ZGDmpvl/9nBgTio6Rbdu2RVNTU6xbty727t0bCxYsiIaGhjhyiif0H/zgB3H99dfHJz7xifiP//iPuO666+K6666LJ5544m1PHgAY+0qyLMuK2aG2tjYuv/zy2LRpU0REDAwMRE1NTdx8882xZs2aE8Y3NjZGT09PfPe73y1s+6Vf+qVYuHBhtLa2Duk+8/l8VFZWRnd3d1RUVBQz3RO9Hk1Hj0bMm/fa1088EXH++a99PX36G2Nfr+ienoiqqte+7uqKmDTpta9f/+9QDfX2irnf0T7HkTiW4T5mYOSk+n71c2JUGOrz9/hibrSvry86Ojqiubm5sK20tDTq6+ujvb39pPu0t7dHU1PToG0NDQ3x4IMPnvJ+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3//+GD9+fIwfPz527doVX/nKV2L8+PFRVVVlbUaJKVOmxHvf+944cOCA75mEZsyYEZdeeumgbZdccknhJbTX////7G82jdW1ESOnIcuy+PSnPx0PPPBAPProozFnzpxB1y9evDgmTJgQbW1thW379++PQ4cORV1d3Ts93bPewMBA9Pb2WpeErrrqqnj88cdj3759hcuSJUvihhtuKHxtbUaHF198MX7yk5/EjBkzfM8ktHTp0hM+MuKpp56Kiy66KCIi5syZE9XV1YPWJp/Pxw9/+MOxuTap30E7Ft10001ZZWVltnPnzuz5558vXF566aXCmBtvvDG78MILs0cffTTbs2dPVldXl9XV1SWc9dlhzZo12a5du7KDBw9mP/rRj7I1a9ZkJSUl2T/90z9lWWZdRpM3/zZNllmbVP7gD/4g27lzZ3bw4MHsX//1X7P6+vps2rRp2ZEjR7Issy6p7N69Oxs/fnz2xS9+MXv66aezv/u7v8vOOeec7G//9m8LY9avX59NmTIl+8d//MfsRz/6UfaRj3wkmzNnTvbyyy8nnPnpESOnISJOevnrv/7rwpiXX345+73f+71s6tSp2TnnnJP9+q//evb888+nm/RZ4uMf/3h20UUXZWVlZdn555+fXXXVVYUQyTLrMpr8bIxYmzQaGxuzGTNmZGVlZdmsWbOyxsbG7MCBA4XrrUs63/nOd7J58+ZluVwumzt3bnbPPfcMun5gYCC74447sqqqqiyXy2VXXXVVtn///kSzfXtKsizLUp6ZAQDObt4zAgAkJUYAgKTECACQlBgBAJISIwBAUmIEAEhKjAAASYkRACApMQIAJCVGAICkxAgAkJQYAQCS+n+c6suj7RLqHQAAAABJRU5ErkJggg==", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.scatter(df.age, df.bought_insurance, marker = \"+\", color = \"red\")" - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [], - "source": [ - "#import train_test_split from sklearn.model_selection\n", - "\n", - "from sklearn.model_selection import train_test_split" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "# using 90% for training and 10% for testing\n", - "# after spliting you get four parameters(X_train, X_test, Y_train, Y_test)\n", - "# X_train - independent variable for training set\n", - "# X_test - independent variable for testing set\n", - "# Y_train - dependent variable for training set\n", - "# Y_test - dependent variable for testing set\n", - "\n", - "X_train, X_test, Y_train, Y_test = train_test_split(df[[\"age\"]], df.bought_insurance, train_size = 0.9)" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "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", - "
age
961
1555
125
\n", - "
" - ], - "text/plain": [ - " age\n", - "9 61\n", - "15 55\n", - "1 25" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_test" - ] - }, - { - "cell_type": "code", - "execution_count": 30, - "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", - "
age
1625
1128
247
2554
1449
\n", - "
" - ], - "text/plain": [ - " age\n", - "16 25\n", - "11 28\n", - "2 47\n", - "25 54\n", - "14 49" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "X_train.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [], - "source": [ - "# import LogisticRegression from sklearn.linear_model \n", - "from sklearn.linear_model import LogisticRegression\n", - "#create an object called model to train\n", - "model = LogisticRegression()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
LogisticRegression()
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": [ - "LogisticRegression()" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# traing the model(object) with X_train,Y_train\n", - "\n", - "model.fit(X_train,Y_train)\n", - "# know out model is trained.\n", - "# it is ready to predict\n" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([1, 1, 0], dtype=int64)" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# now we will predict for X_test\n", - "# predict for X_test\n", - "\n", - "model.predict(X_test)\n", - "\n", - "# 1 = person buy the insurance\n", - "# 0 = person dont buy insurance " - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#chech the accuracy of the model\n", - "model.score(X_test,Y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[0.05756128, 0.94243872],\n", - " [0.11527313, 0.88472687],\n", - " [0.85198512, 0.14801488]])" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# predict the probability\n", - "model.predict_proba(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 36, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0], dtype=int64)" - ] - }, - "execution_count": 36, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#test the model\n", - "# predict for age 25\n", - "model.predict([[25]])\n", - "\n", - "# 0 means dont buy the insurance" - ] - }, - { - "cell_type": "code", - "execution_count": 38, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but LogisticRegression was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([1], dtype=int64)" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# predict for age 20\n", - "model.predict([[50]])\n", - "\n", - "# 1 means person buy the insurance" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.py b/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.py deleted file mode 100644 index 99312f8..0000000 --- a/Tutorial/7. Logistic Regression(Binary Classification)/Binary_Classification.py +++ /dev/null @@ -1,68 +0,0 @@ -print("Logistic Regression (Binary Classification)") -#Logistic Regression is a technique used to solve classification problem. -#It is used to predict a binary outcome (1 / 0, Yes / No, True / False) given a set of independent variables. -#To represent binary / categorical outcome, we use dummy variables. -#In logistic regression, we get a probabilistic value which lies between 0 and 1. -#So, for example, we can take a threshold value 0.5. -#Now, if the probabilistic value is more than 0.5, we can classify it as 1 (or YES), - -# sigmoid function -# sigmoid(z) = 1/(1+e^-z) -# e= Eulers number 2.71828 - -#in linear function we use y = m*x+c -#in logistic regression we use y = 1/(1+e^-z) -#where z = m*x+c -#here z is the linear function - -import pandas as pd -from matplotlib import pyplot as plt - -# %matplotlib inline - -df = pd.read_csv("insurance_data.csv") -df.head() -plt.scatter(df.age, df.bought_insurance, marker = "+", color = "red") -#import train_test_split from sklearn.model_selection - -from sklearn.model_selection import train_test_split -# using 90% for training and 10% for testing -# after spliting you get four parameters(X_train, X_test, Y_train, Y_test) -# X_train - independent variable for training set -# X_test - independent variable for testing set -# Y_train - dependent variable for training set -# Y_test - dependent variable for testing set - -X_train, X_test, Y_train, Y_test = train_test_split(df[["age"]], df.bought_insurance, train_size = 0.9) -X_test -X_train.head() -# import LogisticRegression from sklearn.linear_model -from sklearn.linear_model import LogisticRegression -#create an object called model to train -model = LogisticRegression() -# traing the model(object) with X_train,Y_train - -model.fit(X_train,Y_train) -# know out model is trained. -# it is ready to predict - -# now we will predict for X_test -# predict for X_test - -model.predict(X_test) - -# 1 = person buy the insurance -# 0 = person dont buy insurance -#chech the accuracy of the model -model.score(X_test,Y_test) -# predict the probability -model.predict_proba(X_test) -#test the model -# predict for age 25 -model.predict([[25]]) - -# 0 means dont buy the insurance -# predict for age 20 -model.predict([[50]]) - -# 1 means person buy the insurance \ No newline at end of file diff --git a/Tutorial/7. Logistic Regression(Binary Classification)/insurance_data.csv b/Tutorial/7. Logistic Regression(Binary Classification)/insurance_data.csv deleted file mode 100644 index e278ef9..0000000 --- a/Tutorial/7. Logistic Regression(Binary Classification)/insurance_data.csv +++ /dev/null @@ -1,28 +0,0 @@ -age,bought_insurance -22,0 -25,0 -47,1 -52,0 -46,1 -56,1 -55,0 -60,1 -62,1 -61,1 -18,0 -28,0 -27,0 -29,0 -49,1 -55,1 -25,1 -58,1 -19,0 -18,0 -21,0 -26,0 -40,1 -45,1 -50,1 -54,1 -23,0 \ No newline at end of file diff --git a/Tutorial/8. Logistic Regression(Multiclass Classification)/Logistic_Regression_(MulitClass_Classification).ipynb b/Tutorial/8. Logistic Regression(Multiclass Classification)/Logistic_Regression_(MulitClass_Classification).ipynb deleted file mode 100644 index 6b73374..0000000 --- a/Tutorial/8. Logistic Regression(Multiclass Classification)/Logistic_Regression_(MulitClass_Classification).ipynb +++ /dev/null @@ -1,560 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Logistic Regression (MultiClass Classification)\n" - ] - } - ], - "source": [ - "print(\"Logistic Regression (MultiClass Classification)\")\n", - "#here we are going to build a model which can read and predict the hand written words" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "#importing all the necessary packages\n", - "import matplotlib.pyplot as plt\n", - "from sklearn.datasets import load_digits" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['DESCR', 'data', 'feature_names', 'frame', 'images', 'target', 'target_names']" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "digits = load_digits()\n", - "dir(digits)\n", - "#The dir() function returns a list of names in the current local scope. \n", - "# By calling dir(digits), you're listing all the attributes and methods of the \n", - "# digits object. These will include all the attributes listed above, as\n", - "# well as other attributes that the object may have." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ 0., 0., 5., 13., 9., 1., 0., 0., 0., 0., 13., 15., 10.,\n", - " 15., 5., 0., 0., 3., 15., 2., 0., 11., 8., 0., 0., 4.,\n", - " 12., 0., 0., 8., 8., 0., 0., 5., 8., 0., 0., 9., 8.,\n", - " 0., 0., 4., 11., 0., 1., 12., 7., 0., 0., 2., 14., 5.,\n", - " 10., 12., 0., 0., 0., 0., 6., 13., 10., 0., 0., 0.])" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "digits.data[0]\n", - "#to get the numeric data related to image" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYoElEQVR4nO3df2yUhR3H8c/R2oNpexak0I7jpygCtoMWCKvOHyCkQSL7oxKCWYXNRXJMsDFx/WewLOPqH1twGyk/xoqJYyDLis4MusKkZJkdpaQJaIJgmRwidG5wV7rkML3bX7utQ9o+R788PNf3K3midz7HfUIqb+5He75kMpkUAABGhrk9AACQ2QgNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClCAwAwRWgAAKYIDQDAVMaEZsuWLZo4caKGDx+uefPm6dixY25P6tfRo0e1dOlSFRUVyefzaf/+/W5PGpBwOKw5c+YoNzdXBQUFWrZsmU6fPu32rAGpq6tTcXGx8vLylJeXp/nz5+vAgQNuz3KstrZWPp9P69evd3tKvzZu3Cifz9frmDZtmtuzBuTTTz/Vc889p1GjRmnEiBF6+OGHdfz4cbdn9WvixIk3/J77fD6FQiFX9mREaPbu3avq6mpt2LBBJ06cUElJiRYvXqzOzk63p/Wpu7tbJSUl2rJli9tTHGlublYoFFJLS4uampr0xRdfaNGiReru7nZ7Wr/GjRun2tpatbW16fjx43ryySf1zDPP6IMPPnB72oC1trZq27ZtKi4udnvKgM2YMUOfffZZ6vjzn//s9qR+XblyReXl5brrrrt04MABffjhh/rJT36i/Px8t6f1q7W1tdfvd1NTkySpsrLSnUHJDDB37txkKBRKXe7p6UkWFRUlw+Gwi6uckZRsaGhwe0ZaOjs7k5KSzc3Nbk9JS35+fvKXv/yl2zMGpKurKzl16tRkU1NT8rHHHkuuW7fO7Un92rBhQ7KkpMTtGY69+uqryUceecTtGYNi3bp1ySlTpiQTiYQr9+/5RzTXr19XW1ubFi5cmLpu2LBhWrhwod5//30Xlw0d0WhUkjRy5EiXlzjT09OjPXv2qLu7W/Pnz3d7zoCEQiEtWbKk19e7F5w5c0ZFRUWaPHmyVq5cqfPnz7s9qV/vvPOOysrKVFlZqYKCAs2aNUs7duxwe5Zj169f15tvvqnVq1fL5/O5ssHzofn888/V09OjMWPG9Lp+zJgxunTpkkurho5EIqH169ervLxcM2fOdHvOgJw8eVL33HOP/H6/XnzxRTU0NGj69Oluz+rXnj17dOLECYXDYbenODJv3jzt2rVLBw8eVF1dnc6dO6dHH31UXV1dbk/rU0dHh+rq6jR16lQ1NjZqzZo1eumll/TGG2+4Pc2R/fv36+rVq3r++edd25Dt2j0jI4RCIZ06dcoTz7n/x4MPPqj29nZFo1H99re/VVVVlZqbm+/o2EQiEa1bt05NTU0aPny423McqaioSP17cXGx5s2bpwkTJuitt97St7/9bReX9S2RSKisrEybNm2SJM2aNUunTp3S1q1bVVVV5fK6gdu5c6cqKipUVFTk2gbPP6K57777lJWVpcuXL/e6/vLlyxo7dqxLq4aGtWvX6t1339V7772ncePGuT1nwHJycnT//fertLRU4XBYJSUlev31192e1ae2tjZ1dnZq9uzZys7OVnZ2tpqbm/Wzn/1M2dnZ6unpcXvigN1777164IEHdPbsWben9KmwsPCGv3w89NBDnnja7z8++eQTHTp0SN/5zndc3eH50OTk5Ki0tFSHDx9OXZdIJHT48GHPPO/uNclkUmvXrlVDQ4P+9Kc/adKkSW5PuiWJRELxeNztGX1asGCBTp48qfb29tRRVlamlStXqr29XVlZWW5PHLBr167p448/VmFhodtT+lReXn7D2/Y/+ugjTZgwwaVFztXX16ugoEBLlixxdUdGPHVWXV2tqqoqlZWVae7cudq8ebO6u7u1atUqt6f16dq1a73+Vnfu3Dm1t7dr5MiRGj9+vIvL+hYKhbR79269/fbbys3NTb0WFggENGLECJfX9a2mpkYVFRUaP368urq6tHv3bh05ckSNjY1uT+tTbm7uDa+B3X333Ro1atQd/9rYK6+8oqVLl2rChAm6ePGiNmzYoKysLK1YscLtaX16+eWX9fWvf12bNm3Ss88+q2PHjmn79u3avn2729MGJJFIqL6+XlVVVcrOdvmPelfe62bg5z//eXL8+PHJnJyc5Ny5c5MtLS1uT+rXe++9l5R0w1FVVeX2tD592WZJyfr6eren9Wv16tXJCRMmJHNycpKjR49OLliwIPnHP/7R7Vlp8crbm5cvX54sLCxM5uTkJL/61a8mly9fnjx79qzbswbk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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#to get the imagedata from data set \n", - "plt.gray()\n", - "plt.matshow(digits.images[0])#getting the first image i,e 0, and second image as 1\n", - "plt.matshow(digits.images[1])" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYoElEQVR4nO3df2yUhR3H8c/R2oNpexak0I7jpygCtoMWCKvOHyCkQSL7oxKCWYXNRXJMsDFx/WewLOPqH1twGyk/xoqJYyDLis4MusKkZJkdpaQJaIJgmRwidG5wV7rkML3bX7utQ9o+R788PNf3K3midz7HfUIqb+5He75kMpkUAABGhrk9AACQ2QgNAMAUoQEAmCI0AABThAYAYIrQAABMERoAgClCAwAwRWgAAKYIDQDAVMaEZsuWLZo4caKGDx+uefPm6dixY25P6tfRo0e1dOlSFRUVyefzaf/+/W5PGpBwOKw5c+YoNzdXBQUFWrZsmU6fPu32rAGpq6tTcXGx8vLylJeXp/nz5+vAgQNuz3KstrZWPp9P69evd3tKvzZu3Cifz9frmDZtmtuzBuTTTz/Vc889p1GjRmnEiBF6+OGHdfz4cbdn9WvixIk3/J77fD6FQiFX9mREaPbu3avq6mpt2LBBJ06cUElJiRYvXqzOzk63p/Wpu7tbJSUl2rJli9tTHGlublYoFFJLS4uampr0xRdfaNGiReru7nZ7Wr/GjRun2tpatbW16fjx43ryySf1zDPP6IMPPnB72oC1trZq27ZtKi4udnvKgM2YMUOfffZZ6vjzn//s9qR+XblyReXl5brrrrt04MABffjhh/rJT36i/Px8t6f1q7W1tdfvd1NTkySpsrLSnUHJDDB37txkKBRKXe7p6UkWFRUlw+Gwi6uckZRsaGhwe0ZaOjs7k5KSzc3Nbk9JS35+fvKXv/yl2zMGpKurKzl16tRkU1NT8rHHHkuuW7fO7Un92rBhQ7KkpMTtGY69+uqryUceecTtGYNi3bp1ySlTpiQTiYQr9+/5RzTXr19XW1ubFi5cmLpu2LBhWrhwod5//30Xlw0d0WhUkjRy5EiXlzjT09OjPXv2qLu7W/Pnz3d7zoCEQiEtWbKk19e7F5w5c0ZFRUWaPHmyVq5cqfPnz7s9qV/vvPOOysrKVFlZqYKCAs2aNUs7duxwe5Zj169f15tvvqnVq1fL5/O5ssHzofn888/V09OjMWPG9Lp+zJgxunTpkkurho5EIqH169ervLxcM2fOdHvOgJw8eVL33HOP/H6/XnzxRTU0NGj69Oluz+rXnj17dOLECYXDYbenODJv3jzt2rVLBw8eVF1dnc6dO6dHH31UXV1dbk/rU0dHh+rq6jR16lQ1NjZqzZo1eumll/TGG2+4Pc2R/fv36+rVq3r++edd25Dt2j0jI4RCIZ06dcoTz7n/x4MPPqj29nZFo1H99re/VVVVlZqbm+/o2EQiEa1bt05NTU0aPny423McqaioSP17cXGx5s2bpwkTJuitt97St7/9bReX9S2RSKisrEybNm2SJM2aNUunTp3S1q1bVVVV5fK6gdu5c6cqKipUVFTk2gbPP6K57777lJWVpcuXL/e6/vLlyxo7dqxLq4aGtWvX6t1339V7772ncePGuT1nwHJycnT//fertLRU4XBYJSUlev31192e1ae2tjZ1dnZq9uzZys7OVnZ2tpqbm/Wzn/1M2dnZ6unpcXvigN1777164IEHdPbsWben9KmwsPCGv3w89NBDnnja7z8++eQTHTp0SN/5zndc3eH50OTk5Ki0tFSHDx9OXZdIJHT48GHPPO/uNclkUmvXrlVDQ4P+9Kc/adKkSW5PuiWJRELxeNztGX1asGCBTp48qfb29tRRVlamlStXqr29XVlZWW5PHLBr167p448/VmFhodtT+lReXn7D2/Y/+ugjTZgwwaVFztXX16ugoEBLlixxdUdGPHVWXV2tqqoqlZWVae7cudq8ebO6u7u1atUqt6f16dq1a73+Vnfu3Dm1t7dr5MiRGj9+vIvL+hYKhbR79269/fbbys3NTb0WFggENGLECJfX9a2mpkYVFRUaP368urq6tHv3bh05ckSNjY1uT+tTbm7uDa+B3X333Ro1atQd/9rYK6+8oqVLl2rChAm6ePGiNmzYoKysLK1YscLtaX16+eWX9fWvf12bNm3Ss88+q2PHjmn79u3avn2729MGJJFIqL6+XlVVVcrOdvmPelfe62bg5z//eXL8+PHJnJyc5Ny5c5MtLS1uT+rXe++9l5R0w1FVVeX2tD592WZJyfr6eren9Wv16tXJCRMmJHNycpKjR49OLliwIPnHP/7R7Vlp8crbm5cvX54sLCxM5uTkJL/61a8mly9fnjx79qzbswbk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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAYp0lEQVR4nO3df2zUB/3H8dfR2gNZe/wYhVbKj21sDFjLjwLBMvcDBmkYAf9AQlgsoDMjh4M1S5b+YzFGDv/QMJWUgViWzArTWJiLUAGhxLhKKamBLWGwwTjGoM6Mu1LjsfQ+37+87yrrj8/RNx8+1+cj+UTv9rneK2Thuc/12gs4juMIAAAjg7weAADIbIQGAGCK0AAATBEaAIApQgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgKmNCs337dk2YMEGDBw/W3LlzdfLkSa8n9erEiRNaunSpCgsLFQgEtH//fq8n9UkkEtHs2bOVm5ur/Px8LV++XOfOnfN6Vp/U1NSouLhYeXl5ysvL07x583Tw4EGvZ7m2detWBQIBbdq0yespvdq8ebMCgUCXY/LkyV7P6pOPP/5Yzz33nEaOHKkhQ4boscce06lTp7ye1asJEybc9mceCAQUDoc92ZMRodm3b58qKytVXV2t06dPq6SkRIsXL1ZbW5vX03rU0dGhkpISbd++3esprjQ2NiocDqupqUmHDx/W559/rkWLFqmjo8Prab0aO3astm7dqpaWFp06dUpPP/20li1bpnfffdfraX3W3Nys1157TcXFxV5P6bOpU6fqk08+SR1//etfvZ7Uq88++0xlZWX6yle+ooMHD+q9997TT3/6Uw0fPtzrab1qbm7u8ud9+PBhSdKKFSu8GeRkgDlz5jjhcDh1u7Oz0yksLHQikYiHq9yR5NTX13s9Iy1tbW2OJKexsdHrKWkZPny486tf/crrGX3S3t7uTJo0yTl8+LDzxBNPOBs3bvR6Uq+qq6udkpISr2e49sorrzjz58/3eka/2Lhxo/Pggw86yWTSk+f3/RXNrVu31NLSooULF6buGzRokBYuXKh33nnHw2UDRywWkySNGDHC4yXudHZ2au/evero6NC8efO8ntMn4XBYS5Ys6fLvux+cP39ehYWFeuCBB7R69WpdvnzZ60m9euutt1RaWqoVK1YoPz9fM2bM0K5du7ye5dqtW7f0xhtvaN26dQoEAp5s8H1oPv30U3V2dmr06NFd7h89erSuXbvm0aqBI5lMatOmTSorK9O0adO8ntMnZ86c0X333adgMKgXXnhB9fX1mjJlitezerV3716dPn1akUjE6ymuzJ07V3v27NGhQ4dUU1Ojixcv6vHHH1d7e7vX03r04YcfqqamRpMmTVJDQ4PWr1+vF198Ua+//rrX01zZv3+/bty4oTVr1ni2IduzZ0ZGCIfDOnv2rC9ec/+vRx55RK2trYrFYvr973+viooKNTY23tOxiUaj2rhxow4fPqzBgwd7PceV8vLy1P8vLi7W3LlzNX78eL355pv6zne+4+GyniWTSZWWlmrLli2SpBkzZujs2bPasWOHKioqPF7Xd7t371Z5ebkKCws92+D7K5r7779fWVlZun79epf7r1+/rjFjxni0amDYsGGD3n77bR07dkxjx471ek6f5eTk6KGHHtKsWbMUiURUUlKiV1991etZPWppaVFbW5tmzpyp7OxsZWdnq7GxUT//+c+VnZ2tzs5Oryf22bBhw/Twww/rwoULXk/pUUFBwW3/8fHoo4/64mW///roo4905MgRffe73/V0h+9Dk5OTo1mzZuno0aOp+5LJpI4ePeqb1939xnEcbdiwQfX19frLX/6iiRMnej3pjiSTSSUSCa9n9GjBggU6c+aMWltbU0dpaalWr16t1tZWZWVleT2xz27evKkPPvhABQUFXk/pUVlZ2W1v23///fc1fvx4jxa5V1tbq/z8fC1ZssTTHRnx0lllZaUqKipUWlqqOXPmaNu2bero6NDatWu9ntajmzdvdvmvuosXL6q1tVUjRozQuHHjPFzWs3A4rLq6Oh04cEC5ubmp74WFQiENGTLE43U9q6qqUnl5ucaNG6f29nbV1dXp+PHjamho8Hpaj3Jzc2/7HtjQoUM1cuTIe/57Yy+//LKWLl2q8ePH6+rVq6qurlZWVpZWrVrl9bQevfTSS/r617+uLVu26Fvf+pZOnjypnTt3aufOnV5P65NkMqna2lpVVFQoO9vjv+o9ea+bgV/84hfOuHHjnJycHGfOnDlOU1OT15N6dezYMUfSbUdFRYXX03r0ZZslObW1tV5P69W6deuc8ePHOzk5Oc6oUaOcBQsWOH/+85+9npUWv7y9eeXKlU5BQYGTk5PjfO1rX3NWrlzpXLhwwetZ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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZoAAAGkCAYAAAAIduO+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAY00lEQVR4nO3df2zUhf3H8dfRrgdqe/yQQjtKi4oiYAtSIKw6URDTIMH9wQjDrAW3RHIMsDEx/WewLOPYH3O4jVRgrCVxDLZlrc4EOmC2ZJGOUtIFNEFQlCpC52LvSv84XO/z/Wv3XQe0/Rx98+FzfT6ST/TOz3GvGOTp5+7aBhzHcQQAgJERXg8AAKQ3QgMAMEVoAACmCA0AwBShAQCYIjQAAFOEBgBgitAAAEwRGgCAKUIDADCVNqHZsWOHioqKNHLkSM2fP18nTpzwetKAjh07pmXLlik/P1+BQEANDQ1eTxqUSCSiuXPnKjs7W7m5uXruued09uxZr2cNSk1NjYqLi5WTk6OcnBwtWLBABw8e9HqWa9u2bVMgENCmTZu8njKgLVu2KBAI9DmmTZvm9axB+eyzz/T8889r3LhxGjVqlB555BGdPHnS61kDKioquu7feSAQUDgc9mRPWoTmwIEDqqqq0ubNm3Xq1CmVlJTomWeeUWdnp9fT+tXT06OSkhLt2LHD6ymuNDc3KxwOq6WlRYcPH9ZXX32lJUuWqKenx+tpA5o0aZK2bdumtrY2nTx5Uk899ZSWL1+u9957z+tpg9ba2qqdO3equLjY6ymDNmPGDH3++efJ429/+5vXkwb05ZdfqqysTF/72td08OBBvf/++/rZz36mMWPGeD1tQK2trX3+fR8+fFiStGLFCm8GOWlg3rx5TjgcTt7u7e118vPznUgk4uEqdyQ59fX1Xs9ISWdnpyPJaW5u9npKSsaMGeP8+te/9nrGoHR3dztTp051Dh8+7DzxxBPOxo0bvZ40oM2bNzslJSVez3DtlVdecR577DGvZwyJjRs3Ovfff7+TSCQ8eX7fX9Fcu3ZNbW1tWrx4cfK+ESNGaPHixTp+/LiHy4aPaDQqSRo7dqzHS9zp7e3V/v371dPTowULFng9Z1DC4bCWLl3a5/e7H5w7d075+fm67777tHr1al28eNHrSQN66623VFpaqhUrVig3N1ezZ8/W7t27vZ7l2rVr1/TGG29o7dq1CgQCnmzwfWi++OIL9fb2asKECX3unzBhgi5fvuzRquEjkUho06ZNKisr08yZM72eMyinT5/WPffco2AwqBdffFH19fWaPn2617MGtH//fp06dUqRSMTrKa7Mnz9fdXV1OnTokGpqanThwgU9/vjj6u7u9npavz766CPV1NRo6tSpamxs1Lp167Rhwwbt3bvX62muNDQ0qKurS5WVlZ5tyPTsmZEWwuGwzpw544vX3P/joYceUnt7u6LRqP74xz+qoqJCzc3Nd3RsOjo6tHHjRh0+fFgjR470eo4r5eXlyb8vLi7W/PnzVVhYqN///vd64YUXPFzWv0QiodLSUm3dulWSNHv2bJ05c0avv/66KioqPF43eHv27FF5ebny8/M92+D7K5p7771XGRkZunLlSp/7r1y5ookTJ3q0anhYv3693n77bb3zzjuaNGmS13MGLSsrSw888IDmzJmjSCSikpISvfbaa17P6ldbW5s6Ozv16KOPKjMzU5mZmWpubtYvfvELZWZmqre31+uJgzZ69Gg9+OCDOn/+vNdT+pWXl3fd/3w8/PDDvnjZ7z8++eQTHTlyRN/73vc83eH70GRlZWnOnDk6evRo8r5EIqGjR4/65nV3v3EcR+vXr1d9fb3++te/asqUKV5PuiWJRELxeNzrGf1atGiRTp8+rfb29uRRWlqq1atXq729XRkZGV5PHLSrV6/qww8/VF5entdT+lVWVnbdx/Y/+OADFRYWerTIvdraWuXm5mrp0qWe7kiLl86qqqpUUVGh0tJSzZs3T9u3b1dPT4/WrFnj9bR+Xb16tc//1V24cEHt7e0aO3asJk+e7OGy/oXDYe3bt09vvvmmsrOzk++FhUIhjRo1yuN1/auurlZ5ebkmT56s7u5u7du3T01NTWpsbPR6Wr+ys7Ovew/s7rvv1rhx4+7498ZefvllLVu2TIWFhbp06ZI2b96sjIwMrVq1yutp/XrppZf0jW98Q1u3btW3v/1tnThxQrt27dKuXbu8njYoiURCtbW1qqioUGamx3/Ue/JZNwO//OUvncmTJztZWVnOvHnznJaWFq8nDeidd95xJF13VFRUeD2tXzfaLMmpra31etqA1q5d6xQWFjpZWVnO+PHjnUWLFjl/+ctfvJ6VEr98vHnlypVOXl6ek5WV5Xz96193Vq5c6Zw/f97rWYPy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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "#to get more image(5 images)\n", - "for i in range(5):\n", - " plt.matshow(digits.images[i])" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1, 2, 3, 4])" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#get target variable\n", - "digits.target[0:5]" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "#split data into train and test\n", - "X_train, X_test, Y_train, Y_test = train_test_split(digits.data,digits.target,test_size=0.2,train_size=0.8)" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "360" - ] - }, - "execution_count": 22, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(X_test)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1437" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(X_train)" - ] - }, - { - "cell_type": "code", - "execution_count": 28, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.linear_model import LogisticRegression\n", - "#create a object of logistic regression to train\n", - "model = LogisticRegression()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 29, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\linear_model\\_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):\n", - "STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", - "\n", - "Increase the number of iterations (max_iter) or scale the data as shown in:\n", - " https://scikit-learn.org/stable/modules/preprocessing.html\n", - "Please also refer to the documentation for alternative solver options:\n", - " https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", - " n_iter_i = _check_optimize_result(\n" - ] - }, - { - "data": { - "text/html": [ - "
LogisticRegression()
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": [ - "LogisticRegression()" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#train the model using .fit()\n", - "model.fit(X_train,Y_train)\n", - "\n", - "# X_train is having the image data\n", - "# Y_train is having the corresponding numeric data \n" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.9555555555555556" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.score(X_test,Y_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# lets go with one random image\n", - "plt.matshow(digits.images[67])" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "6" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#let check the corresponding target data\n", - "digits.target[67]\n", - "# the output is 6 means, for this image corresponding data(number) is six \n" - ] - }, - { - "cell_type": "code", - "execution_count": 37, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([5])" - ] - }, - "execution_count": 37, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# lets predict with our model\n", - "model.predict([digits.data[5]])" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0, 1, 2, 3, 4])" - ] - }, - "execution_count": 39, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#predicting from 0 to 5\n", - "model.predict(digits.data[0:5])" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "metadata": {}, - "outputs": [], - "source": [ - "#our score is around 95% to check where my model is failed we use of confussion \n", - "#matrix\n", - "#confussion matrix is a table which is used to show the performance of the\n", - "#classification model on a set of test data for which the true values are known\n", - "#as ground truth.\n", - "#confussion matrix is used to evaluate the performance of the classification model\n", - "\n", - "from sklearn.metrics import confusion_matrix" - ] - }, - { - "cell_type": "code", - "execution_count": 42, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([[39, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n", - " [ 0, 35, 0, 1, 1, 0, 0, 0, 1, 0],\n", - " [ 0, 0, 24, 0, 0, 0, 0, 0, 0, 0],\n", - " [ 0, 0, 1, 38, 0, 0, 0, 0, 1, 0],\n", - " [ 0, 0, 0, 0, 33, 0, 0, 0, 0, 0],\n", - " [ 0, 0, 0, 0, 0, 38, 0, 0, 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 34, 0, 0, 0],\n", - " [ 0, 0, 0, 0, 0, 0, 0, 31, 0, 2],\n", - " [ 0, 3, 0, 1, 1, 0, 1, 0, 35, 0],\n", - " [ 0, 0, 0, 1, 0, 0, 0, 0, 1, 37]], dtype=int64)" - ] - }, - "execution_count": 42, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#get the predicted value\n", - "Y_predicted = model.predict(X_test)\n", - "\n", - "cm = confusion_matrix(Y_test,Y_predicted)\n", - "# cm = confusion_matrix(actual data, model predicted data)\n", - "cm\n" - ] - }, - { - "cell_type": "code", - "execution_count": 43, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'Confusion Matrix')" - ] - }, - "execution_count": 43, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwgAAAJwCAYAAAAtA0YPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABuvUlEQVR4nO3deZyN5f/H8fdhZo4xZoYxM8a+ZquQXfZIKVKytFtKKckS1SR7NaIslaUiZIn4plIiERJqkCWV7JRlSAaD2c79+2M4v3OyzWjOfR9zv56/x/17fOc697mvz2euY5prPvd1Xw7DMAwBAAAAgKRcVgcAAAAAwH8wQQAAAADgxgQBAAAAgBsTBAAAAABuTBAAAAAAuDFBAAAAAODGBAEAAACAGxMEAAAAAG5MEAAAAAC4MUEAgEvYsWOHWrRoofDwcDkcDn322WfZev29e/fK4XBo2rRp2Xrd61mTJk3UpEkTq8MAANtjggDAb+3atUtPPfWUypQpozx58igsLEz169fXuHHjdPbsWZ/23alTJ23dulWvvfaaZsyYoZo1a/q0PzN17txZDodDYWFhl/w+7tixQw6HQw6HQ2+++WaWr3/w4EENGTJEmzZtyoZoAQBmC7A6AAC4lK+++krt27eX0+nUY489pptuukkpKSlavXq1+vfvr23btun999/3Sd9nz57V2rVrNWDAAD377LM+6aNkyZI6e/asAgMDfXL9qwkICNCZM2e0cOFCdejQweu1WbNmKU+ePDp37tw1XfvgwYMaOnSoSpUqpWrVqmX6fd9888019QcAyF5MEAD4nT179uiBBx5QyZIltXz5chUuXNj9Wo8ePbRz50599dVXPuv/6NGjkqT8+fP7rA+Hw6E8efL47PpX43Q6Vb9+fX388ccXTRBmz56tu+++W//73/9MieXMmTPKmzevgoKCTOkPAHBl3GIEwO+MHDlSp0+f1pQpU7wmBxeUK1dOvXr1cn+dlpam4cOHq2zZsnI6nSpVqpRefvllJScne72vVKlSatWqlVavXq3atWsrT548KlOmjD766CP3OUOGDFHJkiUlSf3795fD4VCpUqUkZdyac+F/exoyZIgcDodX29KlS9WgQQPlz59f+fLlU4UKFfTyyy+7X7/cGoTly5erYcOGCgkJUf78+dWmTRv99ttvl+xv586d6ty5s/Lnz6/w8HB16dJFZ86cufw39l8eeughff311zpx4oS7LT4+Xjt27NBDDz100fnHjx9Xv379dPPNNytfvnwKCwtTy5YttXnzZvc5K1asUK1atSRJXbp0cd+qdCHPJk2a6KabbtKGDRvUqFEj5c2b1/19+fcahE6dOilPnjwX5X/HHXeoQIECOnjwYKZzBQBkHhMEAH5n4cKFKlOmjG699dZMnf/EE09o0KBBql69usaMGaPGjRsrLi5ODzzwwEXn7ty5U+3atdPtt9+ut956SwUKFFDnzp21bds2SVLbtm01ZswYSdKDDz6oGTNmaOzYsVmKf9u2bWrVqpWSk5M1bNgwvfXWW7rnnnv0ww8/XPF93377re644w4lJCRoyJAh6tu3r9asWaP69etr7969F53foUMHnTp1SnFxcerQoYOmTZumoUOHZjrOtm3byuFw6NNPP3W3zZ49WxUrVlT16tUvOn/37t367LPP1KpVK40ePVr9+/fX1q1b1bhxY/cv65UqVdKwYcMkSU8++aRmzJihGTNmqFGjRu7r/P3332rZsqWqVaumsWPHqmnTppeMb9y4cYqKilKnTp2Unp4uSXrvvff0zTff6J133lGRIkUynSsAIAsMAPAjiYmJhiSjTZs2mTp/06ZNhiTjiSee8Grv16+fIclYvny5u61kyZKGJGPVqlXutoSEBMPpdBrPP/+8u23Pnj2GJGPUqFFe1+zUqZNRsmTJi2IYPHiw4fnjdMyYMYYk4+jRo5eN+0IfU6dOdbdVq1bNiI6ONv7++2932+bNm41cuXIZjz322EX9de3a1eua9913n1GwYMHL9umZR0hIiGEYhtGuXTujWbNmhmEYRnp6uhETE2MMHTr0kt+Dc+fOGenp6Rfl4XQ6jWHDhrnb4uPjL8rtgsaNGxuSjEmTJl3ytcaNG3u1LVmyxJBkvPrqq8bu3buNfPnyGffee+9VcwQAXDsqCAD8ysmTJyVJoaGhmTp/0aJFkqS+fft6tT///POSdNFahcqVK6thw4bur6OiolShQgXt3r37mmP+twtrFz7//HO5XK5MvefQoUPatGmTOnfurIiICHd7lSpVdPvtt7vz9NS9e3evrxs2bKi///7b/T3MjIceekgrVqzQ4cOHtXz5ch0+fPiStxdJGesWcuXK+M9Genq6/v77b/ftUxs3bsx0n06nU126dMnUuS1atNBTTz2lYcOGqW3btsqTJ4/ee++9TPcFAMg6JggA/EpYWJgk6dSpU5k6f9++fcqVK5fKlSvn1R4TE6P8+fNr3759Xu0lSpS46BoFChTQP//8c40RX6xjx46qX7++nnjiCRUqVEgPPPCAPvnkkytOFi7EWaFChYteq1Spko4dO6akpCSv9n/nUqBAAUnKUi533XWXQkNDNXfuXM2aNUu1atW66Ht5gcvl0pgxY3TDDTfI6XQqMjJSUVFR2rJlixITEzPdZ9GiRbO0IPnNN99URESENm3apLffflvR0dGZfi8AIOuYIADwK2FhYSpSpIh++eWXLL3v34uELyd37tyXbDcM45r7uHB//AXBwcFatWqVvv32Wz366KPasmWLOnbsqNtvv/2ic/+L/5LLBU6nU23bttX06dO1YMGCy1YPJOn1119X37591ahRI82cOVNLlizR0qVLdeONN2a6UiJlfH+y4ueff1ZCQoIkaevWrVl6LwAg65ggAPA7rVq10q5du7R27dqrnluyZEm5XC7t2LHDq/3IkSM6ceKE+4lE2aFAgQJeT/y54N9VCknKlSuXmjVrptGjR+vXX3/Va6+9puXLl+u777675LUvxLl9+/aLXvv9998VGRmpkJCQ/5bAZTz00EP6+eefderUqUsu7L5g/vz5atq0qaZMmaIHHnhALVq0UPPmzS/6nmR2spYZSUlJ6tKliypXrqwnn3xSI0eOVHx8fLZdHwBwMSYIAPzOCy+8oJCQED3xxBM6cuTIRa/v2rVL48aNk5Rxi4yki540NHr0aEnS3XffnW1xlS1bVomJidqyZYu77dChQ1qwYIHXecePH7/ovRc2DPv3o1cvKFy4sKpVq6bp06d7/cL9yy+/6JtvvnHn6QtNmzbV8OHD9e677yomJuay5+XOnfui6sS8efP0119/ebVdmMhcajKVVS+++KL279+v6dOna/To0SpVqpQ6dep02e8jAOC/Y6M0AH6nbNmymj17tjp27KhKlSp57aS8Zs0azZs3T507d5YkVa1aVZ06ddL777+vEydOqHHjxvrpp580ffp03XvvvZd9hOa1eOCBB/Tiiy/qvvvu03PPPaczZ85o4sSJKl++vNci3WHDhmnVqlW6++67VbJkSSUkJGjChAkqVqyYGjRocNnrjxo1Si1btlS9evX0+OOP6+zZs3rnnXcUHh6uIUOG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w+oILEUFAQAAAIAbFQQAAADAE2sQAAAAACADFQQAAADAk80rCEwQcpB8TV+wOgRLHG5azuoQLBHz3U6rQwCAbJWclmp1CADEBAEAAADwxk7KAAAAAJCBCgIAAADgwXCxDwIAAAAASKKCAAAAAHiz+VOMqCAAAAAAcGOCAAAAAMCNW4wAAAAATzzmFAAAAAAyUEEAAAAAPPGYUwAAAADIwAQBAAAA8ORymXdkwcSJE1WlShWFhYUpLCxM9erV09dff+1+/dy5c+rRo4cKFiyofPny6f7779eRI0eynD4TBAAAAOA6UKxYMY0YMUIbNmzQ+vXrddttt6lNmzbatm2bJKlPnz5auHCh5s2bp5UrV+rgwYNq27ZtlvtxGIaR426yCggqanUIMNHhpuWsDsESMd/ttDoEAACuWVrKX1aHcFlnxnU3ra+8vSb9p/dHRERo1KhRateunaKiojR79my1a9dOkvT777+rUqVKWrt2rerWrZvpa1JBAAAAACySnJyskydPeh3JyclXfV96errmzJmjpKQk1atXTxs2bFBqaqqaN2/uPqdixYoqUaKE1q5dm6WYmCAAAAAAngzDtCMuLk7h4eFeR1xc3GVD27p1q/Llyyen06nu3btrwYIFqly5sg4fPqygoCDlz5/f6/xChQrp8OHDWUqfx5wCAAAAFomNjVXfvn292pxO52XPr1ChgjZt2qTExETNnz9fnTp10sqVK7M1JiYIAAAAgKcsPl3ov3A6nVecEPxbUFCQypXLWH9Zo0YNxcfHa9y4cerYsaNSUlJ04sQJryrCkSNHFBMTk6WYuMUIAAAAuE65XC4lJyerRo0aCgwM1LJly9yvbd++Xfv371e9evWydE0qCAAAAIAnP91JOTY2Vi1btlSJEiV06tQpzZ49WytWrNCSJUsUHh6uxx9/XH379lVERITCwsLUs2dP1atXL0tPMJKoIGSrp7t30s4/1un0yV1as3qhatWsZnVIpsjpeQd3fFjhb7+niAVfK2LuZwod/KpyFyt+2fPDXh2pyCUrFVSvgYlRmienj/flkDd52wF5kzf8W0JCgh577DFVqFBBzZo1U3x8vJYsWaLbb79dkjRmzBi1atVK999/vxo1aqSYmBh9+umnWe6HCUI2ad/+Hr05arCGvzpatercqc1bftWir2YpKqqg1aH5lB3yDqxSVecWLlBi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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# for visualizing the above confussion matrix we are going to use sea born\n", - "import seaborn as sn\n", - "plt.figure(figsize=(10,7))\n", - "sn.heatmap(cm,annot=True)\n", - "plt.xlabel(\"Predicted\")\n", - "plt.ylabel(\"Truth\")\n", - "plt.title(\"Confusion Matrix\")\n", - "# here we are getting the diagonal values as high values, it means our model\n", - "# is working fine\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "#here in above confussion matric my model say image is 2(x axis), but truth value is 3\n", - "#(y axis) is 1 time\n", - "\n", - "# same way 3 times model said 1 for the true value 8\n", - "# 1 times model said 8 for the true value 1" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/8. Logistic Regression(Multiclass Classification)/logistic_regression(multi_class).py b/Tutorial/8. Logistic Regression(Multiclass Classification)/logistic_regression(multi_class).py deleted file mode 100644 index 26fe2e2..0000000 --- a/Tutorial/8. Logistic Regression(Multiclass Classification)/logistic_regression(multi_class).py +++ /dev/null @@ -1,81 +0,0 @@ -print("Logistic Regression (MultiClass Classification)") -#here we are going to build a model which can read and predict the hand written words -# %matplotlib inline -#importing all the necessary packages -import matplotlib.pyplot as plt -from sklearn.datasets import load_digits -digits = load_digits() -dir(digits) -#The dir() function returns a list of names in the current local scope. -# By calling dir(digits), you're listing all the attributes and methods of the -# digits object. These will include all the attributes listed above, as -# well as other attributes that the object may have. -digits.data[0] -#to get the numeric data related to image -#to get the imagedata from data set -plt.gray() -plt.matshow(digits.images[0])#getting the first image i,e 0, and second image as 1 -plt.matshow(digits.images[1]) -#to get more image(5 images) -for i in range(5): - plt.matshow(digits.images[i]) -#get target variable -digits.target[0:5] -from sklearn.model_selection import train_test_split -#split data into train and test -X_train, X_test, Y_train, Y_test = train_test_split(digits.data,digits.target,test_size=0.2,train_size=0.8) -len(X_test) - -len(X_train) -from sklearn.linear_model import LogisticRegression -#create a object of logistic regression to train -model = LogisticRegression() - -#train the model using .fit() -model.fit(X_train,Y_train) - -# X_train is having the image data -# Y_train is having the corresponding numeric data - -model.score(X_test,Y_test) -# lets go with one random image -plt.matshow(digits.images[67]) -#let check the corresponding target data -digits.target[67] -# the output is 6 means, for this image corresponding data(number) is six - -# lets predict with our model -model.predict([digits.data[5]]) -#predicting from 0 to 5 -model.predict(digits.data[0:5]) -#our score is around 95% to check where my model is failed we use of confussion -#matrix -#confussion matrix is a table which is used to show the performance of the -#classification model on a set of test data for which the true values are known -#as ground truth. -#confussion matrix is used to evaluate the performance of the classification model - -from sklearn.metrics import confusion_matrix -#get the predicted value -Y_predicted = model.predict(X_test) - -cm = confusion_matrix(Y_test,Y_predicted) -# cm = confusion_matrix(actual data, model predicted data) -cm - -# for visualizing the above confussion matrix we are going to use sea born -import seaborn as sn -plt.figure(figsize=(10,7)) -sn.heatmap(cm,annot=True) -plt.xlabel("Predicted") -plt.ylabel("Truth") -plt.title("Confusion Matrix") -# here we are getting the diagonal values as high values, it means our model -# is working fine - - -#here in above confussion matric my model say image is 2(x axis), but truth value is 3 -#(y axis) is 1 time - -# same way 3 times model said 1 for the true value 8 -# 1 times model said 8 for the true value 1 \ No newline at end of file diff --git a/Tutorial/9. Decision Tree/Decision_Tree.ipynb b/Tutorial/9. Decision Tree/Decision_Tree.ipynb deleted file mode 100644 index eb2c651..0000000 --- a/Tutorial/9. Decision Tree/Decision_Tree.ipynb +++ /dev/null @@ -1,711 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Decision Tree\n" - ] - } - ], - "source": [ - "print(\"Decision Tree\")\n", - "#Entropy : measure of randomness\n", - "#Information Gain : measure of decrease in entropy after the dataset is split\n", - "#Gini Index : measure of impurity in a dataset\n", - "#Gini Index = 1 - (probability of class 1)^2 - (probability of class 2)^2\n", - "#Gini Index = 0 for a pure dataset\n", - "#Gini Index = 0.5 for a completely random dataset\n", - "#Gini Index = 0.5 for a dataset with 2 classes with equal probability\n", - "#Gini Index = 0.66 for a dataset with 3 classes with probability 0.5, 0.25 and 0.25" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "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", - "
companyjobdegreesalary_more_then_100k
0googlesales executivebachelors0
1googlesales executivemasters0
2googlebusiness managerbachelors1
3googlebusiness managermasters1
4googlecomputer programmerbachelors0
\n", - "
" - ], - "text/plain": [ - " company job degree salary_more_then_100k\n", - "0 google sales executive bachelors 0\n", - "1 google sales executive masters 0\n", - "2 google business manager bachelors 1\n", - "3 google business manager masters 1\n", - "4 google computer programmer bachelors 0" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "df = pd.read_csv(\"salaries.csv\")\n", - "df.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "# dividing the dataset into independent variable and dependent variable (target variable)\n", - "# declaring input for independent variable\n", - "input = df.drop('salary_more_then_100k',axis='columns')\n", - "\n", - "# declaring target for dependent variable\n", - "target = df['salary_more_then_100k']\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "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", - "
companyjobdegree
0googlesales executivebachelors
1googlesales executivemasters
2googlebusiness managerbachelors
3googlebusiness managermasters
4googlecomputer programmerbachelors
\n", - "
" - ], - "text/plain": [ - " company job degree\n", - "0 google sales executive bachelors\n", - "1 google sales executive masters\n", - "2 google business manager bachelors\n", - "3 google business manager masters\n", - "4 google computer programmer bachelors" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "input.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0\n", - "1 0\n", - "2 1\n", - "3 1\n", - "4 0\n", - "Name: salary_more_then_100k, dtype: int64" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "target.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "#machine learning can understand only the numbers, so converting the ext data into\n", - "#numeric using encoder(LabelEncoder)\n", - "from sklearn.preprocessing import LabelEncoder" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "#we have three feature so create three objects\n", - "label_company = LabelEncoder()\n", - "label_job = LabelEncoder()\n", - "label_degree = LabelEncoder()\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "#creating a new colum in our dataset using fit transform to store the numeric data\n", - "#fit_transform is used to fit and transform the data\n", - "\n", - "input['company_n'] = label_company.fit_transform(input['company'])\n", - "input['job_n'] = label_job.fit_transform(input['job'])\n", - "input['degree_n'] = label_degree.fit_transform(input['degree'])" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
companyjobdegreecompany_njob_ndegree_n
0googlesales executivebachelors220
1googlesales executivemasters221
2googlebusiness managerbachelors200
3googlebusiness managermasters201
4googlecomputer programmerbachelors210
5googlecomputer programmermasters211
6abc pharmasales executivemasters021
7abc pharmacomputer programmerbachelors010
8abc pharmabusiness managerbachelors000
9abc pharmabusiness managermasters001
10facebooksales executivebachelors120
11facebooksales executivemasters121
12facebookbusiness managerbachelors100
13facebookbusiness managermasters101
14facebookcomputer programmerbachelors110
15facebookcomputer programmermasters111
\n", - "
" - ], - "text/plain": [ - " company job degree company_n job_n degree_n\n", - "0 google sales executive bachelors 2 2 0\n", - "1 google sales executive masters 2 2 1\n", - "2 google business manager bachelors 2 0 0\n", - "3 google business manager masters 2 0 1\n", - "4 google computer programmer bachelors 2 1 0\n", - "5 google computer programmer masters 2 1 1\n", - "6 abc pharma sales executive masters 0 2 1\n", - "7 abc pharma computer programmer bachelors 0 1 0\n", - "8 abc pharma business manager bachelors 0 0 0\n", - "9 abc pharma business manager masters 0 0 1\n", - "10 facebook sales executive bachelors 1 2 0\n", - "11 facebook sales executive masters 1 2 1\n", - "12 facebook business manager bachelors 1 0 0\n", - "13 facebook business manager masters 1 0 1\n", - "14 facebook computer programmer bachelors 1 1 0\n", - "15 facebook computer programmer masters 1 1 1" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "input\n", - "#in this transformed data google is encoded as 2, abc pharm is encoded as 0,\n", - "#facebook is encoded as 1,\n", - "#sales executive is encoded as 2,bachelor is encoded as 0, masters as 1 an so on.." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "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", - "
company_njob_ndegree_n
0220
1221
2200
3201
4210
\n", - "
" - ], - "text/plain": [ - " company_n job_n degree_n\n", - "0 2 2 0\n", - "1 2 2 1\n", - "2 2 0 0\n", - "3 2 0 1\n", - "4 2 1 0" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#droping all the unwanted colum(colum which is transformed to numeric data)\n", - "input_n = input.drop(['company','job','degree'],axis='columns')\n", - "input_n.head()" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
DecisionTreeClassifier()
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": [ - "DecisionTreeClassifier()" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "#kow we are going to train our classifier\n", - "#we are using decision tree classifier\n", - "from sklearn import tree\n", - "model = tree.DecisionTreeClassifier()\n", - "model.fit(input_n,target) \n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.score(input_n,target)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but DecisionTreeClassifier was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([0], dtype=int64)" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.predict([[2,2,1]])\n", - "#predicting using encoded number\n", - "#2 is facebook, 2 is sales executive, 1 is masters\n", - "#output is 0 which means salary is not more than 100k\n" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "C:\\Users\\Admin\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\base.py:439: UserWarning: X does not have valid feature names, but DecisionTreeClassifier was fitted with feature names\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "array([1], dtype=int64)" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model.predict([[2,0,1]])\n", - "#output is 1 which means salary is more than 100k" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "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.11.6" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/Tutorial/9. Decision Tree/Decision_tree.py b/Tutorial/9. Decision Tree/Decision_tree.py deleted file mode 100644 index f5a381b..0000000 --- a/Tutorial/9. Decision Tree/Decision_tree.py +++ /dev/null @@ -1,57 +0,0 @@ -print("Decision Tree") -#Entropy : measure of randomness -#Information Gain : measure of decrease in entropy after the dataset is split -#Gini Index : measure of impurity in a dataset -#Gini Index = 1 - (probability of class 1)^2 - (probability of class 2)^2 -#Gini Index = 0 for a pure dataset -#Gini Index = 0.5 for a completely random dataset -#Gini Index = 0.5 for a dataset with 2 classes with equal probability -#Gini Index = 0.66 for a dataset with 3 classes with probability 0.5, 0.25 and 0.25 -import pandas as pd -df = pd.read_csv("salaries.csv") -df.head() -# dividing the dataset into independent variable and dependent variable (target variable) -# declaring input for independent variable -input = df.drop('salary_more_then_100k',axis='columns') - -# declaring target for dependent variable -target = df['salary_more_then_100k'] - -input.head() -target.head() -#machine learning can understand only the numbers, so converting the ext data into -#numeric using encoder(LabelEncoder) -from sklearn.preprocessing import LabelEncoder -#we have three feature so create three objects -label_company = LabelEncoder() -label_job = LabelEncoder() -label_degree = LabelEncoder() - - -#creating a new colum in our dataset using fit transform to store the numeric data -#fit_transform is used to fit and transform the data - -input['company_n'] = label_company.fit_transform(input['company']) -input['job_n'] = label_job.fit_transform(input['job']) -input['degree_n'] = label_degree.fit_transform(input['degree']) -input -#in this transformed data google is encoded as 2, abc pharm is encoded as 0, -#facebook is encoded as 1, -#sales executive is encoded as 2,bachelor is encoded as 0, masters as 1 an so on.. -#droping all the unwanted colum(colum which is transformed to numeric data) -input_n = input.drop(['company','job','degree'],axis='columns') -input_n.head() -#kow we are going to train our classifier -#we are using decision tree classifier -from sklearn import tree -model = tree.DecisionTreeClassifier() -model.fit(input_n,target) - -model.score(input_n,target) -model.predict([[2,2,1]]) -#predicting using encoded number -#2 is facebook, 2 is sales executive, 1 is masters -#output is 0 which means salary is not more than 100k - -model.predict([[2,0,1]]) -#output is 1 which means salary is more than 100k \ No newline at end of file diff --git a/Tutorial/9. Decision Tree/salaries.csv b/Tutorial/9. Decision Tree/salaries.csv deleted file mode 100644 index ff55c26..0000000 --- a/Tutorial/9. Decision Tree/salaries.csv +++ /dev/null @@ -1,17 +0,0 @@ -company,job,degree,salary_more_then_100k -google,sales executive,bachelors,0 -google,sales executive,masters,0 -google,business manager,bachelors,1 -google,business manager,masters,1 -google,computer programmer,bachelors,0 -google,computer programmer,masters,1 -abc pharma,sales executive,masters,0 -abc pharma,computer programmer,bachelors,0 -abc pharma,business manager,bachelors,0 -abc pharma,business manager,masters,1 -facebook,sales executive,bachelors,1 -facebook,sales executive,masters,1 -facebook,business manager,bachelors,1 -facebook,business manager,masters,1 -facebook,computer programmer,bachelors,1 -facebook,computer programmer,masters,1 \ No newline at end of file