好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)

任务

好坏质检分类实战 task:
1、基于 data_class_raw.csv 数据,根据高斯分布概率密度函数,寻找异常点并剔除
2、基于 data_class_processed.csv 数据,进行 PCA 处理,确定重要数据维度及成分
3、完成数据分离,数据分离参数:random_state=4,test_size=0.4
4、建立 KNN 模型完成分类,n_neighbors 取 10,计算分类准确率,可视化分类边界
5、计算测试数据集对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1 分数
6、尝试不同的 n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率并作图。

参考资料 

32.36 实战(二)_哔哩哔哩_bilibili

33.37 实战(三)_哔哩哔哩_bilibili

数据准备

数据集名称:data_class_raw.csv、data_class_processed.csv

点我转到百度网盘获取数据集 提取码: 8497 

1、异常数据检测

加载数据

#load the data
import pandas as pd
import numpy as np
data = pd.read_csv('data_class_raw.csv')
data.head()

 

x1,x2 是芯片质量相关的两个维度,y 代表芯片质量是否合格。

#define X and y
X = data.drop(['y'], axis = 1)
y = data.loc[:,'y']

原始数据可视化

#visualize the data
%matplotlib inline
from matplotlib import pyplot as plt
fig1 = plt.figure(figsize = (5,5))
bad = plt.scatter(X.loc[:,'x1'][y==0], X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1], X.loc[:,'x2'][y==1])
plt.legend((good,bad),('good','bad'))
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

根据高斯分布概率密度函数,寻找异常点并剔除

#根据高斯分布概率密度函数,寻找异常点并剔除
#anomay detection
from sklearn.covariance import EllipticEnvelope
ad_model = EllipticEnvelope(contamination = 0.02)
ad_model.fit(X[y==0])
y_predict_bad = ad_model.predict(X[y==0])
print(y_predict_bad)[ 1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1  1 -1]

找出异常点并画出异常点

#找出异常点并画出异常点
fig1 = plt.figure(figsize = (5,5))
bad = plt.scatter(X.loc[:,'x1'][y==0], X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1], X.loc[:,'x2'][y==1])
plt.scatter(X.loc[:,'x1'][y==0][y_predict_bad == -1], X.loc[:,'x2'][y==0][y_predict_bad == -1],marker = 'x', s=150)# 找出来的异常点
plt.legend((good,bad),('good','bad'))
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

2、基于剔除了异常点的数据进行PCA处理

加载数据

#任务二:基于剔除了异常点的数据进行PCA处理
data = pd.read_csv('data_class_processed.csv')
data.head()
#define X and y
X = data.drop(['y'], axis = 1)
y = data.loc[:,'y']

进行PCA的预处理

#接下来进行PCA的预处理
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
X_norm = StandardScaler().fit_transform(X) # 进行标准化处理
pca = PCA(n_components = 2) # 进行 2 维的PCA处理
X_reduced = pca.fit_transform(X_norm)#参数是标准化之后的数据
#下面计算各个维度上主成分标准差的比例是多少
var_ratio = pca.explained_variance_ratio_
print(var_ratio)#[0.5369408 0.4630592], 对应主成分的标准差的比例
fig4 = plt.figure(figsize = (5,5))
plt.bar([1,2], var_ratio)
plt.show()# 这两个主成分上的标准差都挺高的,也就意味着这两个维度的数据都需要进行保留

 3、数据分离

# train and test split: random_state=4, test_size=0.4
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=4, test_size=0.4)
print(X_train.shape, X_test.shape, X.shape)

4、KNN 模型进行分类

针对训练数据集建立KNN模型、进行训练和预测

#4、建立 KNN 模型完成分类,n_neighbors 取 10,计算分类准确率,可视化分类边界、
#针对训练数据集建立KNN模型
from sklearn.neighbors import KNeighborsClassifier
knn_10 = KNeighborsClassifier(n_neighbors = 10)
knn_10.fit(X_train, y_train)
y_train_predict = knn_10.predict(X_train)
y_test_predict = knn_10.predict(X_test)

计算准确率

