From fba689268bea11115ad32111a10d420526cb5504 Mon Sep 17 00:00:00 2001 From: Riemann <40825655+anand372@users.noreply.github.com> Date: Tue, 27 Aug 2019 21:02:26 +0530 Subject: [PATCH 1/5] svm.py for issue #840 I would like to add the Support Vector Machine algorithm implemented in Python 3.6.7 Requirements: - sklearn --- machine_learning/svm.py | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 machine_learning/svm.py diff --git a/machine_learning/svm.py b/machine_learning/svm.py new file mode 100644 index 000000000000..920a9ec5e587 --- /dev/null +++ b/machine_learning/svm.py @@ -0,0 +1,47 @@ +from sklearn.datasets import load_iris +from sklearn import svm +from sklearn.metrics import accuracy_score +from sklearn.model_selection import train_test_split + + +def NuSVC(train_x, train_y, test_x): + svc_NuSVC = svm.NuSVC() + svc_NuSVC.fit(train_x, train_y) + predicted_NuSVC = svc_NuSVC.predict(test_x) + score_NuSVC = accuracy_score(test_y, predicted_NuSVC) + # outputs the accuracy + print("NuSVC score:{}%", score_NuSVC * 100) + + +def Linearsvc(train_x, train_y, test_x): + svc_linear = svm.LinearSVC() + svc_linear.fit(train_x, train_y) + predicted_svc_linear = svc_linear.predict(test_x) + score_svc_linear = accuracy_score(test_y, predicted_svc_linear) + # outputs the accuracy + print("Linearsvc score:{}%", score_svc_linear * 100) + + +def SVC(train_x, train_y, test_x): + # svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None) + # various parameters like "kernal","gamma","C" can effectively tuned for a given machine learning model. + SVC = svm.SVC() + SVC.fit(train_x, train_y) + predicted_SVC = SVC.predict(test_x) + score_SVC = accuracy_score(test_y, predicted_SVC) + # outputs the accuracy + print("SVC score:{}%", score_SVC * 100) + + +# loading the iris dataset +iris = load_iris() +# splitting the dataset to test and train +train_x, test_x, train_y, test_y = train_test_split( + iris["data"], iris["target"], random_state=4 +) +print("Target names: \n {} ".format(iris.target_names)) +print("\n Features: \n {}".format(iris.feature_names)) + +NuSVC(train_x, train_y, test_x) +Linearsvc(train_x, train_y, test_x) +SVC(train_x, train_y, test_x) From 08660b96b86a467c23c9f95413753a844d26dbcd Mon Sep 17 00:00:00 2001 From: Riemann <40825655+anand372@users.noreply.github.com> Date: Tue, 27 Aug 2019 22:54:20 +0530 Subject: [PATCH 2/5] update svm.py --- machine_learning/svm.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/machine_learning/svm.py b/machine_learning/svm.py index 920a9ec5e587..975572009a18 100644 --- a/machine_learning/svm.py +++ b/machine_learning/svm.py @@ -10,7 +10,7 @@ def NuSVC(train_x, train_y, test_x): predicted_NuSVC = svc_NuSVC.predict(test_x) score_NuSVC = accuracy_score(test_y, predicted_NuSVC) # outputs the accuracy - print("NuSVC score:{}%", score_NuSVC * 100) + print("NuSVC score:{} %".format(score_NuSVC * 100)) def Linearsvc(train_x, train_y, test_x): @@ -19,7 +19,7 @@ def Linearsvc(train_x, train_y, test_x): predicted_svc_linear = svc_linear.predict(test_x) score_svc_linear = accuracy_score(test_y, predicted_svc_linear) # outputs the accuracy - print("Linearsvc score:{}%", score_svc_linear * 100) + print("Linearsvc score:{} %".format(score_svc_linear * 100)) def SVC(train_x, train_y, test_x): @@ -30,7 +30,7 @@ def SVC(train_x, train_y, test_x): predicted_SVC = SVC.predict(test_x) score_SVC = accuracy_score(test_y, predicted_SVC) # outputs the accuracy - print("SVC score:{}%", score_SVC * 100) + print("SVC score:{} %".format(score_SVC * 100)) # loading the iris dataset @@ -45,3 +45,8 @@ def SVC(train_x, train_y, test_x): NuSVC(train_x, train_y, test_x) Linearsvc(train_x, train_y, test_x) SVC(train_x, train_y, test_x) + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 78cdc4824ceb71929720e8e11a04659edce858bc Mon Sep 17 00:00:00 2001 From: Riemann <40825655+anand372@users.noreply.github.com> Date: Tue, 27 Aug 2019 23:16:25 +0530 Subject: [PATCH 3/5] update svm.py --- machine_learning/svm.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/machine_learning/svm.py b/machine_learning/svm.py index 975572009a18..f52cea14fdeb 100644 --- a/machine_learning/svm.py +++ b/machine_learning/svm.py @@ -4,7 +4,7 @@ from sklearn.model_selection import train_test_split -def NuSVC(train_x, train_y, test_x): +def NuSVC(train_x, train_y, test_x, test_y): svc_NuSVC = svm.NuSVC() svc_NuSVC.fit(train_x, train_y) predicted_NuSVC = svc_NuSVC.predict(test_x) @@ -13,7 +13,7 @@ def NuSVC(train_x, train_y, test_x): print("NuSVC score:{} %".format(score_NuSVC * 100)) -def Linearsvc(train_x, train_y, test_x): +def Linearsvc(train_x, train_y, test_x, test_y): svc_linear = svm.LinearSVC() svc_linear.fit(train_x, train_y) predicted_svc_linear = svc_linear.predict(test_x) @@ -22,7 +22,7 @@ def Linearsvc(train_x, train_y, test_x): print("Linearsvc score:{} %".format(score_svc_linear * 100)) -def SVC(train_x, train_y, test_x): +def SVC(train_x, train_y, test_x, test_y): # svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None) # various parameters like "kernal","gamma","C" can effectively tuned for a given machine learning model. SVC = svm.SVC() @@ -33,20 +33,23 @@ def SVC(train_x, train_y, test_x): print("SVC score:{} %".format(score_SVC * 100)) -# loading the iris dataset -iris = load_iris() -# splitting the dataset to test and train -train_x, test_x, train_y, test_y = train_test_split( - iris["data"], iris["target"], random_state=4 -) -print("Target names: \n {} ".format(iris.target_names)) -print("\n Features: \n {}".format(iris.feature_names)) +def main(): + # loading the iris dataset + iris = load_iris() + # splitting the dataset to test and train + train_x, test_x, train_y, test_y = train_test_split( + iris["data"], iris["target"], random_state=4 + ) + print("Target names: \n {} ".format(iris.target_names)) + print("\n Features: \n {}".format(iris.feature_names)) + + NuSVC(train_x, train_y, test_x, test_y) + Linearsvc(train_x, train_y, test_x, test_y) + SVC(train_x, train_y, test_x, test_y) -NuSVC(train_x, train_y, test_x) -Linearsvc(train_x, train_y, test_x) -SVC(train_x, train_y, test_x) if __name__ == "__main__": import doctest - + doctest.testmod() + main() From e437279d8af56d3cda716972979d46949210ed55 Mon Sep 17 00:00:00 2001 From: Riemann <40825655+anand372@users.noreply.github.com> Date: Wed, 28 Aug 2019 15:41:31 +0530 Subject: [PATCH 4/5] Update and renamed to sorted_vector_machines.py --- machine_learning/sorted_vector_machines.py | 54 +++++++++++++++++++++ machine_learning/svm.py | 55 ---------------------- 2 files changed, 54 insertions(+), 55 deletions(-) create mode 100644 machine_learning/sorted_vector_machines.py delete mode 100644 machine_learning/svm.py diff --git a/machine_learning/sorted_vector_machines.py b/machine_learning/sorted_vector_machines.py new file mode 100644 index 000000000000..6c920a453539 --- /dev/null +++ b/machine_learning/sorted_vector_machines.py @@ -0,0 +1,54 @@ +from sklearn.datasets import load_iris +from sklearn import svm +from sklearn.model_selection import train_test_split +import doctest + +# different functions implementing different types of SVM's +def NuSVC(train_x, train_y): + svc_NuSVC = svm.NuSVC() + svc_NuSVC.fit(train_x, train_y) + return svc_NuSVC + + +def Linearsvc(train_x, train_y): + svc_linear = svm.LinearSVC() + svc_linear.fit(train_x, train_y) + return svc_linear + + +def SVC(train_x, train_y): + # svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None) + # various parameters like "kernal","gamma","C" can effectively tuned for a given machine learning model. + SVC = svm.SVC(gamma="auto") + SVC.fit(train_x, train_y) + return SVC + + +def test(X_new): + """ + 3 test cases to be passed + an array containing the sepal length (cm), sepal width (cm),petal length (cm),petal width (cm) + based on which the target name will be predicted + >>> test([1,2,1,4]) + 'virginica' + >>> test([5, 2, 4, 1]) + 'versicolor' + >>> test([6,3,4,1]) + 'versicolor' + + """ + prediction = current_model.predict([X_new]) + return iris["target_names"][prediction][0] + + +if __name__ == "__main__": + iris = load_iris() + # splitting the dataset to test and train + train_x, test_x, train_y, test_y = train_test_split( + iris["data"], iris["target"], random_state=4 + ) + # any of the 3 types of SVM can be used + # current_model=SVC(train_x, train_y) + # current_model=NuSVC(train_x, train_y) + current_model = Linearsvc(train_x, train_y) + doctest.testmod() diff --git a/machine_learning/svm.py b/machine_learning/svm.py deleted file mode 100644 index f52cea14fdeb..000000000000 --- a/machine_learning/svm.py +++ /dev/null @@ -1,55 +0,0 @@ -from sklearn.datasets import load_iris -from sklearn import svm -from sklearn.metrics import accuracy_score -from sklearn.model_selection import train_test_split - - -def NuSVC(train_x, train_y, test_x, test_y): - svc_NuSVC = svm.NuSVC() - svc_NuSVC.fit(train_x, train_y) - predicted_NuSVC = svc_NuSVC.predict(test_x) - score_NuSVC = accuracy_score(test_y, predicted_NuSVC) - # outputs the accuracy - print("NuSVC score:{} %".format(score_NuSVC * 100)) - - -def Linearsvc(train_x, train_y, test_x, test_y): - svc_linear = svm.LinearSVC() - svc_linear.fit(train_x, train_y) - predicted_svc_linear = svc_linear.predict(test_x) - score_svc_linear = accuracy_score(test_y, predicted_svc_linear) - # outputs the accuracy - print("Linearsvc score:{} %".format(score_svc_linear * 100)) - - -def SVC(train_x, train_y, test_x, test_y): - # svm.SVC(C=1.0, kernel='rbf', degree=3, gamma=0.0, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, random_state=None) - # various parameters like "kernal","gamma","C" can effectively tuned for a given machine learning model. - SVC = svm.SVC() - SVC.fit(train_x, train_y) - predicted_SVC = SVC.predict(test_x) - score_SVC = accuracy_score(test_y, predicted_SVC) - # outputs the accuracy - print("SVC score:{} %".format(score_SVC * 100)) - - -def main(): - # loading the iris dataset - iris = load_iris() - # splitting the dataset to test and train - train_x, test_x, train_y, test_y = train_test_split( - iris["data"], iris["target"], random_state=4 - ) - print("Target names: \n {} ".format(iris.target_names)) - print("\n Features: \n {}".format(iris.feature_names)) - - NuSVC(train_x, train_y, test_x, test_y) - Linearsvc(train_x, train_y, test_x, test_y) - SVC(train_x, train_y, test_x, test_y) - - -if __name__ == "__main__": - import doctest - - doctest.testmod() - main() From 06897c4d474c643a8d913f2630a86e00ce374f65 Mon Sep 17 00:00:00 2001 From: Riemann <40825655+anand372@users.noreply.github.com> Date: Wed, 28 Aug 2019 15:53:53 +0530 Subject: [PATCH 5/5] Updated sorted_vector_machines.py --- machine_learning/sorted_vector_machines.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/machine_learning/sorted_vector_machines.py b/machine_learning/sorted_vector_machines.py index 6c920a453539..92fa814c998f 100644 --- a/machine_learning/sorted_vector_machines.py +++ b/machine_learning/sorted_vector_machines.py @@ -37,11 +37,6 @@ def test(X_new): 'versicolor' """ - prediction = current_model.predict([X_new]) - return iris["target_names"][prediction][0] - - -if __name__ == "__main__": iris = load_iris() # splitting the dataset to test and train train_x, test_x, train_y, test_y = train_test_split( @@ -51,4 +46,9 @@ def test(X_new): # current_model=SVC(train_x, train_y) # current_model=NuSVC(train_x, train_y) current_model = Linearsvc(train_x, train_y) + prediction = current_model.predict([X_new]) + return iris["target_names"][prediction][0] + + +if __name__ == "__main__": doctest.testmod()