人工智能中的特征是什么?

什么是人工智能中的特征?

在人工智能中,特征(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:將商家類別編碼為數值型特征(如使用標簽編碼)。

這些特征能夠幫助模型捕捉交易的時間模式和商家類型對欺詐的影響。

建模過程

  1. 數據預處理

    • Transaction Time 轉換為 datetime 格式。
    • 從中提取 Hour(小時)和 Day(星期幾)。
    • Merchant Category 進行標簽編碼(Label Encoding),將其轉換為數值。
  2. 特征和目標變量

    • 特征:Transaction AmountHourDayMerchant Category
    • 目標變量:Is Fraud
  3. 數據拆分

    • 將數據集分為訓練集(80%)和測試集(20%),以便評估模型性能。
  4. 模型選擇

    • 使用隨機森林分類器(Random Forest Classifier),因為它對分類問題具有魯棒性,且能夠處理多種特征類型。
  5. 模型訓練

    • 在訓練集上擬合隨機森林模型。
  6. 模型評估

    • 在測試集上進行預測,使用準確率、精確率、召回率和 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_FeverHas_Cough 等:從 Symptoms 中提取二進制特征(1 表示有該癥狀,0 表示無)。
  • Has_DiabetesHas_Hypertension 等:從 Medical History 中提取二進制特征。
  • Blood Pressure:直接使用血壓值。
  • Cholesterol Level:直接使用膽固醇水平。

這些特征能夠反映患者的健康狀況和疾病風險。

建模過程

  1. 數據預處理

    • Gender 編碼為數值。
    • SymptomsMedical History 拆分為二進制特征。
    • 對數值特征(如 AgeBlood PressureCholesterol Level)進行標準化,以統一量綱。
  2. 特征和目標變量

    • 特征:AgeGenderHas_FeverHas_Cough、…、Has_Diabetes、…、Blood PressureCholesterol Level
    • 目標變量:Has Disease
  3. 數據拆分

    • 將數據集分為訓練集(80%)和測試集(20%)。
  4. 模型選擇

    • 使用邏輯回歸(Logistic Regression),因為它簡單、易于解釋且適用于二分類問題。
  5. 模型訓練

    • 在訓練集上擬合邏輯回歸模型。
  6. 模型評估

    • 在測試集上進行預測,使用準確率、精確率、召回率和 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 輸出模型性能指標。

總結

以上兩個例子展示了從結構化數據到機器學習模型的完整流程:

  1. 理解問題:明確問題的類型(如分類問題)。
  2. 探索數據:分析原始結構化數據中的列和含義。
  3. 特征抽取:從原始數據中提取或生成對建模有意義的特征。
  4. 數據預處理:處理分類變量、標準化數值特征等。
  5. 數據拆分:將數據分為訓練集和測試集。
  6. 模型選擇:根據問題選擇合適的算法。
  7. 模型訓練:在訓練集上擬合模型。
  8. 模型評估:使用測試集評估模型性能。

通過這些步驟,可以使用 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}")

代碼說明

  1. 導入庫

    • tensorflow:用于加載 MNIST 數據集。
    • sklearn.svm:提供 SVM 分類器。
    • sklearn.metrics:用于計算準確率。
  2. 加載數據

    • mnist.load_data() 返回訓練集和測試集,分別包含圖像數據和標簽。
  3. 預處理

    • x_train / 255.0:將像素值歸一化到 [0, 1]。
    • reshape(-1, 28 * 28):將圖像從 28x28 轉換為 784 維向量,-1 表示自動推斷樣本數量。
  4. 訓練模型

    • svm.SVC(kernel='linear'):創建一個線性核的 SVM 分類器。
    • clf.fit(x_train, y_train):用訓練數據擬合模型。
  5. 評估模型

    • clf.predict(x_test):對測試集進行預測。
    • accuracy_score(y_test, y_pred):計算預測結果的準確率。

結果

  • 預期準確率:使用線性 SVM 和展平的像素特征,模型在 MNIST 測試集上的準確率通常在 90% 至 95% 之間。
  • 運行時間:由于 SVM 在高維數據上的計算復雜度較高,訓練可能需要幾分鐘,具體取決于硬件性能。

改進建議

為了進一步提升性能,可以嘗試以下方法:

  1. 高級特征提取
    • 使用 HOG(方向梯度直方圖)SIFT 提取更具代表性的特征。
  2. 深度學習
    • 使用 卷積神經網絡(CNN),它能捕捉圖像的空間結構,通常可以將準確率提升到 99% 以上。
  3. 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 是一種常用的文本特征提取技術,能夠反映單詞在文檔中的重要性。