#4、建立 KNN 模型完成分类,n_neighbors 取 10,计算分类准确率,可视化分类边界、
#针对训练数据集建立KNN模型
from sklearn.neighbors import KNeighborsClassifier
knn_10 = KNeighborsClassifier(n_neighbors = 10)
knn_10.fit(X_train, y_train)
y_train_predict = knn_10.predict(X_train)
y_test_predict = knn_10.predict(X_test)

 可视化分类边界

流程:生成一些新的数据组,然后利用模型进行预测,最后画出模型的预测结果。

生成一些新的数据组

# 可视化分类边界(生成一些新的数据组,然后利用模型进行预测,最后画出模型的预测结果)
xx,yy = np.meshgrid(np.arange(0,10,0.05), np.arange(0,10,0.05))#观察到原来数据是0-10之间
print(xx)
print(yy.shape)# (200, 200), 200行, 200 列

x_range = np.c_[xx.ravel(),yy.ravel()]
#np.c_[xx.ravel(),yy.ravel()] 是 NumPy 中一种常用的数组拼接操作,
#通常与网格坐标生成(例如 np.meshgrid)结合使用,用于创建二维平面上所有可能的坐标点组合
print(x_range.shape) #(40000, 2) , 相当于200 行 200 列的组合

进行预测

y_range_predict = knn_10.predict(x_range)

画出分类边界

fig4 = plt.figure(figsize = (10,10))
knn_bad = plt.scatter(x_range[:,0][y_range_predict == 0], x_range[:,1][y_range_predict == 0])#所有行,第一列;所有行,第二列
knn_good = plt.scatter(x_range[:,0][y_range_predict == 1], x_range[:,1][y_range_predict == 1])#下面是原始数据
bad = plt.scatter(X.loc[:,'x1'][y==0], X.loc[:,'x2'][y==0])
good = plt.scatter(X.loc[:,'x1'][y==1], X.loc[:,'x2'][y==1])plt.legend((good,bad , knn_good, knn_bad),('good','bad','knn_good','knn_bad'))
plt.title('prediction result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()

5、计算测试数据集对应的混淆矩阵

#5、计算测试数据集对应的混淆矩阵,计算准确率、召回率、特异度、精确率、F1 分数
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_test_predict) #计算测试数据的混淆矩阵
print(cm)

TP = cm[1,1]
TN = cm[0,0]
FP = cm[0,1]
FN = cm[1,0]
print(TP, TN, FP, FN)

准确率:整体样本中,预测正确样本数的比例
・Accuracy = (TP + TN)/(TP + TN + FP + FN) 。
这里涉及机器学习等领域的评估指标概念 :
Accuracy(准确率):是一个衡量分类模型性能的指标 。
TP(True Positive,真正例 ):实际为正例且被模型正确预测为正例的样本数量。
TN(True Negative,真负例 ):实际为负例且被模型正确预测为负例的样本数量。
FP(False Positive,假正例 ):实际为负例但被模型错误预测为正例的样本数量。
FN(False Negative,假负例 ):实际为正例但被模型错误预测为负例的样本数量 。

