人工智能機器學習——模型評價及優化

一、欠擬合與過擬合

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

二、數據分離與混淆矩陣

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

混淆矩陣(Confusion Matrix)

在這里插入圖片描述

在這里插入圖片描述

混淆矩陣,又稱為誤差矩陣,用于衡量分類算法的準確程度

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述

二、模型優化

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

四、實戰準備

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

五、酶活性預測,使用數據集T-R-train.csv,測試集T-R-test.csv

#加載數據
import pandas as pd
import numpy as np
data_train = pd.read_csv('T-R-train.csv')
data_train.head()

在這里插入圖片描述

data_test = pd.read_csv('T-R-test.csv')
data_test.head()

在這里插入圖片描述

#賦值x,y
x_train = data_train.loc[:,'T']
y_train = data_train.loc[:,'rate']x_test = data_test.loc[:,'T']
y_test = data_test.loc[:,'rate']
#可視化數據
from matplotlib import pyplot as plt 
fig1 = plt.figure()
plt.scatter(x_train,y_train)

在這里插入圖片描述

#轉換成一維數組
x_train = np.array(x_train).reshape(-1,1)
x_test = np.array(x_test).reshape(-1,1)
print(x_train.shape,x_test.shape)
#創建線性回歸模型
from sklearn.linear_model import LinearRegression
lr1 = LinearRegression()
lr1.fit(x_train,y_train)

在這里插入圖片描述

#預測數據
y_train_predict = lr1.predict(x_train)
y_test_predict = lr1.predict(x_test)#計算R二分數,越接近1,說明模型越好
from sklearn.metrics import r2_score
r2_train = r2_score(y_train,y_train_predict)
r2_test = r2_score(y_test,y_test_predict)
print(r2_train,r2_test)

在這里插入圖片描述

#可視化模型預測結果
x_range = np.linspace(40,90,300).reshape(-1,1)
y_range_predict = lr1.predict(x_range)
fig2 = plt.figure()
plt.plot(x_range,y_range_predict)
plt.scatter(x_train,y_train)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在這里插入圖片描述

#多項式模型
from sklearn.preprocessing import PolynomialFeatures
poly2 = PolynomialFeatures(degree=2)
x_2_train = poly2.fit_transform(x_train)
x_2_test = poly2.transform(x_test)
print(x_2_train)

在這里插入圖片描述

lr2 = LinearRegression()
lr2.fit(x_2_train,y_train)#預測數據
y_2_train_predict = lr2.predict(x_2_train)
y_2_test_predict = lr2.predict(x_2_test)#計算R二分數,越接近1,說明模型越好
from sklearn.metrics import r2_score
r2_2_train = r2_score(y_train,y_2_train_predict)
r2_2_test = r2_score(y_test,y_2_test_predict)
print(r2_2_train,r2_2_test)

在這里插入圖片描述

#可視化模型預測結果
x_2_range = np.linspace(40,90,300).reshape(-1,1)
x_2_range_p = poly2.transform(x_2_range)
y_2_range_predict = lr2.predict(x_2_range_p)
print(x_2_range,y_2_range_predict)

在這里插入圖片描述

fig4 = plt.figure()
plt.plot(x_2_range,y_2_range_predict)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在這里插入圖片描述

poly5 = PolynomialFeatures(degree=5)
x_5_train = poly5.fit_transform(x_train)
x_5_test = poly5.transform(x_test)
print(x_5_train.shape,x_5_train)

在這里插入圖片描述

lr5 = LinearRegression()
lr5.fit(x_5_train,y_train)#預測數據
y_5_train_predict = lr5.predict(x_5_train)
y_5_test_predict = lr5.predict(x_5_test)#計算R二分數,越接近1,說明模型越好
from sklearn.metrics import r2_score
r2_5_train = r2_score(y_train,y_5_train_predict)
r2_5_test = r2_score(y_test,y_5_test_predict)
print(r2_5_train,r2_5_test)
#可視化模型預測結果
x_5_range = np.linspace(40,90,300).reshape(-1,1)
x_5_range_p = poly5.transform(x_5_range)
y_5_range_predict = lr5.predict(x_5_range_p)
# print(x_5_range,y_5_range_predict)fig4 = plt.figure()
plt.plot(x_5_range,y_5_range_predict)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.title('prediction data')
plt.xlabel('temperature')
plt.ylabel('rate')
plt.show()

