input: Write a python function to train a simple linear classifier using gradient descent, and make predictions with it.
  assert train_and_predict(np.array([[1, 5], [2, 3], [3, 4]]), np.array([1, -1, -1]), np.array([4, 2])) == "Negative"
  assert train_and_predict(np.array([[1, 5], [2, 3], [3, 4]]), np.array([1, -1, -1]), np.array([1, 5])) == "Positive"
  assert train_and_predict(np.array([[1, 5], [2, 3], [3, 4]]), np.array([1, -1, -1]), np.array([2, 3])) == "Negative"
output: def train_and_predict(X, y, x_new, learning_rate=0.01, epochs=1000):
      import numpy as np
  
      def sigmoid(z):
          return 1 / (1 + np.exp(-z))
      
      # Initialize weights
      weights = np.zeros(X.shape[1])
      bias = 0
  
      # Gradient descent
      for _ in range(epochs):
          linear_model = np.dot(X, weights) + bias
          y_predicted = sigmoid(linear_model)
  
          # Compute gradients
          dw = (1 / len(y)) * np.dot(X.T, (y_predicted - y))
          db = (1 / len(y)) * np.sum(y_predicted - y)
  
          # Update weights and bias
          weights -= learning_rate * dw
          bias -= learning_rate * db
  
      # Make prediction
      linear_output = np.dot(x_new, weights) + bias
      prediction = sigmoid(linear_output)
      return "Positive" if prediction >= 0.5 else "Negative"