AI入門學習-Python 最主流的機器學習庫Scikit-learn

一、Scikit-learn 核心定位

是什么:Python 最主流的機器學習庫,涵蓋從數據預處理到模型評估的全流程。
為什么測試工程師必學

  • ? 80% 的測試機器學習問題可用它解決

  • ? 無需深厚數學基礎,API 設計極簡

  • ? 與 Pandas/Numpy 無縫集成,完美處理測試數據


二、Scikit-learn 核心模塊圖解


三、測試工程師必掌握的 6 大核心功能

1. 數據預處理:清洗混亂的測試數據

測試痛點:測試日志缺失值、環境配置數值差異大

python

from sklearn.impute import SimpleImputer
from sklearn.preprocessing import MinMaxScaler# 處理測試執行時間的缺失值(用中位數填充)
imputer = SimpleImputer(strategy='median')
test_data['execution_time'] = imputer.fit_transform(test_data[['execution_time']])# 將環境配置參數歸一化(如內存:4GB/16GB → 0.25/1.0)
scaler = MinMaxScaler()
test_data[['cpu_cores', 'memory_gb']] = scaler.fit_transform(test_data[['cpu_cores', 'memory_gb']])
2. 文本特征提取:分析缺陷報告

測試場景:自動分類缺陷報告(崩潰/性能/UI)

python

from sklearn.feature_extraction.text import TfidfVectorizer# 將缺陷描述轉為數值特征
bug_descriptions = ["UI按鈕點擊無響應", "API響應超時5s", "APP啟動時崩潰"]
vectorizer = TfidfVectorizer(max_features=1000)  # 提取最重要的1000個詞
X_text = vectorizer.fit_transform(bug_descriptions)# 輸出:<3x1000 sparse matrix> 可用于訓練分類模型
3. 分類模型:預測測試用例失敗概率

測試場景:優先執行高失敗風險的測試用例

python

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split# 特征:測試用例復雜度 + 歷史失敗率 + 關聯代碼變更次數
X = test_cases[['complexity', 'historical_fail_rate', 'code_changes']]
y = test_cases['failed']  # 標簽:0=通過, 1=失敗# 拆分數據集(測試集永遠隔離!)
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)
model.fit(X_train, y_train)# 預測新測試用例失敗概率
new_case = [[5, 0.3, 8]]  # 復雜度=5, 失敗率=30%, 變更次數=8
fail_prob = model.predict_proba(new_case)[0][1]  # 輸出:0.87 (87%概率失敗)
4. 聚類分析:自動歸檔相似缺陷報告

測試場景:減少重復缺陷報告處理時間

python

from sklearn.cluster import KMeans
from sklearn.feature_extraction.text import TfidfVectorizer# 1. 提取文本特征
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(bug_reports['description'])# 2. 聚類相似缺陷(假設分5類)
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(X)# 3. 結果分析
bug_reports['cluster'] = clusters
print(bug_reports.groupby('cluster')['description'].count())  # 查看每類缺陷數量
5. 回歸模型:預測測試執行時間

測試場景:優化測試資源調度

python

from sklearn.linear_model import Ridge
from sklearn.metrics import mean_absolute_error# 特征:測試步驟數 + 涉及服務數 + 數據量大小
X = tests[['step_count', 'services_involved', 'data_size_mb']]
y = tests['execution_time_sec']# 訓練回歸模型
model = Ridge(alpha=1.0)
model.fit(X_train, y_train)# 評估模型
y_pred = model.predict(X_test)
mae = mean_absolute_error(y_test, y_pred)  # 平均絕對誤差:12.3秒
6. 模型評估:驗證測試效果

測試工程師必須掌握的評估技術

python

from sklearn.metrics import classification_report, confusion_matrix# 分類模型評估
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))
print("混淆矩陣:\n", confusion_matrix(y_test, y_pred))# 輸出示例:precision  recall  f1-score   support0       0.92      0.95      0.93       120  # 通過類1       0.88      0.82      0.85        60  # 失敗類accuracy                           0.91       180

四、Scikit-learn 在測試中的典型應用場景

測試領域問題類型推薦算法應用效果
缺陷優先級分類文本分類SGDClassifier?(TF-IDF)自動區分 P0/P1/P2 缺陷
測試失敗根因分析多分類問題RandomForest識別失敗原因:環境/數據/代碼缺陷
性能瓶頸預測回歸分析GradientBoostingRegressor提前發現接口響應時間劣化
測試用例去冗余聚類DBSCAN合并高度相似的測試用例
視覺測試差異檢測圖像特征 + 分類PCA?+?SVM識別UI細微差異