在這里插入圖片描述

六、芯片質量好壞分類任務,使用數據集data_class_raw.csv

#加載數據
import pandas as pd
import numpy as np
data = pd.read_csv('data_class_raw.csv')
data.head()

在這里插入圖片描述

#賦值x,y
x = data.drop(['y'],axis=1)
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
y = data.loc[:,'y']
#可視化數據
from matplotlib import pyplot as plt
fig1 = plt.figure()
bad = plt.scatter(x1[y==0],x2[y==0])
good = plt.scatter(x1[y==1],x2[y==1])
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([bad,good],['bad','good'])
plt.show()

在這里插入圖片描述

#異常檢測,剔除異常點
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)

在這里插入圖片描述

fig2 = plt.figure()
bad = plt.scatter(x1[y==0],x2[y==0])
plt.scatter(x1[y==0][y_predict_bad==-1],x2[y==0][y_predict_bad==-1],marker='x',s=150)
good = plt.scatter(x1[y==1],x2[y==1])
plt.title('raw data')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([bad,good],['bad','good'])
plt.show()

在這里插入圖片描述

#處理剔除異常點后的數據,使用數據集data_class_processed.csv,進行主成分分析(PCA)import pandas as pd
import numpy as np
data = pd.read_csv('data_class_processed.csv')#賦值x,y
x = data.drop(['y'],axis=1)
x1 = data.loc[:,'x1']
x2 = data.loc[:,'x2']
y = data.loc[:,'y']
#PCA預處理
from sklearn.preprocessing import StandardScaler#標準化處理
from sklearn.decomposition import PCA#降維
x_norm = StandardScaler().fit_transform(x)
pca = PCA(n_components=2)
x_reduced = pca.fit_transform(x_norm)
#計算各維度標準差比例
var_ratio = pca.explained_variance_ratio_
print(var_ratio)

在這里插入圖片描述
在這里插入圖片描述

#可視化標準差比例
fig3 = plt.figure()
plt.bar([1,2],var_ratio)
plt.show()

在這里插入圖片描述

#數據分離,分離出訓練數據集和測試數據集
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)

在這里插入圖片描述

#訓練數據集建立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)#計算準確率
from sklearn.metrics import accuracy_score
accuracy_trian = accuracy_score(y_train,y_train_predict)
accuracy_test = accuracy_score(y_test,y_test_predict)
print(accuracy_trian,accuracy_test)

在這里插入圖片描述

#可視化分類邊界
xx,yy = np.meshgrid(np.arange(0,10,0.05),np.arange(0,10,0.05))
print(xx,yy)

在這里插入圖片描述

x_range=np.c_[xx.ravel(),yy.ravel()]
print(x_range.shape,x_range)

在這里插入圖片描述

y_range_predict= knn_10.predict(x_range)
fig4 = plt.figure()
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(x1[y==0],x2[y==0])
good = plt.scatter(x1[y==1],x2[y==1])
plt.title('predict result')
plt.xlabel('x1')
plt.ylabel('x2')
plt.legend([bad,good,knn_bad,knn_good],['bad','good','knn_bad','knn_good'])
plt.show()

在這里插入圖片描述

#計算混淆矩陣,計算準確率
from sklearn.metrics import confusion_matrix 
cn = confusion_matrix(y_test,y_test_predict)
print(cn)

在這里插入圖片描述

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

在這里插入圖片描述

#準確率:整體樣本中,預測正確樣本數的比例
accuracy = (TP + TN)/(TP + TN+ FP+FN)
print(accuracy)

在這里插入圖片描述

#靈敏度(召回率):正樣本中,預測正確的比例
recall = TP/(TP+FN)
print(recall)#特異度:負樣本中,預測正確的比例
specificity=TN/(TN+FP)
print(specificity)#精確率:預測結果為鄭的樣本中,預測正確的比例
precision = TP/(TP+FP)
print(precision)#F1分數,綜合精確率和召回率的一個判斷標準
f1 = 2*precision*recall/(precision+recall)
print(f1)
#嘗試不同的n_neighbors
n = [i for i in range(1,21)]
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(n)
print(accuracy_train)
print(accuracy_test)

