input: def sentiment_analysis(tweets: List[str]) -> List[str]:
      """ Given a list of tweets, classify each tweet as either positive or negative sentiment.
      The process involves preprocessing each tweet, vectorizing the cleaned tweet, and then 
      predicting the sentiment based on the vectorized tweet.
      >>> sentiment_analysis(["I love programming!", "This is awful"])
      ['Positive', 'Negative']
      >>> sentiment_analysis(["Great day!", "Not a good experience"])
      ['Positive', 'Negative']
      """
output:     from sklearn.feature_extraction.text import TfidfVectorizer
      from sklearn.naive_bayes import MultinomialNB
      import re
  
      def preprocess(tweet: str) -> str:
          tweet = re.sub(r'[^\w\s]', '', tweet)
          tweet = tweet.lower()
          return tweet
  
      vectorizer = TfidfVectorizer(stop_words='english')
      classifier = MultinomialNB()
  
      cleaned_tweets = [preprocess(tweet) for tweet in tweets]
      X = vectorizer.fit_transform(cleaned_tweets)
      classifier.fit(X, ['Positive' if 'love' in tweet or 'great' in tweet else 'Negative' for tweet in cleaned_tweets])
  
      predictions = classifier.predict(X)
      return predictions.tolist()