From d64ef761d1ef9b115c135bfc15d619fe227632bb Mon Sep 17 00:00:00 2001 From: srivastava9 Date: Fri, 18 Oct 2019 19:01:31 +0530 Subject: [PATCH] Added some machine learning scripts like svm,kernels and CNN using Tensorflow --- .../src.py | 81 ++++++ .../result_of_svm_code.png.png | Bin 0 -> 25579 bytes .../svm.py | 165 ++++++++++++ .../kernels and Soft svm using python/src.py | 246 ++++++++++++++++++ 4 files changed, 492 insertions(+) create mode 100644 Machine_Learning/src/Convolution Neural Network with Tensorflow/src.py create mode 100644 Machine_Learning/src/Support Vector Machine using Python/result_of_svm_code.png.png create mode 100644 Machine_Learning/src/Support Vector Machine using Python/svm.py create mode 100644 Machine_Learning/src/kernels and Soft svm using python/src.py diff --git a/Machine_Learning/src/Convolution Neural Network with Tensorflow/src.py b/Machine_Learning/src/Convolution Neural Network with Tensorflow/src.py new file mode 100644 index 00000000..1042d9b3 --- /dev/null +++ b/Machine_Learning/src/Convolution Neural Network with Tensorflow/src.py @@ -0,0 +1,81 @@ +import tensorflow as tf +from tensorflow.examples.tutorials.mnist import input_data + +mnist = input_data.read_data_sets("/tmp/data/", one_hot=True) + +n_classes = 10 +batch_size = 128 + +x = tf.placeholder("float", [None, 784]) +y = tf.placeholder("float") + +keep_rate = 0.8 +keep_prob = tf.placeholder(tf.float32) + + +def conv2d(x, W): + return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding="SAME") + + +def maxpool2d(x): + # size of window movement of window + return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME") + + +def convolutional_neural_network(x): + weights = { + "W_conv1": tf.Variable(tf.random_normal([5, 5, 1, 32])), + "W_conv2": tf.Variable(tf.random_normal([5, 5, 32, 64])), + "W_fc": tf.Variable(tf.random_normal([7 * 7 * 64, 1024])), + "out": tf.Variable(tf.random_normal([1024, n_classes])), + } + + biases = { + "b_conv1": tf.Variable(tf.random_normal([32])), + "b_conv2": tf.Variable(tf.random_normal([64])), + "b_fc": tf.Variable(tf.random_normal([1024])), + "out": tf.Variable(tf.random_normal([n_classes])), + } + + x = tf.reshape(x, shape=[-1, 28, 28, 1]) + + conv1 = tf.nn.relu(conv2d(x, weights["W_conv1"]) + biases["b_conv1"]) + conv1 = maxpool2d(conv1) + + conv2 = tf.nn.relu(conv2d(conv1, weights["W_conv2"]) + biases["b_conv2"]) + conv2 = maxpool2d(conv2) + + fc = tf.reshape(conv2, [-1, 7 * 7 * 64]) + fc = tf.nn.relu(tf.matmul(fc, weights["W_fc"]) + biases["b_fc"]) + fc = tf.nn.dropout(fc, keep_rate) + + output = tf.matmul(fc, weights["out"]) + biases["out"] + + return output + + +def train_neural_network(x): + prediction = convolutional_neural_network(x) + cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y)) + optimizer = tf.train.AdamOptimizer().minimize(cost) + + hm_epochs = 10 + with tf.Session() as sess: + sess.run(tf.initialize_all_variables()) + + for epoch in range(hm_epochs): + epoch_loss = 0 + for _ in range(int(mnist.train.num_examples / batch_size)): + epoch_x, epoch_y = mnist.train.next_batch(batch_size) + _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y}) + epoch_loss += c + + print("Epoch", epoch, "completed out of", hm_epochs, "loss:", epoch_loss) + + correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) + + accuracy = tf.reduce_mean(tf.cast(correct, "float")) + print("Accuracy:", accuracy.eval({x: mnist.test.images, y: mnist.test.labels})) + + +train_neural_network(x) diff --git a/Machine_Learning/src/Support Vector Machine using Python/result_of_svm_code.png.png b/Machine_Learning/src/Support Vector Machine using Python/result_of_svm_code.png.png new file mode 100644 index 0000000000000000000000000000000000000000..18682533fd2dca0198ec90dd0e4610bb1f4b5fa7 GIT binary patch literal 25579 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 1 + # + # #### add a break here later.. + for i in self.data: + for xi in self.data[i]: + yi = i + if not yi * (np.dot(w_t, xi) + b) >= 1: + found_option = False + # print(xi,':',yi*(np.dot(w_t,xi)+b)) + + if found_option: + opt_dict[np.linalg.norm(w_t)] = [w_t, b] + + if w[0] < 0: + optimized = True + print("Optimized a step.") + else: + w = w - step + + norms = sorted([n for n in opt_dict]) + # ||w|| : [w,b] + opt_choice = opt_dict[norms[0]] + self.w = opt_choice[0] + self.b = opt_choice[1] + latest_optimum = opt_choice[0][0] + step * 2 + + for i in self.data: + for xi in self.data[i]: + yi = i + print(xi, ":", yi * (np.dot(self.w, xi) + self.b)) + + def predict(self, features): + # sign( x.w+b ) + classification = np.sign(np.dot(np.array(features), self.w) + self.b) + if classification != 0 and self.visualization: + self.ax.scatter( + features[0], + features[1], + s=200, + marker="*", + c=self.colors[classification], + ) + return classification + + def visualize(self): + [ + [ + self.ax.scatter(x[0], x[1], s=100, color=self.colors[i]) + for x in data_dict[i] + ] + for i in data_dict + ] + + # hyperplane = x.w+b + # v = x.w+b + # psv = 1 + # nsv = -1 + # dec = 0 + def hyperplane(x, w, b, v): + return (-w[0] * x - b + v) / w[1] + + datarange = (self.min_feature_value * 0.9, self.max_feature_value * 1.1) + hyp_x_min = datarange[0] + hyp_x_max = datarange[1] + + # (w.x+b) = 1 + # positive support vector hyperplane + psv1 = hyperplane(hyp_x_min, self.w, self.b, 1) + psv2 = hyperplane(hyp_x_max, self.w, self.b, 1) + self.ax.plot([hyp_x_min, hyp_x_max], [psv1, psv2], "k") + + # (w.x+b) = -1 + # negative support vector hyperplane + nsv1 = hyperplane(hyp_x_min, self.w, self.b, -1) + nsv2 = hyperplane(hyp_x_max, self.w, self.b, -1) + self.ax.plot([hyp_x_min, hyp_x_max], [nsv1, nsv2], "k") + + # (w.x+b) = 0 + # positive support vector hyperplane + db1 = hyperplane(hyp_x_min, self.w, self.b, 0) + db2 = hyperplane(hyp_x_max, self.w, self.b, 0) + self.ax.plot([hyp_x_min, hyp_x_max], [db1, db2], "y--") + + plt.show() + + +data_dict = { + -1: np.array([[1, 7], [2, 8], [3, 8]]), + 1: np.array([[5, 1], [6, -1], [7, 3]]), +} + +svm = Support_Vector_Machine() +svm.fit(data=data_dict) + +predict_us = [[0, 10], [1, 3], [3, 4], [3, 5], [5, 5], [5, 6], [6, -5], [5, 8]] + +for p in predict_us: + svm.predict(p) + +svm.visualize() +# result of this code is attached in file diff --git a/Machine_Learning/src/kernels and Soft svm using python/src.py b/Machine_Learning/src/kernels and Soft svm using python/src.py new file mode 100644 index 00000000..9bcea5d2 --- /dev/null +++ b/Machine_Learning/src/kernels and Soft svm using python/src.py @@ -0,0 +1,246 @@ +import numpy as np +from numpy import linalg +import cvxopt +import cvxopt.solvers + + +def linear_kernel(x1, x2): + return np.dot(x1, x2) + + +def polynomial_kernel(x, y, p=3): + return (1 + np.dot(x, y)) ** p + + +def gaussian_kernel(x, y, sigma=5.0): + return np.exp(-linalg.norm(x - y) ** 2 / (2 * (sigma ** 2))) + + +class SVM(object): + def __init__(self, kernel=linear_kernel, C=None): + self.kernel = kernel + self.C = C + if self.C is not None: + self.C = float(self.C) + + def fit(self, X, y): + n_samples, n_features = X.shape + + # Gram matrix + K = np.zeros((n_samples, n_samples)) + for i in range(n_samples): + for j in range(n_samples): + K[i, j] = self.kernel(X[i], X[j]) + + P = cvxopt.matrix(np.outer(y, y) * K) + q = cvxopt.matrix(np.ones(n_samples) * -1) + A = cvxopt.matrix(y, (1, n_samples)) + b = cvxopt.matrix(0.0) + + if self.C is None: + G = cvxopt.matrix(np.diag(np.ones(n_samples) * -1)) + h = cvxopt.matrix(np.zeros(n_samples)) + else: + tmp1 = np.diag(np.ones(n_samples) * -1) + tmp2 = np.identity(n_samples) + G = cvxopt.matrix(np.vstack((tmp1, tmp2))) + tmp1 = np.zeros(n_samples) + tmp2 = np.ones(n_samples) * self.C + h = cvxopt.matrix(np.hstack((tmp1, tmp2))) + + # solve QP problem + solution = cvxopt.solvers.qp(P, q, G, h, A, b) + + # Lagrange multipliers + a = np.ravel(solution["x"]) + + # Support vectors have non zero lagrange multipliers + sv = a > 1e-5 + ind = np.arange(len(a))[sv] + self.a = a[sv] + self.sv = X[sv] + self.sv_y = y[sv] + print("%d support vectors out of %d points" % (len(self.a), n_samples)) + + # Intercept + self.b = 0 + for n in range(len(self.a)): + self.b += self.sv_y[n] + self.b -= np.sum(self.a * self.sv_y * K[ind[n], sv]) + self.b /= len(self.a) + + # Weight vector + if self.kernel == linear_kernel: + self.w = np.zeros(n_features) + for n in range(len(self.a)): + self.w += self.a[n] * self.sv_y[n] * self.sv[n] + else: + self.w = None + + def project(self, X): + if self.w is not None: + return np.dot(X, self.w) + self.b + else: + y_predict = np.zeros(len(X)) + for i in range(len(X)): + s = 0 + for a, sv_y, sv in zip(self.a, self.sv_y, self.sv): + s += a * sv_y * self.kernel(X[i], sv) + y_predict[i] = s + return y_predict + self.b + + def predict(self, X): + return np.sign(self.project(X)) + + +if __name__ == "__main__": + import pylab as pl + + def gen_lin_separable_data(): + # generate training data in the 2-d case + mean1 = np.array([0, 2]) + mean2 = np.array([2, 0]) + cov = np.array([[0.8, 0.6], [0.6, 0.8]]) + X1 = np.random.multivariate_normal(mean1, cov, 100) + y1 = np.ones(len(X1)) + X2 = np.random.multivariate_normal(mean2, cov, 100) + y2 = np.ones(len(X2)) * -1 + return X1, y1, X2, y2 + + def gen_non_lin_separable_data(): + mean1 = [-1, 2] + mean2 = [1, -1] + mean3 = [4, -4] + mean4 = [-4, 4] + cov = [[1.0, 0.8], [0.8, 1.0]] + X1 = np.random.multivariate_normal(mean1, cov, 50) + X1 = np.vstack((X1, np.random.multivariate_normal(mean3, cov, 50))) + y1 = np.ones(len(X1)) + X2 = np.random.multivariate_normal(mean2, cov, 50) + X2 = np.vstack((X2, np.random.multivariate_normal(mean4, cov, 50))) + y2 = np.ones(len(X2)) * -1 + return X1, y1, X2, y2 + + def gen_lin_separable_overlap_data(): + # generate training data in the 2-d case + mean1 = np.array([0, 2]) + mean2 = np.array([2, 0]) + cov = np.array([[1.5, 1.0], [1.0, 1.5]]) + X1 = np.random.multivariate_normal(mean1, cov, 100) + y1 = np.ones(len(X1)) + X2 = np.random.multivariate_normal(mean2, cov, 100) + y2 = np.ones(len(X2)) * -1 + return X1, y1, X2, y2 + + def split_train(X1, y1, X2, y2): + X1_train = X1[:90] + y1_train = y1[:90] + X2_train = X2[:90] + y2_train = y2[:90] + X_train = np.vstack((X1_train, X2_train)) + y_train = np.hstack((y1_train, y2_train)) + return X_train, y_train + + def split_test(X1, y1, X2, y2): + X1_test = X1[90:] + y1_test = y1[90:] + X2_test = X2[90:] + y2_test = y2[90:] + X_test = np.vstack((X1_test, X2_test)) + y_test = np.hstack((y1_test, y2_test)) + return X_test, y_test + + def plot_margin(X1_train, X2_train, clf): + def f(x, w, b, c=0): + # given x, return y such that [x,y] in on the line + # w.x + b = c + return (-w[0] * x - b + c) / w[1] + + pl.plot(X1_train[:, 0], X1_train[:, 1], "ro") + pl.plot(X2_train[:, 0], X2_train[:, 1], "bo") + pl.scatter(clf.sv[:, 0], clf.sv[:, 1], s=100, c="g") + + # w.x + b = 0 + a0 = -4 + a1 = f(a0, clf.w, clf.b) + b0 = 4 + b1 = f(b0, clf.w, clf.b) + pl.plot([a0, b0], [a1, b1], "k") + + # w.x + b = 1 + a0 = -4 + a1 = f(a0, clf.w, clf.b, 1) + b0 = 4 + b1 = f(b0, clf.w, clf.b, 1) + pl.plot([a0, b0], [a1, b1], "k--") + + # w.x + b = -1 + a0 = -4 + a1 = f(a0, clf.w, clf.b, -1) + b0 = 4 + b1 = f(b0, clf.w, clf.b, -1) + pl.plot([a0, b0], [a1, b1], "k--") + + pl.axis("tight") + pl.show() + + def plot_contour(X1_train, X2_train, clf): + pl.plot(X1_train[:, 0], X1_train[:, 1], "ro") + pl.plot(X2_train[:, 0], X2_train[:, 1], "bo") + pl.scatter(clf.sv[:, 0], clf.sv[:, 1], s=100, c="g") + + X1, X2 = np.meshgrid(np.linspace(-6, 6, 50), np.linspace(-6, 6, 50)) + X = np.array([[x1, x2] for x1, x2 in zip(np.ravel(X1), np.ravel(X2))]) + Z = clf.project(X).reshape(X1.shape) + pl.contour(X1, X2, Z, [0.0], colors="k", linewidths=1, origin="lower") + pl.contour(X1, X2, Z + 1, [0.0], colors="grey", linewidths=1, origin="lower") + pl.contour(X1, X2, Z - 1, [0.0], colors="grey", linewidths=1, origin="lower") + + pl.axis("tight") + pl.show() + + def test_linear(): + X1, y1, X2, y2 = gen_lin_separable_data() + X_train, y_train = split_train(X1, y1, X2, y2) + X_test, y_test = split_test(X1, y1, X2, y2) + + clf = SVM() + clf.fit(X_train, y_train) + + y_predict = clf.predict(X_test) + correct = np.sum(y_predict == y_test) + print("%d out of %d predictions correct" % (correct, len(y_predict))) + + plot_margin(X_train[y_train == 1], X_train[y_train == -1], clf) + + def test_non_linear(): + X1, y1, X2, y2 = gen_non_lin_separable_data() + X_train, y_train = split_train(X1, y1, X2, y2) + X_test, y_test = split_test(X1, y1, X2, y2) + + clf = SVM(polynomial_kernel) + clf.fit(X_train, y_train) + + y_predict = clf.predict(X_test) + correct = np.sum(y_predict == y_test) + print("%d out of %d predictions correct" % (correct, len(y_predict))) + + plot_contour(X_train[y_train == 1], X_train[y_train == -1], clf) + + def test_soft(): + X1, y1, X2, y2 = gen_lin_separable_overlap_data() + X_train, y_train = split_train(X1, y1, X2, y2) + X_test, y_test = split_test(X1, y1, X2, y2) + + clf = SVM(C=1000.1) + clf.fit(X_train, y_train) + + y_predict = clf.predict(X_test) + correct = np.sum(y_predict == y_test) + print("%d out of %d predictions correct" % (correct, len(y_predict))) + + plot_contour(X_train[y_train == 1], X_train[y_train == -1], clf) + + # test_linear() + # test_non_linear() + test_soft()