Bag of Words and TF-IDF help computers understand text by turning words into numbers. This makes it easier to find patterns in text.
Bag of Words and TF-IDF in ML Python
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer # Bag of Words vectorizer = CountVectorizer() X_train_counts = vectorizer.fit_transform(documents) # TF-IDF vectorizer = TfidfVectorizer() X_train_tfidf = vectorizer.fit_transform(documents)
CountVectorizer creates a matrix counting how many times each word appears.
TfidfVectorizer creates a matrix that weighs words by how important they are in a document compared to all documents.
from sklearn.feature_extraction.text import CountVectorizer docs = ['I love apples', 'You love oranges'] vectorizer = CountVectorizer() X = vectorizer.fit_transform(docs) print(vectorizer.get_feature_names_out()) print(X.toarray())
from sklearn.feature_extraction.text import TfidfVectorizer docs = ['I love apples', 'You love oranges'] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(docs) print(vectorizer.get_feature_names_out()) print(X.toarray())
This program shows how to convert text documents into numbers using Bag of Words and TF-IDF. It prints the words found and the matrices representing the documents.
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer # Sample documents documents = [ 'I love machine learning', 'Machine learning is fun', 'I love coding in Python', 'Python coding is great' ] # Bag of Words count_vectorizer = CountVectorizer() X_counts = count_vectorizer.fit_transform(documents) print('Bag of Words feature names:', count_vectorizer.get_feature_names_out()) print('Bag of Words matrix:\n', X_counts.toarray()) # TF-IDF tfidf_vectorizer = TfidfVectorizer() X_tfidf = tfidf_vectorizer.fit_transform(documents) print('\nTF-IDF feature names:', tfidf_vectorizer.get_feature_names_out()) print('TF-IDF matrix:\n', X_tfidf.toarray())
Bag of Words counts words but ignores word order and meaning.
TF-IDF helps reduce the importance of common words like 'is' or 'the'.
Both methods turn text into numbers so machine learning models can use them.
Bag of Words counts how often words appear in text.
TF-IDF weighs words by how unique they are across documents.
Both help computers understand and work with text data.
Practice
Solution
Step 1: Understand Bag of Words concept
Bag of Words counts how many times each word appears, ignoring order.Step 2: Identify what is counted
It counts word frequency, not order, sentiment, or length.Final Answer:
The frequency of each word appearing in the document -> Option BQuick Check:
Bag of Words = word counts [OK]
- Thinking Bag of Words considers word order
- Confusing frequency with sentiment
- Assuming it measures document length
Solution
Step 1: Import and initialize CountVectorizer
Correct import is from sklearn.feature_extraction.text import CountVectorizer and then create an instance.Step 2: Fit and transform documents
Use fit_transform to learn vocabulary and create the matrix in one step.Final Answer:
from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() matrix = vectorizer.fit_transform(documents) -> Option DQuick Check:
CountVectorizer + fit_transform = Bag of Words matrix [OK]
- Using transform without fit first
- Importing TfidfVectorizer instead of CountVectorizer
- Calling fit without transform or fit_transform
from sklearn.feature_extraction.text import TfidfVectorizer docs = ['cat dog', 'dog mouse', 'cat mouse mouse'] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(docs) print(X.shape)
Solution
Step 1: Count unique words across all documents
The words are 'cat', 'dog', 'mouse'. 'mouse' appears twice but counts once. So unique words = 3.Step 2: Check if TfidfVectorizer adds extra tokens
TfidfVectorizer by default tokenizes and counts unique words. Here, it finds 3 unique words: 'cat', 'dog', 'mouse'. So matrix shape is (number of docs, number of unique words) = (3,3).Step 3: Verify options
(3, 3) is (3,3), matching our count. But (3, 4) is (3,4), which suggests 4 unique words. Let's check if any extra token is created.Step 4: Check for default token pattern
By default, TfidfVectorizer splits on word boundaries, so no extra tokens. So shape is (3,3).Final Answer:
(3, 3) -> Option CQuick Check:
Docs=3, unique words=3, shape=(3,3) [OK]
- Counting repeated words multiple times
- Confusing rows and columns in shape
- Assuming extra tokens are added automatically
from sklearn.feature_extraction.text import TfidfVectorizer vectorizer = TfidfVectorizer() docs = ['apple orange', 'banana apple'] X = vectorizer.transform(docs) print(X.toarray())
Solution
Step 1: Understand TfidfVectorizer usage
Before calling transform, vectorizer must learn vocabulary using fit or fit_transform.Step 2: Identify error cause
Code calls transform directly without fitting, so vocabulary is unknown, causing error.Final Answer:
fit_transform should be used before transform to learn vocabulary -> Option AQuick Check:
fit_transform first, then transform [OK]
- Calling transform without fit
- Assuming toarray() is invalid (it is valid)
- Thinking TfidfVectorizer can't handle multiple docs
doc1 = 'apple apple orange' and doc2 = 'apple banana banana'. Using TF-IDF, which word will have the highest weight in doc2 and why?Solution
Step 1: Understand TF-IDF weighting
TF-IDF gives higher weight to words frequent in one document but rare across all documents.Step 2: Analyze word frequencies
'banana' appears twice in doc2 but not in doc1, so it is rare overall but frequent in doc2.Step 3: Compare with other words
'apple' appears in both docs, so its IDF is lower. 'orange' is not in doc2, so no weight there.Final Answer:
'banana', because it appears frequently in doc2 but less in doc1 -> Option AQuick Check:
TF-IDF favors unique frequent words [OK]
- Choosing common words across docs as highest weight
- Confusing frequency with uniqueness
- Ignoring that words not in doc have zero weight
Ready to prove it?
Pass the test and this pattern moves unknown
