python打卡訓練營打卡記錄day31

知識點回顧
  1. 規范的文件命名
  2. 規范的文件夾管理
  3. 機器學習項目的拆分
  4. 編碼格式和類型注解

作業:嘗試針對之前的心臟病項目ipynb,將他按照今天的示例項目整理成規范的形式,思考下哪些部分可以未來復用。

心臟病項目目錄

目錄結構:heart/
├── config/   #集中存放項目的配置文件
├── data/   #存放項目相關數據├── processed/   #數據預處理后的數據└── row/   #原始數據
├── experiments/   #用于探索和測試
├── models/   #存放訓練好的模型文件
├── reports/   #存儲項目運行產生的各類報告和輸出文件
└── src/   #存放項目的核心源代碼├── data/   #數據相關代碼├── models/   #模型相關代碼└── utils/   #通用輔助函數代碼

心臟病項目拆分

導入依賴庫

# 忽視警告
import warnings
warnings.simplefilter('ignore')# 數據處理
import numpy as np
import pandas as pd# 數據可視化
import matplotlib.pyplot as plt
import seaborn as sns # 隨機森林
from sklearn.ensemble import RandomForestClassifier # 決策樹
from sklearn.tree import DecisionTreeClassifier# 樹的可視化
from sklearn.tree import export_graphviz # 模型評估方法
from sklearn.metrics import roc_curve, auc 
from sklearn.metrics import classification_report # 混淆矩陣
from sklearn.metrics import confusion_matrix # 數據切分
from sklearn.model_selection import train_test_split #可解釋性分析
import shap np.random.seed(123) 
pd.options.mode.chained_assignment = None  %matplotlib inline

數據可視化

