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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…