?五、實操舉例說明


# 場景:自動分類缺陷報告from sklearn.cluster import KMeans
from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd# 1. 提取文本特征
vectorizer = TfidfVectorizer(stop_words='english')
bug_reports = {'description': ['登錄頁無響應', '無法提交表單', '密碼重置失敗', '登錄超時', '驗證碼不顯示','按鈕無法點擊','按鈕點擊無反應','字符取值錯誤'],'cluster': []
}
X = vectorizer.fit_transform(bug_reports['description'])# 2. 聚類相似缺陷(假設分5類)
kmeans = KMeans(n_clusters=5, random_state=42)
clusters = kmeans.fit_predict(X)# 3. 結果分析
bug_reports['cluster'] = clusters
df = pd.DataFrame(bug_reports)# 按聚類分組后,打印每個聚類的具體描述
for cluster_id, group in df.groupby('cluster'):print(f"聚類 {cluster_id} 包含的缺陷:")for desc in group['description']:print(f"- {desc}")print("---")
  • vectorizer = TfidfVectorizer(stop_words='english')
    • 作用是創建一個TF-IDF 文本特征提取器,用于將文本數據轉換為數值特征向量。
    • TfidfVectorizer:這是 scikit-learn 庫中用于實現 TF-IDF算法的工具類,它能把人類可讀的文本翻譯成機器學習算法能理解的數字向量,同時還會自動忽略無意義的常用詞,讓翻譯結果更精準。

      • TF(詞頻):衡量一個詞在某篇文檔中出現的頻率,出現次數越多,權重越高。
      • IDF(逆文檔頻率):衡量一個詞在所有文檔中的普遍重要性,在越少文檔中出現的詞(越獨特),權重越高。
        兩者結合可以將文本轉換為能體現詞語重要性的數值向量。
    • stop_words='english':這是一個參數設置,表示在處理文本時會自動過濾掉英文停用詞(如 "the"、"and"、"is" 等)。
      這些詞在英文中出現頻率極高,但通常不攜帶實際語義,過濾后可以減少噪音,讓特征更聚焦于有意義的詞匯。

  • vectorizer.fit_transform(bug_reports['description'])

    • 將文本數據轉換為機器學習算法可處理的數值特征矩陣,是文本特征提取的核心步驟。它完成了兩個關鍵操作:

      • 擬合(fit):讓?vectorizer(TF-IDF 提取器)“學習” 文本數據的特征,包括:

        • 分析所有文本中的詞匯,構建一個詞匯表(比如將 “登錄”“響應”“表單” 等詞映射為唯一的索引)。
        • 計算每個詞的 IDF(逆文檔頻率)值,評估其在整個文本集合中的重要性。
      • 轉換(transform):將原始文本數據轉換為 TF-IDF 數值矩陣:

        • 矩陣?X?的每一行對應一個文本(如一條缺陷報告)。
        • 每一列對應詞匯表中的一個詞。
        • 矩陣中的數值是該詞在對應文本中的 TF-IDF 分數(綜合了詞頻和重要性的權重)。
  • KMeans
    • 是一種經典的無監督聚類算法,全稱為 K - 均值聚類(K-Means Clustering)。它的核心作用是:將一堆沒有標簽的數據,自動劃分成 K 個不同的組別(聚類),使得同一組內的數據相似度高,不同組的數據相似度低。
  • kmeans = KMeans(n_clusters=5, random_state=42)
    • random_state=42?是為了保證代碼運行結果的可重復性而設置的參數。相當于給隨機過程設定了一個 “種子值”(這里的種子是 42)。無論你運行多少次代碼,只要?random_state?保持不變,算法中涉及的隨機操作都會產生相同的結果。
    • 以 KMeans 為例,它在初始階段會隨機選擇 K 個聚類中心,這個隨機選擇會影響最終的聚類結果 —— 即使是同一組數據,不同的初始中心可能會得到略有差異的聚類結果
    • 為什么是42 ?這是編程領域的一個 “梗”(源自《銀河系搭車客指南》中 “生命、宇宙及一切的終極答案是 42”)。實際使用中,你可以換成任何整數(如 0、100 等),只要保持固定,就能保證結果可重復。
  • clusters = kmeans.fit_predict(X)
    • 對特征矩陣 X 執行 KMeans 聚類,并返回每個樣本所屬的聚類標簽
  • df = pd.DataFrame(bug_reports)
    • 將字典格式的?bug_reports?轉換為 pandas 數據框(DataFrame),方便進行數據處理和分析。

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

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

