使用 Python Scikit Learn 中的稀疏特徵對文字文件進行分類


在當今的數字時代,有效地對文字文件進行分類變得至關重要。一種方法是在 Python 的 Scikit-Learn 庫中使用稀疏特徵。稀疏特徵涉及將每個文件表示為一個高維向量,其中每個維度對應於語料庫中的一個唯一單詞。在本文中,我們將探討使用 Scikit-Learn 中的稀疏特徵進行文字分類的理論和實現。您將獲得資料預處理、特徵提取、模型選擇和評估方面的實踐技能。無論您是研究人員、資料科學家還是開發人員,本文都將提供關於使用 Python 進行文字分類的有價值的見解。

入門

稀疏特徵表示是執行文字分類的一種流行且有效的方法。透過將文字文件表示為數值向量的形式,其中每個維度對應於一個特定特徵,稀疏特徵表示能夠有效地分析大量文字資料。這種方法通常透過建立稀疏向量來實現,其中大多數維度為零,只有少數維度具有非零值。這種稀疏性降低了分類演算法的計算複雜度,並確保僅在分類過程中使用最相關的特徵。因此,稀疏特徵表示已成為自然語言處理領域中用於文字分類任務的廣泛採用的技術。

Scikit-Learn,一個 Python 庫,提供了強大的功能來使用稀疏特徵表示執行文字分類。該庫包含大量函式和工具,可以輕鬆高效地進行特徵提取、資料預處理和模型訓練。

Scikit-Learn,Python 中流行的機器學習庫,提供了兩種用於從文字資料中提取特徵的主要技術——CountVectorizer 和詞頻-逆文件頻率 (TF-IDF) 向量化器。CountVectorizer 處理文字資料以將其表示為詞袋格式,其中統計文件中每個單詞的頻率。生成的向量將文件表示為矩陣,其中每一行表示一個文件,每一列表示一個單詞。另一方面,TF-IDF 向量化器透過考慮單詞在文件中的頻率和在整個語料庫中的頻率來計算單詞在文件中的重要性。透過這種方式,該演算法為特定文件中唯一且有意義的單詞分配更高的權重,同時降低常用單詞的重要性。這兩種技術已廣泛用於文字分析,將非結構化文字資料轉換為結構化數值特徵,這些特徵可以用作機器學習演算法的輸入。

展示 Scikit-Learn 用於文字分類的一個很好的方法是考慮將新聞文章分類到各個主題(包括體育、政治和娛樂)的示例。為此,我們可以使用 20 個新聞組資料集,這是一個大約 20,000 個新聞組文件的大型集合,分為 20 個不同的新聞組。此資料集可用於使用 Scikit-Learn 構建機器學習模型,以將文字文件分類到各個類別。

首先,我們將載入資料集並透過刪除停用詞和詞幹提取來預處理資料。然後,我們將使用 CountVectorizer 或 TF-IDF 向量化器將文字文件轉換為特徵向量。

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from nltk.stem import PorterStemmer
from nltk.corpus import stopwords

# Load the 20 Newsgroups dataset
newsgroups = fetch_20newsgroups(subset='all')

# Preprocess the data by removing stop words and stemming
stop_words = set(stopwords.words('english'))
ps = PorterStemmer()
preprocessed_data = []
for text in newsgroups.data:
    words = [ps.stem(word) for word in text.split() if word not in stop_words]
    preprocessed_data.append(' '.join(words))

# Convert text documents into feature vectors
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(preprocessed_data)
y = newsgroups.target

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Train the classifier
clf = MultinomialNB()
clf.fit(X_train, y_train)

# Predict the class labels for the test set
y_pred = clf.predict(X_test)

# Compute the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

在此示例中,我們使用多項式樸素貝葉斯作為分類演算法。多項式樸素貝葉斯是一種快速有效的演算法,適用於具有高維特徵向量的文字分類任務。

輸出

此程式碼的輸出將是多項式樸素貝葉斯分類器在 20 個新聞組資料集上進行文字分類任務的準確率。程式碼首先使用 Scikit-Learn 中的 fetch_20newsgroups 函式載入資料集,該函式下載並返回資料集作為字典,其中包含文字資料和目標標籤。

接下來,程式碼透過使用 NLTK 庫中的 PorterStemmer 刪除停用詞和詞幹提取剩餘單詞來預處理資料。此步驟有助於降低特徵空間的維度並消除資料中的噪聲。

然後,程式碼使用 Scikit-Learn 中的 CountVectorizer 將預處理的文字文件轉換為特徵向量,該向量建立文字資料的詞袋錶示。生成的特徵矩陣 X 和目標向量 y 然後使用 Scikit-Learn 中的 train_test_split 函式拆分為訓練集和測試集。

之後,程式碼使用 fit 方法在訓練資料上訓練多項式樸素貝葉斯分類器,並使用 predict 方法預測測試資料的類別標籤。最後,程式碼使用 Scikit-Learn 中的 accuracy_score 函式計算分類器在測試資料上的準確率。

程式碼的輸出應該是多項式樸素貝葉斯分類器在測試資料上的準確率的值,這表明分類器能夠很好地推廣到新的、未見過的資料。

結論

使用稀疏特徵進行文字分類是分析大量文字資料的一種有效方法。Python 的 Scikit-Learn 庫為實現此技術提供了一個高效且使用者友好的平臺,使開發人員能夠快速輕鬆地建立強大的文字分類模型。稀疏特徵表示(例如 TF-IDF 和 CountVectorizer)用於從文字文件中提取關鍵特徵,這些特徵能夠將文字資料準確地分類到相關類別中。Scikit-Learn 對樸素貝葉斯和支援向量機等流行機器學習演算法的實現使開發人員能夠輕鬆構建有效的分類模型。

總的來說,在文字分類中結合使用稀疏特徵和 Scikit-Learn 為尋求從大量文字資料中獲取見解的企業和研究人員提供了一個強大的工具。該技術的可擴充套件性、強大的演算法和易用性使其有可能成為自然語言處理領域的主流技術。

更新於: 2023年7月19日

161 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.