特征提取過程
  1. 文本預處理
    • 將文本轉換為小寫。
    • 去除標點符號,只保留字母和空格。
    • 分詞:將文本拆分為單詞。
    • 去除停用詞:過濾掉無意義的常見詞(如 “the”、“is”)。
    • 詞干提取:將單詞還原為詞干形式(如 “running” -> “run”)。
  2. 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))

代碼說明

  1. 導入庫

    • pandas:用于數據加載和處理。
    • nltk:用于文本預處理(停用詞和詞干提取)。
    • sklearn:提供特征提取、數據拆分、模型訓練和評估工具。
  2. 數據加載

    • 從 CSV 文件加載數據,假設包含 labelmessage 兩列。
  3. 數據預處理

    • preprocess_text 函數完成文本清洗、分詞、去除停用詞和詞干提取。
    • 使用 apply 方法對所有短信應用預處理。
  4. 特征提取

    • TfidfVectorizer 將文本轉換為 TF-IDF 特征矩陣,限制最大特征數為 3000。
    • toarray() 將稀疏矩陣轉換為密集矩陣。
  5. 數據拆分

    • 使用 train_test_split 將數據分為 80% 訓練集和 20% 測試集。
  6. 模型訓練

    • 使用 MultinomialNB 訓練樸素貝葉斯模型。
  7. 模型評估

    • 使用 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)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70723.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250226-代碼筆記05-class CVRP_Decoder

文章目錄 前言一、class CVRP_Decoder(nn.Module):__init__(self, **model_params)函數功能函數代碼 二、class CVRP_Decoder(nn.Module):set_kv(self, encoded_nodes)函數功能函數代碼 三、class CVRP_Decoder(nn.Module):set_q1(self, encoded_q1)函數功能函數代碼 四、class…

洛谷 P3628/SPOJ 15648 APIO2010 特別行動隊 Commando

題意 你有一支由 n n n 名預備役士兵組成的部隊,士兵從 1 1 1 到 n n n 編號,你要將他們拆分成若干特別行動隊調入戰場。出于默契的考慮,同一支特別行動隊中隊員的編號應該連續,即為形如 i , i 1 , ? , i k i, i 1, \cdo…

PCL源碼分析:曲面法向量采樣

文章目錄 一、簡介二、源碼分析三、實現效果參考資料一、簡介 曲面法向量點云采樣,整個過程如下所述: 1、空間劃分:使用遞歸方法將點云劃分為更小的區域, 每次劃分選擇一個維度(X、Y 或 Z),將點云分為兩部分,直到劃分區域內的點少于我們指定的數量,開始進行區域隨機采…

Go語言--語法基礎2--下載安裝

2、下載安裝 1、下載源碼包: go1.18.4.linux-amd64.tar.gz。 官方地址:https://golang.google.cn/dl/ 云盤地址:鏈接: https://pan.baidu.com/s/1N2jrRHaPibvmmNFep3VYag 提 取碼: zkc3 2、將下載的源碼包解壓…

lowagie(itext)老版本手繪PDF,包含頁碼、水印、圖片、復選框、復雜行列合并等。

入口類:exportPdf ? package xcsy.qms.webapi.service;import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.common.utils.StringUtils; import com.ibm.icu.text.RuleBasedNumberFormat; import com.lowa…

3-2 WPS JS宏 工作簿的打開與保存(模板批量另存為工作)學習筆記

************************************************************************************************************** 點擊進入 -我要自學網-國內領先的專業視頻教程學習網站 *******************************************************************************************…

Ubuntu20.04之VNC的安裝使用與常見問題

Ubuntu20.04之VNC的安裝與使用 安裝圖形桌面選擇安裝gnome桌面選擇安裝xface桌面 VNC-Server安裝配置開機自啟 VNC Clientroot用戶無法登入問題臨時方案永久方案 安裝圖形桌面 Ubuntu20.04主流的圖形桌面有gnome和xface兩種,兩種桌面的安裝方式我都會寫&#xff0c…

Day46 反轉字符串