相關文章

apache-doris安裝兼datax-web配置

Doris安裝 官方快速開始鏈接 下載2.1.10&#xff0c;解壓。我這邊個人服務器CPU是J1900&#xff0c;是沒有 avx2的&#xff0c;所以選no 配置JAVA_HOME&#xff0c;這里沒有配置的要配置下&#xff0c;注意要Oracle的jdk&#xff0c;openjdk沒有jps等工具集&#xff0c;后面跑…

問題實例:4G網絡下語音呼叫失敗

問題描述 測試機 撥號呼出后&#xff0c;一直在4G&#xff0c;超時后自動掛斷。 對比機可以呼出成功&#xff0c;呼出時回落3G。 日志分析 測試機和對比機一樣發起了CSFB 呼叫。 只是測試機后面沒有回落3G。 03:44:40.373264 [0xB0ED] LTE NAS EMM Plain OTA Outgoing Message …

MATLAB 2024b深度學習新特性全面解析與DeepSeek大模型集成開發技術

隨著人工智能技術向多學科交叉融合與工程實踐領域縱深發展&#xff0c;MATLAB 2024b深度學習工具箱通過架構創新與功能強化&#xff0c;為科研創新和行業應用提供了全棧式解決方案。基于該版本工具鏈的三大革新方向展開&#xff1a;一是構建覆蓋經典模型與前沿架構的體系化&…

Springboot美食分享平臺

一、 緒論 1.1 研究意義 當今社會作為一個飛速的發展社會&#xff0c;網絡已經完全滲入人們的生活&#xff0c; 網絡信息已成為傳播的第一大媒介&#xff0c; 可以毫不夸張說網絡資源獲取已逐步改變了人們以前的生活方式&#xff0c;網絡已成為人們日常&#xff0c;休閑主要工…

微信小程序——世界天氣小助手

哈嘍&#xff0c;大家好&#xff01; 最近小編開發了一個簡單的微信小程序——世界天氣小助手&#xff0c;希望大家喜歡。 No.1: 為大家介紹下開發者工具下的頁面結構。一共有三個界面{主頁、搜索頁、詳情頁}No.2&#xff1a; 具體頁面展示&#xff1a;當前頁面是主頁&…

基于單片機的智能家居安防系統設計

摘 要 為了應對目前人們提出的對生活越來越智能的要求&#xff0c;在提高生活品質的同時降低意外事件發生對用戶造成的經濟損失或其他損失。針對日常生活中經常發生的火災&#xff0c;失竊&#xff0c;電力資源浪費等生活問題&#xff0c;本設計正是在這種需求背景下展開研究…

騰訊研究院 | AI 浪潮中的中國品牌優勢解碼:華為、小米、大疆、科大訊飛等品牌從技術破壁到生態領跑的全維突圍

當 DeepSeek-R1 模型在 2025 年掀起大眾 AI 熱潮&#xff0c;當騰訊混元大模型與京東言犀大模型在產業場景中落地生根&#xff0c;中國品牌正在 AI 技術革命的浪潮中完成從追隨者到引領者的蛻變。騰訊營銷洞察&#xff08;TMI&#xff09;聯合京東消費及產業研究院、騰訊研究院…

FreeRTOS學習筆記——空閑任務prvIdleTask

文章目錄任務創建任務的內容推薦閱讀任務創建 prvIdleTask任務&#xff0c;是由任務調度函數vTaskStartScheduler創建的&#xff0c;任務優先級0&#xff0c;任務堆棧深度由配置選項configMINIMAL_STACK_SIZE定義。 void vTaskStartScheduler(void) {/* 其他代碼*//* Add the…

初識卷積神經網絡CNN

卷積神經網絡CNN 全連接神經網絡存在的問題: 輸入的形式應該是列向量&#xff0c;但是卷積神經網絡中的輸入是圖像(2D矩陣)&#xff0c;那么就需要對圖片進行展平處理&#xff0c;原本圖像中蘊含的空間等信息就被打亂了輸入的特征多了&#xff0c;那么神經元的參數就會很多&…

高層功能架構詳解 - openExo

高層功能架構詳解1. 系統整體結構與模塊化設計2. 兩大核心類&#xff1a;ExoData 與 ExoA. ExoDataB. ExoC. 數據結構的層級關系3. 多微控制器協作與BLE通信4. 主控軟件運行流程&#xff08;主循環偽代碼&#xff09;5. 架構優點小結6. 與 Code Structure 的關系實用建議1. 系統…