dt = pd.read_csv("heart.csv")
# 設置可視化風格
sns.set(palette = 'pastel', rc = {"figure.figsize": (10,5), # 圖形大小、"axes.titlesize" : 14,    # 標題文字尺寸"axes.labelsize" : 12,    # 坐標軸標簽文字尺寸"xtick.labelsize" : 10,   # X軸刻度文字尺寸"ytick.labelsize" : 10 }) # Y軸刻度文字尺寸
a = sns.countplot(x = 'target', data = dt)               # 繪制計數圖,其中x為target,數據為dt
a.set_title('Distribution of Presence of Heart Disease') # 設置圖形標題
a.set_xticklabels(['Absent', 'Present'])                 # 將兩個條形的標簽分別設置為“Absent”(沒有心臟病)和“Present”(有心臟病)
plt.xlabel("Presence of Heart Disease")                  # 設置X軸標簽
# 顯示圖形
plt.show()#患者年齡分布
plt.show()
g = sns.countplot(x = 'age', data = dt) # 繪制計數圖,其中x為age,數據為dt
g.set_title('Distribution of Age')      # 設置圖形標題
plt.xlabel('Age')                       # 設置X軸標簽#患者性別分布
dt.sex.value_counts()
b = sns.countplot(x = 'target', data = dt, hue = 'sex')          # 創建一個計數圖,其中x為target,數據為dt,用sex作為色相(切分類別)
plt.legend(['Female', 'Male'])                                    # 以female/male作為標簽,在圖形中嵌入圖例
b.set_title('Distribution of Presence of Heart Disease by Sex')   # 設置圖形標題
b.set_xticklabels(['Absent', 'Present'])                          # 設置條形圖的標簽
# 顯示圖形
plt.show()# 可視化病患血清膽固醇濃度分布
sns.distplot(dt['chol'].dropna(), kde=True, color='darkblue', bins=40)# 可視化病人(入院時)的靜息血壓分布
sns.distplot(dt['trestbps'].dropna(), kde=True, color='darkgreen', bins=10)# 可視化病人空腹血糖濃度分布
g = sns.countplot(x = 'fbs', data = dt)                 # 繪制計數圖,其中x為fbs,數據為dt
g.set_title('Distribution of Fasting blood sugar')      # 設置圖形標題
plt.xlabel('Fasting blood sugar')                       # 設置X軸標簽#繪制熱力圖
f,ax = plt.subplots(figsize=(12,12)) # 定義圖形尺寸
# 根據計算的相關值繪制熱力圖
sns.heatmap(dt.corr('pearson'), annot = True, linewidths = .5, fmt =  '.1f', ax = ax)
# 顯示特征相關性熱力圖
plt.show()

數據預處理

#由于原數據集內的特征名稱不利于解讀。因此,我們先對其進行重命名,使其更容易理解。
dt.columns = ['age', 'sex', 'chest_pain_type', 'resting_blood_pressure', 'cholesterol', 'fasting_blood_sugar', 'rest_ecg', 'max_heart_rate_achieved','exercise_induced_angina', 'st_depression', 'st_slope', 'num_major_vessels', 'thalassemia', 'target']#轉換數據類型
dt.dtypes# 使用"astype"指定數據類型
dt['sex'] = dt['sex'].astype('object')
dt['chest_pain_type'] = dt['chest_pain_type'].astype('object')
dt['fasting_blood_sugar'] = dt['fasting_blood_sugar'].astype('object')
dt['rest_ecg'] = dt['rest_ecg'].astype('object')
dt['exercise_induced_angina'] = dt['exercise_induced_angina'].astype('object')
dt['st_slope'] = dt['st_slope'].astype('object')
dt['thalassemia'] = dt['thalassemia'].astype('object')#轉換后重新確認輸出
dt.dtypes# 對object數據類型進行編碼
# 將"female"編碼為0,將"male"編碼為1
# 下面的編碼方式類似
dt['sex'][dt['sex'] == 0] = 'female'
dt['sex'][dt['sex'] == 1] = 'male'dt['chest_pain_type'][dt['chest_pain_type'] == 1] = 'typical angina'
dt['chest_pain_type'][dt['chest_pain_type'] == 2] = 'atypical angina'
dt['chest_pain_type'][dt['chest_pain_type'] == 3] = 'non-anginal pain'
dt['chest_pain_type'][dt['chest_pain_type'] == 4] = 'asymptomatic'dt['fasting_blood_sugar'][dt['fasting_blood_sugar'] == 0] = 'lower than 120mg/ml'
dt['fasting_blood_sugar'][dt['fasting_blood_sugar'] == 1] = 'greater than 120mg/ml'dt['rest_ecg'][dt['rest_ecg'] == 0] = 'normal'
dt['rest_ecg'][dt['rest_ecg'] == 1] = 'ST-T wave abnormality'
dt['rest_ecg'][dt['rest_ecg'] == 2] = 'left ventricular hypertrophy'dt['exercise_induced_angina'][dt['exercise_induced_angina'] == 0] = 'no'
dt['exercise_induced_angina'][dt['exercise_induced_angina'] == 1] = 'yes'dt['st_slope'][dt['st_slope'] == 1] = 'upsloping'
dt['st_slope'][dt['st_slope'] == 2] = 'flat'
dt['st_slope'][dt['st_slope'] == 3] = 'downsloping'dt['thalassemia'][dt['thalassemia'] == 1] = 'normal'
dt['thalassemia'][dt['thalassemia'] == 2] = 'fixed defect'
dt['thalassemia'][dt['thalassemia'] == 3] = 'reversable defect'# 調用"get_dummies"進行獨特編碼
dt = pd.get_dummies(dt, drop_first=True) #劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(dt.drop(columns='target'),dt['target'],test_size=0.2,random_state=10)

模型創建和預測

#創建模型
model = RandomForestClassifier(max_depth=5, n_estimators=10)    # 設置最大深度與基學習器等參數
model.fit(X_train, y_train)                                     # 使用隨機森林擬合訓練集#模型預測
y_predict = model.predict(X_test)
# 生成一個nxm的矩陣,第i行表示第i個樣本屬于各個標簽的概率
y_pred_quant = model.predict_proba(X_test)[:, 1]
y_pred_bin = model.predict(X_test)

模型評估

#生成混淆矩陣
confusion_matrix = confusion_matrix(y_test, y_pred_bin)
confusion_matrix#計算靈敏度和特異度
total=sum(sum(confusion_matrix))sensitivity = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[1,0])
print('靈敏度 : ', sensitivity )specificity = confusion_matrix[1,1]/(confusion_matrix[1,1]+confusion_matrix[0,1])
print('特異度 : ', specificity)# 繪制ROC曲線
# 得到曲線的橫軸和縱軸
fpr, tpr, thresholds = roc_curve(y_test, y_pred_quant)fig, ax = plt.subplots()
# 繪制roc曲線
ax.plot(fpr, tpr)
# 繪制y=x直線
ax.plot([0, 1], [0, 1], transform=ax.transAxes, ls="--", c=".3")
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.0])
plt.rcParams['font.size'] = 12
plt.title('ROC curve for diabetes classifier')
plt.xlabel('False Positive Rate (1 - Specificity)')
plt.ylabel('True Positive Rate (Sensitivity)')
plt.grid(True)