accuracy = (TP + TN)/(TP + TN + FP + FN) #0.6428571428571429
print(accuracy#0.6428571428571429

 灵敏度(召回率):正样本中,预测正确的比例
・Sensitivity = Recall = TP/(TP + FN)

recall = TP/(TP+FN)
print(recall)#0.625

特异度: 负样本中,预测正确的比例
Specificity = TN/(TN + FP)

specificity = TN/(TN + FP)
print(specificity)#0.6666666666666666

 精确率:预测结果为正的样本中,预测正确的比例
・Precision = TP/(TP + FP)

precision = TP/(TP + FP)
print(precision)#0.7142857142857143

 precision = TP/(TP + FP)
print(precision)#0.7142857142857143

f1 = 2*precision*recall/(precision + recall)
print(f1)#0.6666666666666666

6、KNN 尝试不同的 n_neighbors(1-20)

#尝试不同的 n_neighbors(1-20),计算其在训练数据集、测试数据集上的准确率并作图
# try different k and calculate the accuracy for each
n = [i for i in range(1,21)]
# print(n)#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
accuracy_train = []
accuracy_test = []
for i in n:knn = KNeighborsClassifier(n_neighbors = i)knn.fit(X_train, y_train)y_train_predict = knn.predict(X_train) #进行训练数据的预测y_test_predict  = knn.predict(X_test) #进行测试数据的预测accuracy_train_i = accuracy_score(y_train, y_train_predict)accuracy_test_i = accuracy_score(y_test, y_test_predict)accuracy_train.append(accuracy_train_i)accuracy_test.append(accuracy_test_i)
print(accuracy_train, accuracy_test)

fig5 = plt.figure(figsize=(12,5))
plt.subplot(121)
plt.plot(n, accuracy_train,marker = 'o') # 训练数据的准确率, n 是 n_neighbors 参数
plt.title('training accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('accuracy')plt.subplot(122)
plt.plot(n, accuracy_test,marker = 'o') # 测试数据的准确率, n 是 n_neighbors 参数
plt.title('testing accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('accuracy')plt.show()

 7、好坏质检分类实战 summary


1、通过进行异常检测,帮助找到了潜在的异常数据点;
2、通过 PCA 分析,发现需要保留 2 维数据集;
3、实现了训练数据与测试数据的分离,并计算模型对于测试数据的预测准确率
4、计算得到混淆矩阵,实现模型更全面的评估
5、通过新的方法,可视化分类的决策边界
6、通过调整核心参数 n_neighbors 值,在计算对应的准确率,可以帮助我们更好的确定使用哪个模型
7、核心算法参考链接:https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以少学习:通过无标签数据从大型语言模型进行知识蒸馏

Learning with Less: Knowledge Distillation from Large Language Models via Unlabeled Data 发表:NNACL-Findings 2025 机构:密歇根州立大学 Abstract 在实际的自然语言处理(NLP)应用中,大型语言模型&#xff08…

EasyExcel使用

EasyExcel 简介 EasyExcel 是阿里巴巴开源的一个基于 Java 的简单、省内存的读写 Excel 工具。在处理大量数据时,它能极大地减少内存占用,提高性能。下面从依赖配置、模板使用到代码调用,进行详细介绍。 添加依赖 若要在项目里使用 EasyEx…

文件类型汇总

一、文档类文件 Microsoft Office 文档:.doc、.docx(Word 文档)、.xls、.xlsx(Excel 表格)、.ppt、.pptx(PowerPoint 演示文稿) OpenOffice/LibreOffice 文档:.odt(文字…

OpenCV CUDA模块图像处理------颜色空间处理之拜耳模式去马赛克函数demosaicing()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于在 GPU 上执行拜耳图像(Bayer Pattern)的去马赛克操作(Demosaicing),将单通…

Linux: 守护进程

Linux: 守护进程 (一)前台进程和后台进程前台进程后台进程 (二)会话、进程组、进程的关系(三)守护进程创建守护进程 (一)前台进程和后台进程 前台进程 前台进程是指当前…

6.4.5_关键路径

AOE网: 用EEdge表示活动,AOV网是用Vertex顶点表示活动 仅有一个入度0的顶点叫开始顶点(源点),出度0的顶点叫结束顶点(汇点) 各条边表示活动,边上的权值表示完成该活动的开销,各顶点表示事件,事件是就发生…

Oracle 的 TX、TM、UL 锁对比

Oracle 的 TX、TM、UL 锁对比 Oracle 数据库中的这三种锁机制在并发控制中扮演着不同角色,以下是它们的对比分析: 一、基本特性对比 特性TX (事务锁)TM (DML锁)UL (用户锁)锁类型行级锁表级锁应用级自定义锁作用范围保护数据行变更保护表结构不被修改…

Kruskal-Wallis检验 vs. 多次Wilcoxon检验:多重比较-spss

在补充图6中,对喉镜形态分类、病理类型和病程使用 Wilcoxon秩和检验(Mann-Whitney U检验) 结合 Bonferroni校正,而非 Kruskal-Wallis检验加Dunn’s检验,原因如下: 1. 方法选择的依据 (1) 变量类型与比较组…

vue3+element-plus el-date-picker日期、年份筛选设置本周、本月、近3年等快捷筛选

一、页面代码&#xff1a; <template> <!-- 日期范围筛选框 --> <el-date-picker v-model"dateRange" value-format"YYYY-MM-DD" type"daterange" range-separator"至" start-placeholder"开始日期" end-…

MySQL 关于用户的权限信息查看

1: 先连接mysql : [rootxx ~]# mysql -u admin -p -h 8.8.8.8 -P 3306 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 38 Server version: 8.0.41 Source distribution Copyright (c) 2000, 2025, Oracle and/or …

C++ STL stack容器使用详解

一、stack容器概述 stack容器适配器是C标准模板库(STL)中实现后进先出(LIFO)数据结构的重要组件&#xff0c;它通过封装底层容器&#xff08;如deque/vector/list&#xff09;提供栈操作接口。 二、stack核心操作详解 1. 容器构造方式 // 默认使用deque存储元素 stack<i…

科技趋势分析系统 BBC (Big Bang of Computing)

科技趋势分析系统 BBC (Big Bang of Computing) 技术文档 1. 项目概述 BBC (Big Bang of Computing) 是一个基于 arXiv 论文数据的科技趋势分析系统&#xff0c;旨在通过分析海量的学术文献&#xff0c;结合大语言模型&#xff08;LLM&#xff09;进行增强分析&#xff0c;提…

尚硅谷redis7 55-57 redis主从复制之理论简介

55 redis主从复制之理论简介 定义 Redis 主从复制&#xff08;Master-Slave Replication&#xff09;是 Redis 提供的一种数据冗余和高可用机制&#xff0c;可以让一个 Redis 主节点的数据复制到一个或多个从节点&#xff0c;实现读写分离、容灾备份等功能。 主节点&#xff…

CarPropertyService 介绍

目录 1. CarPropertyService 基本介绍 1.1 CarPropertyService 结构图 1.2 CarPropertyService 的定义与实现 1.3 CarPropertyManager 与 CarPropertyService 2. PropertyHalService 与 CarPropertyService 3. CarPropertyService 的重要接口介绍 3.1 CarPropertyServi…

JavaScript 性能优化按层次逐步分析

JavaScript 性能优化实战 &#x1f4a1; 本文数据基于Chrome 136实测验证&#xff0c;涵盖12项核心优化指标&#xff0c;通过20代码案例演示性能提升300%的实战技巧。 一、代码层深度优化 1. 高效数据操作&#xff08;百万级数据处理&#xff09; // 不良实践&#xff1a;频繁…

【东枫科技】基于Docker,Nodejs,GitSite构建一个KB站点

Docker 安装桌面版本&#xff0c;安装Node镜像 运行node镜像 需求 和外部的某个文件夹地址可以绑定端口可以绑定&#xff0c;方便server的访问 docker run -itd --name node-test -v C:/Users/fs/Documents/GitHub:/home/node -p 3000:3000 node进入终端 docker exec -it …

【小白AI教程】大模型知识扫盲通识

目录 一、究竟什么是大模型 二、大模型的两大分支 2.1 在线大模型 2.2 开源大模型 2.3 大模型的应用 利用行业知识重新训练AI大模型 利用行业知识对AI大模型进行微调 利用行业知识建立知识库 三、Reasoning 大模型 3.1 基本概述 3.2 核心概念 3.3 技术实现 3.4 应…

测试 Gemini Pro 2.5

好的&#xff0c;我已经明白了您的需求。您希望&#xff1a; 增大概览消息&#xff08;Toast&#xff09;的尺寸&#xff1a;使其更加醒目。消息持久性&#xff1a;当在用户中心内部切换不同标签页&#xff08;例如从“个人信息”切换到“安全设置”&#xff09;时&#xff0c…

大模型——MCP 深度解析

MCP 深度解析 套用一句关于幺半群的名言:"MCP 是一种开放协议,用于标准化应用程序向 LLM 提供上下文的方式,问题何在?"但即使花数小时阅读 MCP 的定义并实操示例,仍难以清晰把握其具体运作流程:LLM 负责什么?MCP 服务器做什么?MCP 客户端的角色是什么?数据…

使用 scikit-learn 库对乌克兰冲突事件数据集进行多维度分类分析

使用scikit-learn库对乌克兰冲突事件数据集进行多维度分类分析 背景 在现代冲突研究中&#xff0c;对冲突事件进行多维度分析和可视化可以帮助我们更好地理解冲突的模式、趋势和影响因素。本次作业将使用开源冲突数据&#xff0c;构建一个完整的机器学习分类流程&#xff0c;…