I. 編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 s 的形式給出。 不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。 class Solution {public void reverseString(char[] s) {int i …

用FileZilla Server 1.9.4給Windows Server 2025搭建FTP服務端

FileZilla Server 是一款免費的開源 FTP 和 FTPS 服務器軟件,分為服務器版和客戶端版。服務器版原本只支持Windows操作系統,比如筆者曾長期使用過0.9.60版,那時候就只支持Windows操作系統。當時我們生產環境對FTP穩定性要求較高,比…

【愚公系列】《Python網絡爬蟲從入門到精通》033-DataFrame的數據排序

標題詳情作者簡介愚公搬代碼頭銜華為云特約編輯,華為云云享專家,華為開發者專家,華為產品云測專家,CSDN博客專家,CSDN商業化專家,阿里云專家博主,阿里云簽約作者,騰訊云優秀博主,騰訊云內容共創官,掘金優秀博主,亞馬遜技領云博主,51CTO博客專家等。近期榮譽2022年度…

營銷過程烏龜圖模版

營銷過程烏龜圖模版 輸入 公司現狀產品服務客戶問詢客戶期望電話、電腦系統品牌軟件硬件材料 售前 - 溝通 - 確定需求 - 滿足需求 - 售后 機料環 電話、電腦等設備軟件硬件、系統品牌等工具材料 人 責任人協助者生產者客戶 法 訂單由誰評審控制程序營銷過程控制程序顧客滿意度…

Kubernetes (K8S) 高效使用技巧與實踐指南

Kubernetes(K8S)作為容器編排領域的核心工具,其靈活性和復雜性并存。本文結合實戰經驗,從運維效率提升、生產環境避坑、核心功能應用等維度,總結高頻使用技巧與最佳實踐,分享如何快速掌握 K8S。 一、kubect…

Idea java項目結構介紹

一般來說,一個典型的 IntelliJ IDEA Java 項目具有特定的結構,以下是對其主要部分的介紹: 項目根目錄 項目的最頂層目錄,包含了整個項目的所有文件和文件夾,通常以項目名稱命名。在這個目錄下可以找到.idea文件夾、.g…

C++大整數類的設計與實現

1. 簡介 我們知道現代的計算機大多數都是64位的,因此能處理最大整數為 2 64 ? 1 2^{64}-1 264?1。那如果是超過了這個數怎么辦呢,那就需要我們自己手動模擬數的加減乘除了。 2. 思路 我們可以用一個數組來存儲大數,數組中的每一個位置表…

2024年第十五屆藍橋杯大賽軟件賽省賽Python大學A組真題解析

文章目錄 試題A: 拼正方形(本題總分:5 分)解析答案試題B: 召喚數學精靈(本題總分:5 分)解析答案試題C: 數字詩意解析答案試題A: 拼正方形(本題總分:5 分) 【問題描述】 小藍正在玩拼圖游戲,他有7385137888721 個2 2 的方塊和10470245 個1 1 的方塊,他需要從中挑出一些…

開源RAG主流框架有哪些?如何選型?

開源RAG主流框架有哪些?如何選型? 一、開源RAG框架全景圖 (一)核心框架類型對比 類型典型工具技術特征適用場景傳統RAGLangChain, Haystack線性流程(檢索→生成)通用問答、知識庫檢索增強型RAGRAGFlow, AutoRAG支持重排序、多路召回優化高精度問答、復雜文檔處理輕量級…

Java SE與Java EE

Java SE(Java 平臺標準版) Java SE 是 Java 平臺的核心,提供了 Java 語言的基礎功能。它包含了 Java 開發工具包(JDK),其中有 Java 編譯器(javac)、Java 虛擬機(JVM&…

【Java企業生態系統的演進】從單體J2EE到云原生微服務

Java企業生態系統的演進:從單體J2EE到云原生微服務 目錄標題 Java企業生態系統的演進:從單體J2EE到云原生微服務摘要1. 引言2. 整體框架演進:從原始Java到Spring Cloud2.1 原始Java階段(1995-1999)2.2 J2EE階段&#x…

kicad中R樹的使用

在 KiCad 中,使用 R樹(R-tree)進行空間索引和加速查詢通常不在用戶層面直接操作,而是作為工具的一部分用于優化電路板設計的性能,尤其在布局、碰撞檢測、設計規則檢查(DRC)以及元件搜索等方面。…

org.springframework.boot不存在的其中一個解決辦法

最近做項目的時候發現問題,改了幾次pom.xml文件之后突然發現項目中的注解全部爆紅。 可以嘗試點擊左上角的循環小圖標,同步所有maven項目。 建議順便檢查一下Project Structure中的SDK和Language Level是否對應,否則可能報類似:“…