可解釋性分析

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
#特征重要性圖
shap.summary_plot(shap_values[1], X_test, plot_type="bar")
#蜂群圖
shap.summary_plot(shap_values[1], X_test)

@浙大疏錦行

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

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

相關文章

mac .zshrc:1: command not found: 0 解決方案

nano ~/.zshrc 使用自帶的nano命令打開文件,修改后 Ctrl X 然后輸入y 然后回車即可保存成功 一般情況下,不是常用這個命令,除非是遇到有問題的文件,才用, 例如 遇到下面的問題 /Users/xxli/.zshrc:1: command no…

uniapp生成的app,關于跟其他設備通信的支持和限制

以下內容通過AI生成,這里做一下記錄。 藍牙 移動應用(App)通過藍牙與其他設備通信,是通過分層協作實現的。 一、通信架構分層 應用層(App) 調用操作系統提供的藍牙API(如Android的BluetoothA…

第50天-使用Python+Qt+DeepSeek開發AI運勢測算

1. 環境準備 bash 復制 下載 pip install pyside6 requests python-dotenv 2. 獲取DeepSeek API密鑰 訪問DeepSeek官網注冊賬號 進入控制臺創建API密鑰 在項目根目錄創建.env文件: env 復制 下載 DEEPSEEK_API_KEY=your_api_key_here 3. 創建主應用框架 python 復制…

上位機與Hid設備通信

前置知識 什么是HID? HID(Human Interface Device)是?直接與人交互的電子設備?,通過標準化協議實現用戶與計算機或其他設備的通信,典型代表包括鍵盤、鼠標、游戲手柄等。? 為什么HID要與qt進行通信? …

JVM 工具實戰指南(jmap / jstack / Arthas / MAT)

🔍 從診斷到定位:掌握生產級 JVM 排查工具鏈 📖 前言:系統故障時,如何快速定位? 無論 JVM 理論多么扎實,當線上服務出現 CPU 飆高、響應超時、內存泄漏或頻繁 Full GC 時,僅靠猜測…

mac上安裝 Rust 開發環境

1.你可以按照提示在終端中執行以下命令(安全、官方支持): curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh然后按提示繼續安裝即可。 注意:安裝過程中建議選擇默認配置(按 1 即可)。 如果遇…

C++(5)switch語句 循環while

這是一個電影評分的程序 default 就是 如果上述的都沒有執行 就統一的執行default的內容。 然后記得break ___________________________________ 循環 (while) while的使用方式 輸出 0-9的while循環

[Linux] Linux線程信號的原理與應用

Linux線程信號的原理與應用 文章目錄 Linux線程信號的原理與應用**關鍵詞****第一章 理論綜述****第二章 研究方法**1. **實驗設計**1.1 構建多線程測試環境1.2 信號掩碼策略對比實驗 2. **數據來源**2.1 內核源碼分析2.2 用戶態API調用日志與性能監控 **第三章 Linux信號的用法…

25.5.20學習總結

做題思路 數列分段 Section IIhttps://www.luogu.com.cn/problem/P1182正如題目所說,我們需要得到一個最小的最大段的值,可能有人將注意力放在分段上,事實上,我們更多的應該關注結果。這是一道二分答案的題,你可以先確…

Python爬蟲-爬取百度指數之人群興趣分布數據,進行數據分析

前言 本文是該專欄的第56篇,后面會持續分享python爬蟲干貨知識,記得關注。 在本專欄之前的文章《Python爬蟲-爬取百度指數之需求圖譜近一年數據》中,筆者有詳細介紹過爬取需求圖譜的數據教程。 而本文,筆者將再以百度指數為例子,基于Python爬蟲獲取指定關鍵詞的人群“興…

【工具使用】STM32CubeMX-USB配置-實現U盤功能

一、概述 無論是新手還是大佬,基于STM32單片機的開發,使用STM32CubeMX都是可以極大提升開發效率的,并且其界面化的開發,也大大降低了新手對STM32單片機的開發門檻。 ????本文主要講述STM32芯片USB功能的配置及其相關知識。 二…

從ISO17025合規到信創適配 解密質檢lims系統實驗室的 AI 質檢全鏈路實踐

在北京某國家級質檢中心的 CMA 復評審現場,審核專家通過系統后臺調取近半年的檢測記錄,從樣品登記時的電子簽名到報告簽發的 CA 簽章,178 項合規指標全部自動校驗通過 —— 這是白碼質檢 LIMS 系統創造的合規奇跡。 一、智能合規引擎&#xf…

【操作系統】進程同步問題——生產者-消費者問題

問題描述 生產者進程負責生產產品,并將產品存入緩沖池,消費者進程則從緩沖池中取出產品進行消費。為實現生產者和消費者的并發執行,系統在兩者之間設置了一個包含n個緩沖區的緩沖池。生產者將產品放入緩沖區,消費者則從緩沖區中取…

SpringBoot-6-在IDEA中配置SpringBoot的Web開發測試環境

文章目錄 1 環境配置1.1 JDK1.2 Maven安裝配置1.2.1 安裝1.2.2 配置1.3 Tomcat1.4 IDEA項目配置1.4.1 配置maven1.4.2 配置File Encodings1.4.3 配置Java Compiler1.4.4 配置Tomcat插件2 Web開發環境2.1 項目的POM文件2.2 項目的主啟動類2.3 打包為jar或war2.4 訪問測試3 附錄3…

Vue3 父子組件傳值, 跨組件傳值,傳函數

目錄 1.父組件向子組件傳值 1.1 步驟 1.2 格式 2. 子組件向父組件傳值 1.1 步驟 1.2 格式 3. 跨組件傳值 運行 4. 跨組件傳函數 ?5. 總結 1. 父傳子 2. 子傳父 3. 跨組件傳值(函數) 1.父組件向子組件傳值 1.1 步驟 在父組件中引入子組件 在子組件標簽中自定義屬…

嵌入式學習筆記 - STM32 U(S)ART 模塊HAL 庫函數總結

一 串口發送方式: ①輪訓方式發送,也就是主動發送,這個容易理解,使用如下函數: HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout); ②中斷方式發送&#xff…

