好壞質檢分類實戰(異常數據檢測、降維、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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84691.shtml
英文地址,請注明出處:http://en.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;…