【西北工業大學公開課】導引系統原理(全61講)周軍 -個人筆記版 5000字

【嚴正聲明】此文檔為個人筆記&#xff1a;僅供個人與同學參考學習&#xff0c;記錄學習過程&#xff0c;嚴謹商業轉載&#xff0c;或商業售賣&#xff01;感謝西北工業大學公開課知識分享&#xff0c;公開資料開源&#xff01;視頻鏈接&#xff1a;【【西北工業大學】導引系統…

《命令行參數與環境變量:從使用到原理的全方位解析》

前言 當我們在終端輸入 ls -l /home 查看目錄詳情&#xff0c;或用 gcc -o hello hello.c 編譯代碼時&#xff0c;或許很少思考&#xff1a;這些空格分隔的 “指令 選項 路徑” 是如何被程序識別的&#xff1f;為什么 PATH 變量能讓系統找到可執行文件&#xff0c;而 HOME 變…

C++設計模式:單例模式 (現代C++主流實現方式Meyer‘s Singleton + 使用CRTP模板化)

文章目錄單例模式創建單例類餓漢式or懶漢式現代C單例模式的主流實現方式——Meyers Singleton使用 CRTP 模板化單例類單例模式 單例模式是指程序中只需要一個實例化對象&#xff0c;在全局作用域或整個代碼架構中&#xff0c;此對象只被實例化一次&#xff0c;就可以達到在整個…

Eureka 和 Nacos

一、基本介紹EurekaEureka 是 Netflix 公司開發的一款基于 REST 風格的服務注冊與發現組件&#xff0c;專為分布式系統設計。它遵循 AP 原則&#xff08;可用性、分區容錯性優先&#xff09;&#xff0c;強調在網絡分區等異常情況下的服務可用性&#xff0c;是 Spring Cloud Ne…

文件IO筆試題

目錄前言一、核心概念&#xff1a;二、關鍵操作步驟&#xff1a;三、為什么需要文件IO&#xff1f;四、常見類型&#xff1a;五、標準IO源碼六、筆試真題和練習1.代碼實現1代碼實現22.代碼實現3.代碼實現4.代碼實現5.代碼實現七、總結前言 文件IO&#xff08;文件輸入/輸出&am…

前端學習 5:DFT

DFT技術 DFT &#xff08;design for testability&#xff09;&#xff1a;指在設計系統和電路的同時&#xff0c;考慮測試的需求&#xff0c;通過增加一定的硬件開銷&#xff0c;獲得最大可測性的設計過程。&#xff08;因為增加了硬件&#xff0c;所以也帶來了不足&#xff…

最長遞增子序列(LIS)問題詳解

最長遞增子序列LIS問題詳解一、問題定義與核心特征1.1 問題描述1.2 核心特征二、基礎解法&#xff1a;動態規劃&#xff08;DP&#xff09;2.1 解法思路2.2 Java代碼實現2.3 復雜度分析三、優化解法&#xff1a;二分查找貪心3.1 核心思路3.2 二分查找的作用3.3 Java代碼實現代碼…

什么是HTTP長連接、短連接?誰更能抗DoS攻擊?

想象你在快餐店點餐&#xff1a; 你&#xff1a;“一個漢堡”收銀員&#xff1a;“好的&#xff0c;15元”交易結束&#xff0c;你離開隊伍你想加杯可樂&#xff0c;重新排隊你&#xff1a;“一杯可樂”收銀員&#xff1a;“好的&#xff0c;8元”再次離開… 這種每次溝通后立即…

微軟徽標認證是什么?如何快速獲取驅動簽名?

在Windows系統中安裝硬件驅動時&#xff0c;是否遇到過“無法驗證發布者”的警告&#xff1f;這正是驅動數字簽名在背后發揮作用。對于軟件開發者而言&#xff0c;驅動數字簽名不僅是系統兼容性的保障&#xff0c;更是企業品牌信任度的核心。一、驅動數字簽名的核心作用驅動數字…

Apache Ignite緩存基本操作

這段內容主要講解了 Apache Ignite 中緩存&#xff08;IgniteCache&#xff09;的基本操作&#xff0c;包括獲取緩存、創建緩存、銷毀緩存、執行原子操作以及異步操作等。下面我將用中文對這些內容進行詳細解釋&#xff0c;幫助你更好地理解。一、獲取緩存實例&#xff08;Gett…