在這里插入圖片描述

fig5 = plt.figure()
plt.subplot(121)
plt.plot(n,accuracy_train,marker='o')
plt.title('train accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('train accuracy')plt.subplot(122)
plt.plot(n,accuracy_test,marker='o')
plt.title('test accuracy vs n_neighbors')
plt.xlabel('n_neighbors')
plt.ylabel('test accuracy')
plt.show()

在這里插入圖片描述

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

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

相關文章

linux系統啟動時腳本命令執行

Linux內核啟動過程中,會掛載文件系統,在文件系統掛載后,運行的第一個程序就是根目錄下的linuxrc,而這是一個指向/bin/busybox 的鏈接,也就是說,系統起來后運行的第一個程序就是busybox本身。再然后&#xf…

連接池項目考點

好的!讓我詳細講解一下您項目中的連接池是如何工作的。我會基于您現有的代碼來分析整個工作流程。 Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read file: net/ngx_c_socket_conn.cxx Read …

【MySQL】從零開始了解數據庫開發 --- 數據類型

我不假思索地上路, 因為出發的感覺太好了, 世界突然充滿了可能性。 --- 杰克凱魯亞克 --- 從零開始了解數據庫開發MySQL中的數據類型數字類型字符串類型日期類型MySQL中的數據類型 MySQL數據庫匯中,每一條數據都有其類型,主要分為…

mybatis vs mybatis-plus

??核心關系:?? MyBatis-Plus ??不是?? MyBatis 的替代品,而是構建在 MyBatis ??之上??的一個強大的??增強工具包??。它完全兼容原生 MyBatis,并在其基礎上提供了大量開箱即用的功能,極大地簡化了開發,…

2025膠水分裝機服務商技術解析:聚焦高精度、智能化應用

膠水作為電子組裝、新能源電池、醫療器械、消費類電子產品等關鍵環節中的核心材料,其生產、儲存與分裝過程對精度、潔凈度和一致性的要求日益嚴苛。在這一背景下,膠水分裝機及分裝服務商正從傳統的設備供應商向“工藝裝備數據服務”的綜合解決方案提供者…

v-model是怎么實現的,語法糖到底是什么

1&#xff1a;作用在表單元素上實際上就是2&#xff1a;作用在自定義組件上&#xff0c;vue2和vue3不同 vue2&#xff1a; v-model相當于名為value 的 prop和名為 input 的事件 在父組件中 <child v-model"message"></child> //相當于&#xff1a; <…

學習筆記:Javascript(5)——事件監聽(用戶交互)

事件監聽&#xff1a;用戶交互的核心機制在前端開發中&#xff0c;事件監聽是處理用戶交互的基礎機制。它允許我們檢測用戶的操作&#xff08;如點擊、輸入、滾動等&#xff09;并執行相應的代碼&#xff0c;讓網頁從靜態變為動態。一、事件與事件監聽的基本概念事件&#xff0…

在Linux系統中清理大文件的方法

在Linux系統的日常運維管理過程中&#xff0c;磁盤空間問題是一個非常常見且棘手的難題。隨著系統運行時間的增加&#xff0c;日志文件、臨時文件、緩存文件以及用戶產生的數據會不斷增長。如果缺乏及時的監控和清理&#xff0c;大文件往往會迅速占滿磁盤&#xff0c;導致系統性…

使用x64dbg分析調試windows可執行程序

引言 當我們僅有一個C/C等編譯的可執行程序&#xff08;windows 上的 exe 文件&#xff09;&#xff0c;而沒有源碼時我們應該怎么分析調試該可執行程序呢&#xff1f;我們可以通過動態分析或靜態分析的方式達成我們的目的&#xff0c;當然比較有效的方案當然是靜態分析結合動態…

在Windows 11上配置Cursor IDE進行Java開發

前言 Cursor IDE是一款基于VSCode的AI編程助手&#xff0c;集成了強大的AI功能&#xff0c;能夠顯著提升Java開發效率。本文詳細介紹如何在Windows 11系統上安裝和配置Cursor IDE&#xff0c;使其成為高效的Java開發環境。 1. Windows 11上安裝Cursor IDE 1.1 下載和安裝步驟…

字符串-43.字符串相乘-力扣(LeetCode)

一、題目解析 1、計算乘積后&#xff0c;將結果也按字符串返回 2、字符串長度在[1&#xff0c;200] 二、算法原理 為了方便字符串計算&#xff0c;我們將其逆置&#xff0c;符合我們的計算需求&#xff0c;"123"將變為"321" 解法1&#xff1a;模擬小學…

鴻蒙HAP包解包、打包、簽名及加固全流程解析

在鴻蒙應用開發過程中&#xff0c;HAP&#xff08;HarmonyOS Ability Package&#xff09;包的解包、打包、簽名以及加固是開發者們繞不開的重要環節。今天&#xff0c;就讓我們深入探討這一全流程&#xff0c;幫助大家更好地理解和掌握相關操作。 一、HAP解包 解包是分析和修…

PyTorch之張量創建與運算

PyTorch 主要有以下幾個基礎概念&#xff1a;張量&#xff08;Tensor&#xff09;、自動求導&#xff08;Autograd&#xff09;、神經網絡模塊&#xff08;nn.Module&#xff09;、優化器&#xff08;optim&#xff09;等。張量&#xff08;Tensor&#xff09;&#xff1a;PyTo…

數據 儲存

文件儲存 網頁版爬蟲數據庫 &#xff1a; https://spidertools.cn/#/crypto TEXT 文本儲存 可以使用記事本打開 r #讀取。 r #讀寫&#xff0c;文件指針放在文件的開頭。 w #寫入&#xff0c;覆蓋原文件。 w #讀寫&#xff0c;覆蓋原文件。 a #附加。 a #讀寫&…

Flask 博客系統(Flask Blog System)

目標&#xff1a;零基礎也能從頭搭建一個支持文章管理、評論、分類標簽、搜索、用戶登錄的博客系統 技術棧&#xff1a;Flask SQLite SQLAlchemy Jinja2 HTML/CSS Flask-Login 開發工具&#xff1a;VSCode 學習重點&#xff1a;MVC 模式、數據庫操作、會話管理、表單處理一…

基于RFID技術的寵物自動喂食器方案

一、背景 寵物已經成為現代人生活中不可或缺的一部分&#xff0c;隨著養寵物的人越來越多&#xff0c;寵物的數量也越來越多&#xff0c;有些家庭甚至養了兩只以上的貓狗或者貓狗混養&#xff0c;寵物間的管理問題也越來越突出&#xff0c;如寵物之間的搶食行為&#xff0c;易…

conda常見問題

文章目錄run "conda init" before "conda activate"打開PowerShell自動進入base環境&#xff08;cmd沒有這個問題&#xff09;run “conda init” before “conda activate” 在使用conda命令創建env后使用conda activate命令&#xff0c;出現"run ‘…

第5章 HTTPS與安全配置

5.1 HTTPS概述 5.1.1 為什么需要HTTPS 數據加密:保護傳輸中的敏感數據 身份驗證:確認服務器身份的真實性 數據完整性:防止數據在傳輸過程中被篡改 SEO優勢:搜索引擎優先排名HTTPS網站 瀏覽器要求:現代瀏覽器對HTTP網站顯示不安全警告 合規要求:許多行業標準要求使用HTTP…

Java入門級教程17——利用Java SPI機制制作驗證碼、利用Java RMI機制實現分布式登錄驗證系統

目錄 1.制作驗證碼——java SPI機制 1.1 類所屬包情況 1.2 具體實現 1.2.1 核心接口&#xff1a;ICode 1.2.2 接口實現類&#xff1a;驗證碼的具體生成邏輯 1.2.3 服務工廠類&#xff1a;CodeServiceFactory&#xff08;核心&#xff1a;SPI 服務發現&#xff09; 1.2.…

ES6筆記5

1. Promise相當于一個容器&#xff0c;保存著未來才要結束的事件&#xff08;異步操作&#xff09;的一個結果&#xff0c;各種異步操作都可以用同樣方法處理 axios特點&#xff1a;對象的狀態不受外界影響&#xff0c;處理異步操作&#xff0c;3個狀態&#xff0c;Pending&…