AI無法解決的Bug系列(一)跨時區日期過濾問題

跨時區開發中,React Native如何處理新西蘭的日期過濾問題 有些Bug,不是你寫錯代碼,而是現實太魔幻。 比如我最近給新西蘭客戶開發一個React Native應用,功能非常樸素:用戶選一個日期范圍,系統返回該范圍內…

基于天貓 API 的高效商品詳情頁實時數據接入方法解析

一、引言 在電商大數據分析、競品監控及智能選品等場景中,實時獲取天貓商品詳情頁數據是關鍵需求。本文將詳細解析通過天貓開放平臺 API 高效接入商品詳情數據的技術方案,涵蓋接口申請、數據獲取邏輯及代碼實現,幫助開發者快速構建實時數據采…

系分論文《論遺產系統演化》

系統分析師論文范文系列 摘要 2022年6月,某金融機構啟動核心業務系統的技術升級項目,旨在對其運行超過十年的遺留系統進行演化改造。該系統承擔著賬戶管理、支付結算等關鍵業務功能,但其技術架構陳舊、擴展性不足,難以適應數字化轉型與業務快速增長的需求。作為系統分析師,…

Spark Core基礎與源碼剖析全景手冊

Spark Core基礎與源碼剖析全景手冊 Spark作為大數據領域的明星計算引擎,其核心原理、源碼實現與調優方法一直是面試和實戰中的高頻考點。本文將系統梳理Spark Core與Hadoop生態的關系、經典案例、聚合與分區優化、算子底層原理、集群架構和源碼剖析,結合…