什么是人工智能中的特征?
在人工智能中,特征(feature)是指從原始數據中提取出的、能夠代表數據關鍵信息并用于模型訓練的屬性或變量。特征通常是對原始數據的抽象或轉換,目的是捕捉數據中的模式、結構或相關性,從而幫助機器學習模型更有效地學習和預測。簡單來說,特征是原始數據經過提煉后的結果,能夠突出對任務有用的信息,同時去除冗余或無關的部分。
特征與原始數據的區別
- 原始數據:是指直接從數據源獲取的未經處理的數據,例如圖像的像素值、音頻的波形、文本的原始字符等。原始數據往往包含大量冗余或噪聲,直接使用可能導致模型訓練效率低下或性能不佳。
- 特征:是從原始數據中經過處理、提取或轉換后得到的更具代表性的數據。特征通常是原始數據的子集或高級表示,能夠更直接地反映數據的關鍵屬性,幫助模型更好地理解和學習。
區別總結:特征是對原始數據的“精煉”,旨在減少數據維度、去除噪聲并增強模型的泛化能力,而原始數據則是未經加工的“原材料”。
舉例說明
以下是五個不同領域的例子,具體展示特征與原始數據的區別:
1. 圖像識別
- 原始數據:一張圖像的像素值矩陣,例如RGB值(紅、綠、藍三通道的數值)。
- 特征:圖像中的邊緣、紋理、形狀或顏色直方圖等。這些特征可以通過邊緣檢測(如Sobel算子)或角點檢測算法提取,突出圖像的關鍵視覺信息,幫助模型識別物體。
- 區別:像素值是圖像的完整描述,可能包含背景噪聲,而特征聚焦于物體的輪廓或結構,更適合識別任務。
2. 文本分類
- 原始數據:一篇文檔的完整文本內容,例如一篇文章的全部字符。
- 特征:文檔中的詞頻、TF-IDF(詞頻-逆文檔頻率)值、詞向量(如Word2Vec或BERT生成的嵌入)。這些特征捕捉文本的語義和關鍵詞信息。
- 區別:原始文本可能是冗長的字符串,包含無意義的停用詞,而特征提取后只保留對分類有意義的語義信息。
3. 語音識別
- 原始數據:音頻文件的波形信號,即時間序列中的振幅數據。
- 特征:梅爾頻率倒譜系數(MFCC)、頻譜圖或聲學特征等。這些特征反映音頻的音調、音色等聲學特性。
- 區別:波形信號是連續的原始音頻數據,信息量大但冗余,特征則提煉出與語音內容相關的關鍵屬性。
4. 推薦系統
- 原始數據:用戶的行為數據,例如點擊記錄、購買歷史或瀏覽時間。
- 特征:用戶的偏好向量、物品的屬性向量(如類別、價格)或用戶-物品交互矩陣。這些特征總結了用戶的興趣和物品特性。
- 區別:原始行為數據可能是零散的事件記錄,而特征是基于這些事件計算出的結構化表示,便于預測用戶喜好。
5. 金融風控
- 原始數據:用戶的交易記錄、信用歷史或個人信息,例如每次交易的金額和時間。
- 特征:用戶的信用評分、交易頻率、平均交易金額或還款行為模式等。這些特征捕捉用戶的信用風險特征。
- 區別:原始數據是詳細的歷史記錄,可能包含無關細節,而特征是風險評估的關鍵指標。
總結
特征是從原始數據中提取的、能夠代表數據關鍵信息的抽象表示。與原始數據相比,特征更簡潔、更有針對性,能夠提高模型的訓練效率和預測準確性。在人工智能中,特征工程(feature engineering)是至關重要的一步,良好的特征設計往往直接決定模型的性能。通過上述五個例子,可以看出特征是如何從原始數據中“提煉”出來,并在不同場景中助力模型完成任務的。
具體案例
以下是幾個個詳細的例子,展示了如何從原始數據中抽取特征,并利用這些特征建立機器學習模型來解決問題。每個例子都包括原始數據、特征提取、建模過程的詳細說明,并附有相應的 Python 代碼。
示例 1:信用卡欺詐檢測
問題
利用信用卡交易數據,檢測欺詐交易(這是一個二分類問題:欺詐或正常)。
原始數據
假設我們有一個結構化數據集,存儲在表格中,包含以下列:
Transaction ID
(交易ID):唯一標識每筆交易User ID
(用戶ID):標識交易所屬的用戶Transaction Amount
(交易金額):每筆交易的金額(數值)Transaction Time
(交易時間):交易發生的時間(日期時間格式)Merchant Category
(商家類別):交易涉及的商家類型(分類變量,如“餐飲”、“零售”)Is Fraud
(是否欺詐):目標變量,1 表示欺詐,0 表示正常
特征抽取
從原始數據中,我們可以抽取或生成以下特征,用于建模:
Transaction Amount
:直接使用交易金額作為特征。Hour
:從Transaction Time
中提取交易發生的小時,可能與欺詐模式相關(如深夜交易)。Day
:從Transaction Time
中提取星期幾,可能反映周末或工作日的交易行為。Merchant Category
:將商家類別編碼為數值型特征(如使用標簽編碼)。
這些特征能夠幫助模型捕捉交易的時間模式和商家類型對欺詐的影響。
建模過程
-
數據預處理:
- 將
Transaction Time
轉換為 datetime 格式。 - 從中提取
Hour
(小時)和Day
(星期幾)。 - 對
Merchant Category
進行標簽編碼(Label Encoding),將其轉換為數值。
- 將
-
特征和目標變量:
- 特征:
Transaction Amount
、Hour
、Day
、Merchant Category
- 目標變量:
Is Fraud
- 特征:
-
數據拆分:
- 將數據集分為訓練集(80%)和測試集(20%),以便評估模型性能。
-
模型選擇:
- 使用隨機森林分類器(Random Forest Classifier),因為它對分類問題具有魯棒性,且能夠處理多種特征類型。
-
模型訓練:
- 在訓練集上擬合隨機森林模型。
-
模型評估:
- 在測試集上進行預測,使用準確率、精確率、召回率和 F1 分數評估模型性能。
Python 代碼
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report
from sklearn.preprocessing import LabelEncoder# 加載數據
data = pd.read_csv('credit_card_transactions.csv')# 預處理 Transaction Time
data['Transaction Time'] = pd.to_datetime(data['Transaction Time'])
data['Hour'] = data['Transaction Time'].dt.hour
data['Day'] = data['Transaction Time'].dt.dayofweek# 對 Merchant Category 進行標簽編碼
le = LabelEncoder()
data['Merchant Category'] = le.fit_transform(data['Merchant Category'])# 定義特征和目標變量
X = data[['Transaction Amount', 'Hour', 'Day', 'Merchant Category']]
y = data['Is Fraud']# 拆分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化并訓練隨機森林模型
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# 預測并評估模型
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
代碼說明
- 數據加載:假設數據存儲在
credit_card_transactions.csv
文件中。 - 特征提取:從
Transaction Time
中提取小時和星期幾;對Merchant Category
使用LabelEncoder
轉換為數值。 - 模型訓練:使用 100 棵樹的隨機森林分類器。
- 評估:
classification_report
輸出模型的性能指標。
示例 2:疾病預測
問題
利用患者記錄數據,預測患者是否患有某種疾病(這是一個二分類問題:患病或未患病)。
原始數據
假設我們有一個結構化數據集,存儲在表格中,包含以下列:
Patient ID
(患者ID):唯一標識每個患者Age
(年齡):患者的年齡(數值)Gender
(性別):患者的性別(分類變量,如“Male”或“Female”)Symptoms
(癥狀):患者報告的癥狀,逗號分隔的字符串(如“fever, cough”)Medical History
(病史):患者的醫療歷史,逗號分隔的字符串(如“diabetes, hypertension”)Blood Pressure
(血壓):患者的血壓值(數值)Cholesterol Level
(膽固醇水平):患者的膽固醇水平(數值)Has Disease
(是否患病):目標變量,1 表示患病,0 表示未患病
特征抽取
從原始數據中,我們可以抽取或生成以下特征:
Age
:直接使用年齡作為特征。Gender
:將性別編碼為數值(Male: 0, Female: 1)。Has_Fever
、Has_Cough
等:從Symptoms
中提取二進制特征(1 表示有該癥狀,0 表示無)。Has_Diabetes
、Has_Hypertension
等:從Medical History
中提取二進制特征。Blood Pressure
:直接使用血壓值。Cholesterol Level
:直接使用膽固醇水平。
這些特征能夠反映患者的健康狀況和疾病風險。
建模過程
-
數據預處理:
- 將
Gender
編碼為數值。 - 將
Symptoms
和Medical History
拆分為二進制特征。 - 對數值特征(如
Age
、Blood Pressure
、Cholesterol Level
)進行標準化,以統一量綱。
- 將
-
特征和目標變量:
- 特征:
Age
、Gender
、Has_Fever
、Has_Cough
、…、Has_Diabetes
、…、Blood Pressure
、Cholesterol Level
- 目標變量:
Has Disease
- 特征:
-
數據拆分:
- 將數據集分為訓練集(80%)和測試集(20%)。
-
模型選擇:
- 使用邏輯回歸(Logistic Regression),因為它簡單、易于解釋且適用于二分類問題。
-
模型訓練:
- 在訓練集上擬合邏輯回歸模型。
-
模型評估:
- 在測試集上進行預測,使用準確率、精確率、召回率和 F1 分數評估模型性能。
Python 代碼
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
from sklearn.preprocessing import StandardScaler# 加載數據
data = pd.read_csv('patient_records.csv')# 編碼 Gender
data['Gender'] = data['Gender'].map({'Male': 0, 'Female': 1})# 從 Symptoms 和 Medical History 中創建二進制特征
symptoms_list = ['fever', 'cough', 'fatigue'] # 示例癥狀列表
for symptom in symptoms_list:data[f'Has_{symptom}'] = data['Symptoms'].apply(lambda x: 1 if symptom in x.split(', ') else 0)history_list = ['diabetes', 'hypertension'] # 示例病史列表
for condition in history_list:data[f'Has_{condition}'] = data['Medical History'].apply(lambda x: 1 if condition in x.split(', ') else 0)# 刪除原始的 Symptoms 和 Medical History 列
data.drop(['Symptoms', 'Medical History'], axis=1, inplace=True)# 標準化數值特征
scaler = StandardScaler()
data[['Age', 'Blood Pressure', 'Cholesterol Level']] = scaler.fit_transform(data[['Age', 'Blood Pressure', 'Cholesterol Level']]
)# 定義特征和目標變量
X = data.drop(['Patient ID', 'Has Disease'], axis=1)
y = data['Has Disease']# 拆分數據集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 初始化并訓練邏輯回歸模型
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)# 預測并評估模型
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
代碼說明
- 數據加載:假設數據存儲在
patient_records.csv
文件中。 - 特征提取:將癥狀和病史拆分為二進制特征;對數值特征使用
StandardScaler
標準化。 - 模型訓練:使用邏輯回歸分類器。
- 評估:
classification_report
輸出模型性能指標。
總結
以上兩個例子展示了從結構化數據到機器學習模型的完整流程:
- 理解問題:明確問題的類型(如分類問題)。
- 探索數據:分析原始結構化數據中的列和含義。
- 特征抽取:從原始數據中提取或生成對建模有意義的特征。
- 數據預處理:處理分類變量、標準化數值特征等。
- 數據拆分:將數據分為訓練集和測試集。
- 模型選擇:根據問題選擇合適的算法。
- 模型訓練:在訓練集上擬合模型。
- 模型評估:使用測試集評估模型性能。
通過這些步驟,可以使用 Python 的 pandas 和 scikit-learn 庫,從結構化數據中提取特征并建立模型解決實際問題。
以下是一個關于如何從圖像數據中提取特征并利用這些特征建立機器學習模型解決問題的詳細示例。我們將以手寫數字識別問題為例,這是一個經典的圖像分類任務。
示例:手寫數字識別
問題描述
目標是從手寫數字的圖像中識別出對應的數字(0-9)。這是一個多分類問題,類別為 0 到 9。
原始數據
我們使用 MNIST 數據集,這是一個廣泛用于手寫數字識別的基準數據集。MNIST 數據集的特點如下:
- 圖像數量:
- 訓練集:60,000 張圖像。
- 測試集:10,000 張圖像。
- 圖像格式:
- 每張圖像是一個 28x28 像素的灰度圖像。
- 每個像素的取值范圍為 0 到 255,其中 0 表示黑色,255 表示白色。
- 標簽:
- 每個圖像對應一個數字標簽(0-9)。
因此,原始數據是 28x28 的矩陣,每個元素是一個像素的灰度值。
特征提取
從圖像數據中提取特征的方式有很多,這里我們選擇一種簡單但有效的方法:將圖像展平為向量。
- 過程:
- 將 28x28 的二維矩陣轉換為一個 784 維(28 × 28 = 784)的向量。
- 向量中的每個元素對應一個像素的灰度值。
- 優點:
- 簡單直接,保留了圖像的所有像素信息。
- 缺點:
- 維度較高,丟失了像素之間的空間關系。
在本次示例中,我們將使用這些展平后的像素值作為特征輸入到機器學習模型中。
建模過程
1. 數據加載
使用 Python 的 TensorFlow 庫加載 MNIST 數據集。
2. 數據預處理
- 歸一化:將像素值從 [0, 255] 縮放到 [0, 1],以提高模型訓練效率。
- 展平:將 28x28 的圖像矩陣轉換為 784 維向量。
3. 數據拆分
MNIST 數據集已預先分為訓練集和測試集,我們直接使用:
- 訓練集:60,000 張圖像。
- 測試集:10,000 張圖像。
4. 模型選擇
選擇 支持向量機(SVM) 作為分類器。SVM 在高維數據(如圖像特征)上表現良好,適合這個任務。我們將使用線性核的 SVM 以簡化計算。
5. 模型訓練
用訓練數據擬合 SVM 模型。
6. 模型評估
在測試集上進行預測,并計算分類準確率。
Python 代碼
以下是完整的實現代碼:
# 導入必要的庫
import tensorflow as tf
from sklearn import svm
from sklearn.metrics import accuracy_score# 1. 加載 MNIST 數據集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 2. 數據預處理
# 歸一化:將像素值縮放到 [0, 1]
x_train = x_train / 255.0
x_test = x_test / 255.0# 展平:將 28x28 的圖像轉換為 784 維向量
x_train = x_train.reshape(-1, 28 * 28)
x_test = x_test.reshape(-1, 28 * 28)# 3. 初始化并訓練 SVM 模型(使用線性核)
clf = svm.SVC(kernel='linear')
clf.fit(x_train, y_train)# 4. 在測試集上預測
y_pred = clf.predict(x_test)# 5. 計算準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型準確率: {accuracy:.4f}")
代碼說明
-
導入庫:
tensorflow
:用于加載 MNIST 數據集。sklearn.svm
:提供 SVM 分類器。sklearn.metrics
:用于計算準確率。
-
加載數據:
mnist.load_data()
返回訓練集和測試集,分別包含圖像數據和標簽。
-
預處理:
x_train / 255.0
:將像素值歸一化到 [0, 1]。reshape(-1, 28 * 28)
:將圖像從 28x28 轉換為 784 維向量,-1
表示自動推斷樣本數量。
-
訓練模型:
svm.SVC(kernel='linear')
:創建一個線性核的 SVM 分類器。clf.fit(x_train, y_train)
:用訓練數據擬合模型。
-
評估模型:
clf.predict(x_test)
:對測試集進行預測。accuracy_score(y_test, y_pred)
:計算預測結果的準確率。
結果
- 預期準確率:使用線性 SVM 和展平的像素特征,模型在 MNIST 測試集上的準確率通常在 90% 至 95% 之間。
- 運行時間:由于 SVM 在高維數據上的計算復雜度較高,訓練可能需要幾分鐘,具體取決于硬件性能。
改進建議
為了進一步提升性能,可以嘗試以下方法:
- 高級特征提取:
- 使用 HOG(方向梯度直方圖) 或 SIFT 提取更具代表性的特征。
- 深度學習:
- 使用 卷積神經網絡(CNN),它能捕捉圖像的空間結構,通常可以將準確率提升到 99% 以上。
- SVM 優化:
- 嘗試非線性核(如 RBF 核),可能會提高準確率,但計算成本更高。
總結
在這個示例中,我們展示了從圖像數據中提取特征并建立模型的完整過程:
- 原始數據:MNIST 數據集中的 28x28 灰度圖像。
- 特征提取:將圖像展平為 784 維向量。
- 模型:使用 SVM 分類器進行數字識別。
- 結果:通過 Python 代碼實現了數據處理、模型訓練和評估。
這個方法簡單有效,適合理解圖像數據處理和機器學習的基本流程。如果需要更高的準確率,可以進一步探索復雜的特征提取技術或深度學習方法。
以下是一個關于文本數據處理和機器學習建模的詳細示例。我們將以垃圾郵件分類任務為例,說明如何從文本數據中提取特征并建立模型來解決問題。這個任務的目標是從電子郵件或短信的文本內容中識別出垃圾郵件(spam)或正常郵件(ham),這是一個經典的二分類問題。我將詳細描述原始數據、特征提取過程、建模步驟,并提供完整的 Python 代碼實現。
示例:垃圾郵件分類
問題描述
目標是從短信的文本內容中識別出垃圾郵件(spam)或正常郵件(ham)。這是一個二分類問題,標簽為 0(ham)或 1(spam)。
原始數據
我們使用 SMS Spam Collection 數據集,這是一個公開的垃圾郵件數據集。假設數據的基本情況如下:
- 數據集來源:可以從 UCI Machine Learning Repository 下載。
- 數據量:
- 訓練集:約 4000 條短信。
- 測試集:約 1000 條短信。
- 數據格式:
- 每條數據包含兩部分:
- 文本:一條短信的字符串,例如 “Free entry in 2 a wkly comp to win FA Cup final tkts” 或 “Hello, how are you today?”。
- 標簽:0 表示正常郵件(ham),1 表示垃圾郵件(spam)。
- 每條數據包含兩部分:
- 示例數據:
- “Free entry in 2 a wkly comp to win FA Cup final tkts”,標簽:1(spam)
- “Hello, how are you today?”,標簽:0(ham)
在實際操作中,我們假設數據集存儲在一個 CSV 文件中,包含兩列:label
(標簽)和 message
(短信內容)。
特征提取
由于原始數據是文本,我們需要將其轉換為機器學習模型可以處理的數值特征。這里我們使用 TF-IDF(詞頻-逆文檔頻率,Term Frequency-Inverse Document Frequency) 方法來提取特征。TF-IDF 是一種常用的文本特征提取技術,能夠反映單詞在文檔中的重要性。
特征提取過程
- 文本預處理:
- 將文本轉換為小寫。
- 去除標點符號,只保留字母和空格。
- 分詞:將文本拆分為單詞。
- 去除停用詞:過濾掉無意義的常見詞(如 “the”、“is”)。
- 詞干提取:將單詞還原為詞干形式(如 “running” -> “run”)。
- TF-IDF 計算:
- 計算每個單詞的 TF-IDF 值,生成特征向量。
- 每個短信被表示為一個稀疏向量,向量中的每個維度對應一個單詞的 TF-IDF 分數。
特征示例
假設有兩條短信:
- 短信 1:“free entry win”,標簽:1
- 短信 2:“hello today”,標簽:0
經過預處理和 TF-IDF 轉換后,可能得到如下特征矩陣(簡化示例,假設詞匯表為 [“free”, “entry”, “win”, “hello”, “today”]):
短信 1: [0.5, 0.3, 0.4, 0.0, 0.0]
短信 2: [0.0, 0.0, 0.0, 0.6, 0.5]
其中每個值是對應單詞的 TF-IDF 分數。
優點與局限
- 優點:TF-IDF 能突出重要詞匯,降低常見詞的權重,生成的特征適合高維數據處理。
- 局限:忽略詞序和語義信息。
建模過程
1. 數據加載
使用 Python 的 pandas
庫加載數據集。
2. 數據預處理
對文本進行清洗、分詞、去除停用詞和詞干提取。
3. 特征提取
使用 TfidfVectorizer
將文本轉換為 TF-IDF 特征矩陣。
4. 數據拆分
將數據集分為訓練集(80%)和測試集(20%)。
5. 模型選擇
選擇 樸素貝葉斯(Naive Bayes) 分類器,因為它在文本分類任務中表現良好且計算效率高。
6. 模型訓練
用訓練數據擬合模型。
7. 模型評估
在測試集上進行預測,計算準確率、精確率、召回率等指標。
Python 代碼實現
以下是完整的代碼實現:
# 導入必要的庫
import pandas as pd
import nltk
from nltk.corpus import stopwords
from nltk.stem import PorterStemmer
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import classification_report# 1. 加載數據集
# 假設數據集文件名為 'sms_spam_collection.csv',包含 'label' 和 'message' 兩列
data = pd.read_csv('sms_spam_collection.csv', encoding='latin-1')
data = data[['label', 'message']]# 2. 數據預處理
nltk.download('stopwords') # 下載停用詞表
stop_words = set(stopwords.words('english')) # 加載英文停用詞
stemmer = PorterStemmer() # 初始化詞干提取器def preprocess_text(text):text = text.lower() # 轉換為小寫text = ''.join([c for c in text if c.isalnum() or c.isspace()]) # 去除標點words = text.split() # 分詞words = [word for word in words if word not in stop_words] # 去除停用詞words = [stemmer.stem(word) for word in words] # 詞干提取return ' '.join(words)# 應用預處理
data['message'] = data['message'].apply(preprocess_text)# 3. 特征提取 - TF-IDF
vectorizer = TfidfVectorizer(max_features=3000) # 限制最大特征數為 3000
X = vectorizer.fit_transform(data['message']).toarray() # 轉換為 TF-IDF 矩陣
y = data['label'].map({'ham': 0, 'spam': 1}) # 將標簽轉換為 0 和 1# 4. 數據拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 5. 訓練樸素貝葉斯模型
model = MultinomialNB()
model.fit(X_train, y_train)# 6. 在測試集上預測
y_pred = model.predict(X_test)# 7. 評估模型
print("分類報告:")
print(classification_report(y_test, y_pred))
代碼說明
-
導入庫:
pandas
:用于數據加載和處理。nltk
:用于文本預處理(停用詞和詞干提取)。sklearn
:提供特征提取、數據拆分、模型訓練和評估工具。
-
數據加載:
- 從 CSV 文件加載數據,假設包含
label
和message
兩列。
- 從 CSV 文件加載數據,假設包含
-
數據預處理:
preprocess_text
函數完成文本清洗、分詞、去除停用詞和詞干提取。- 使用
apply
方法對所有短信應用預處理。
-
特征提取:
TfidfVectorizer
將文本轉換為 TF-IDF 特征矩陣,限制最大特征數為 3000。toarray()
將稀疏矩陣轉換為密集矩陣。
-
數據拆分:
- 使用
train_test_split
將數據分為 80% 訓練集和 20% 測試集。
- 使用
-
模型訓練:
- 使用
MultinomialNB
訓練樸素貝葉斯模型。
- 使用
-
模型評估:
- 使用
classification_report
輸出準確率、精確率、召回率和 F1 分數。
- 使用
預期結果
- 準確率:在 SMS Spam Collection 數據集上,使用 TF-IDF 特征和樸素貝葉斯分類器,通常能達到 95% 以上 的準確率。
- 輸出示例(假設結果):
分類報告:precision recall f1-score support0 0.98 1.00 0.99 9651 0.95 0.85 0.90 150accuracy 0.97 1115macro avg 0.96 0.92 0.94 1115
weighted avg 0.97 0.97 0.97 1115
總結
在這個示例中,我們展示了如何從文本數據中提取特征并建立模型解決垃圾郵件分類問題:
- 原始數據:SMS Spam Collection 數據集中的短信文本和標簽。
- 特征提取:使用 TF-IDF 將文本轉換為數值特征向量。
- 建模過程:通過數據預處理、特征提取、模型訓練和評估,實現了完整的機器學習流程。
- 代碼實現:提供了可運行的 Python 代碼,涵蓋所有步驟。
這個方法簡單高效,適合文本分類的入門學習。如果需要進一步提升性能,可以嘗試詞嵌入(如 Word2Vec)或深度學習模型(如 LSTM)。