Bird
Raised Fist0
ML Pythonml~12 mins

Text feature basics (CountVectorizer, TF-IDF) in ML Python - Model Pipeline Trace

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Model Pipeline - Text feature basics (CountVectorizer, TF-IDF)

This pipeline converts text into numbers using CountVectorizer and TF-IDF. Then, it trains a simple model to classify text based on these features.

Data Flow - 5 Stages
1Raw Text Input
6 samples (sentences)Collect raw text data6 samples (sentences)
["I love apples", "Apples are tasty", "I hate bananas", "Bananas are yellow", "I love fruit", "Fruit is healthy"]
2CountVectorizer
6 samples (sentences)Convert text to word count vectors6 samples x 9 features (unique words)
[[1,1,0,0,0,0,0,0,0], [0,1,1,0,0,0,0,0,0], [1,0,0,1,0,0,0,0,0], [0,0,0,1,1,0,0,0,0], [1,0,0,0,0,1,0,0,0], [0,0,0,0,0,0,1,1,1]]
3TF-IDF Transformer
6 samples x 9 featuresConvert counts to TF-IDF scores6 samples x 9 features (TF-IDF weighted)
[[0.58,0.58,0,0,0,0,0,0,0], [0,0.58,0.81,0,0,0,0,0,0], [0.58,0,0,0.81,0,0,0,0,0], [0,0,0,0.58,0.81,0,0,0,0], [0.58,0,0,0,0,0.81,0,0,0], [0,0,0,0,0,0,0.58,0.58,0.58]]
4Train/Test Split
6 samples x 9 featuresSplit data into training and testing sets4 training samples x 9 features, 2 testing samples x 9 features
Train: samples 1,2,3,4; Test: samples 5,6
5Model Training
4 training samples x 9 featuresTrain a logistic regression classifierTrained model
Model learns to classify positive vs negative sentiment
Training Trace - Epoch by Epoch
Loss
0.7 | *       
0.6 |  *      
0.5 |   *     
0.4 |    *    
0.3 |     * *  
    +---------
     1 2 3 4  Epoch
EpochLoss ↓Accuracy ↑Observation
10.650.50Model starts with random guesses
20.480.75Model learns basic word patterns
30.350.85Model improves classification accuracy
40.300.90Model converges with good accuracy
Prediction Trace - 5 Layers
Layer 1: Input Text
Layer 2: CountVectorizer
Layer 3: TF-IDF Transformer
Layer 4: Model Prediction
Layer 5: Final Decision
Model Quiz - 3 Questions
Test your understanding
What does CountVectorizer do to the text data?
AConverts text into TF-IDF scores
BTurns text into counts of each word
CRemoves stop words from text
DSplits text into sentences
Key Insight
Converting text into numbers using CountVectorizer and TF-IDF allows machine learning models to understand and classify text data effectively by focusing on important words and their relevance.

Practice

(1/5)
1. What does CountVectorizer do in text processing?
easy
A. Calculates the importance of words based on frequency and rarity
B. Counts how many times each word appears in the text
C. Removes stop words from the text
D. Converts text into lowercase only

Solution

  1. Step 1: Understand CountVectorizer's role

    CountVectorizer transforms text into a matrix of token counts, counting word occurrences.
  2. Step 2: Differentiate from TF-IDF

    Unlike TF-IDF, it does not weigh words by importance, only counts frequency.
  3. Final Answer:

    Counts how many times each word appears in the text -> Option B
  4. Quick Check:

    CountVectorizer = word counts [OK]
Hint: CountVectorizer counts words, TF-IDF scores importance [OK]
Common Mistakes:
  • Confusing CountVectorizer with TF-IDF
  • Thinking it removes stop words by default
  • Assuming it normalizes text only
2. Which of the following is the correct way to import and create a CountVectorizer in Python?
easy
A. from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer()
B. import CountVectorizer from sklearn.text vectorizer = CountVectorizer()
C. from sklearn.text import CountVectorizer vectorizer = CountVectorizer()
D. import CountVectorizer vectorizer = CountVectorizer()

Solution

  1. Step 1: Recall correct sklearn import path

    CountVectorizer is in sklearn.feature_extraction.text module.
  2. Step 2: Check syntax correctness

    from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() uses correct import and instantiation syntax.
  3. Final Answer:

    from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() -> Option A
  4. Quick Check:

    Correct import path and syntax [OK]
Hint: CountVectorizer is in sklearn.feature_extraction.text [OK]
Common Mistakes:
  • Using wrong module path for import
  • Incorrect import syntax (like import ... from ...)
  • Forgetting to instantiate the class
3. What will be the output shape of the matrix after applying CountVectorizer on these two sentences?
sentences = ["I love cats", "Cats love me"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(sentences)
print(X.shape)
medium
A. (2, 4)
B. (2, 3)
C. (3, 2)
D. (4, 2)

Solution

  1. Step 1: Count unique words in sentences

    Words are: 'i', 'love', 'cats', 'me' -> 4 unique words.
  2. Step 2: Understand shape of output matrix

    There are 2 sentences (rows) and 4 unique words (columns), so shape is (2, 4).
  3. Final Answer:

    (2, 4) -> Option A
  4. Quick Check:

    Rows = sentences, columns = unique words [OK]
Hint: Shape = (number of texts, unique words) [OK]
Common Mistakes:
  • Mixing rows and columns in shape
  • Counting duplicate words multiple times
  • Ignoring case sensitivity (CountVectorizer lowercases by default)
4. Identify the error in this TF-IDF code snippet:
from sklearn.feature_extraction.text import TfidfVectorizer
texts = ["apple banana apple", "banana fruit"]
tfidf = TfidfVectorizer()
X = tfidf.fit_transform(texts)
print(tfidf.get_feature_names())
medium
A. fit_transform() should be called on texts as a string, not list
B. TfidfVectorizer() requires stop_words parameter
C. get_feature_names() is deprecated, should use get_feature_names_out()
D. Import statement is incorrect

Solution

  1. Step 1: Check method usage for feature names

    In recent sklearn versions, get_feature_names() is deprecated.
  2. Step 2: Use updated method

    Use get_feature_names_out() instead to get feature names without error.
  3. Final Answer:

    get_feature_names() is deprecated, should use get_feature_names_out() -> Option C
  4. Quick Check:

    Use get_feature_names_out() for TF-IDF features [OK]
Hint: Use get_feature_names_out() with TF-IDF [OK]
Common Mistakes:
  • Using deprecated get_feature_names() method
  • Passing wrong data type to fit_transform
  • Incorrect import paths
5. You want to transform text data so that common words like 'the' and 'is' have less impact, but rare important words have higher scores. Which method should you use?
hard
A. One-hot encoding of words
B. CountVectorizer without stop words
C. Raw word counts from CountVectorizer
D. TF-IDF Vectorizer

Solution

  1. Step 1: Understand the goal of reducing common word impact

    Common words appear frequently but carry less meaning, so their impact should be lowered.
  2. Step 2: Identify method that weighs words by importance

    TF-IDF scores words higher if they are rare and important, reducing common word impact.
  3. Final Answer:

    TF-IDF Vectorizer -> Option D
  4. Quick Check:

    TF-IDF = importance weighting [OK]
Hint: Use TF-IDF to weigh rare words higher [OK]
Common Mistakes:
  • Using raw counts which treat all words equally
  • Assuming stop words removal alone solves importance
  • Confusing one-hot encoding with frequency weighting