文件的規范拆分和寫法
今日的示例代碼包含2個部分
- notebook文件夾內的ipynb文件,介紹下今天的思路
- 項目文件夾中其他部分:拆分后的信貸項目,學習下如何拆分的,未來你看到的很多大項目都是類似的拆分方法
知識點回顧:文件和項目管理
-
規范的文件命名
-
重要性:就像在餐廳中,每道菜都有一個清晰明確的名字,方便廚師和顧客識別。在編程中,規范的文件命名可以幫助開發者快速識別文件的用途和內容。
-
實踐:使用有意義的文件名,避免使用模糊的名稱如“document1”或“file2”。例如,將數據處理相關的文件命名為“data_processing.py”,將模型訓練相關的文件命名為“model_training.py”。
-
-
規范的文件夾管理
-
重要性:類似于餐廳中將食材、餐具、調料等分類存放,方便取用。在編程項目中,良好的文件夾管理有助于組織代碼和資源,提高項目的可維護性和可讀性。
-
實踐:創建合理的目錄結構,如將數據集放在“data”文件夾,模型保存在“models”文件夾,源代碼放在“src”文件夾等。
-
-
機器學習項目的拆分
-
重要性:就像大型的餐飲項目需要拆分成多個部分,由不同的團隊負責。機器學習項目通常較為復雜,拆分成多個模塊可以提高開發效率和代碼復用性。
-
實踐:將項目拆分為數據預處理、模型訓練、評估、部署等模塊,每個模塊負責特定的功能。
-
-
編碼格式和類型注解
-
重要性:就像餐廳有統一的菜譜格式和烹飪標準,編碼格式和類型注解有助于提高代碼的可讀性和可維護性。
-
實踐:遵循一致的編碼風格指南(如PEP 8),使用類型注解明確函數參數和返回值的類型。
-
作業:嘗試針對之前的心臟病項目ipynb,將他按照今天的示例項目整理成規范的形式,思考下哪些部分可以未來復用
項目結構初始化
mkdir -p heart-disease-project/data/{raw,processed}
mkdir -p heart-disease-project/models
mkdir -p heart-disease-project/src
touch heart-disease-project/config.py
touch heart-disease-project/README.md
touch heart-disease-project/requirements.txt
配置文件 config.py
# config.py
import os# 數據路徑
RAW_DATA_PATH = os.path.join("data", "raw", "heart_disease.csv")
PROCESSED_DATA_PATH = os.path.join("data", "processed", "heart_data_processed.csv")# 模型路徑
MODEL_SAVE_PATH = os.path.join("models", "heart_model.pkl")# 超參數
TEST_SIZE = 0.2
RANDOM_STATE = 42
數據處理模塊 src/data_processing.py
# src/data_processing.py
import pandas as pd
from sklearn.model_selection import train_test_split
from config import RAW_DATA_PATH, PROCESSED_DATA_PATHdef load_and_preprocess_data():# 加載原始數據df = pd.read_csv(RAW_DATA_PATH)# 處理缺失值(示例:填充均值)df.fillna(df.mean(), inplace=True)# 特征與標簽分離X = df.drop("target", axis=1)y = df["target"]# 劃分訓練集和測試集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 保存預處理后的數據processed_data = {"X_train": X_train,"X_test": X_test,"y_train": y_train,"y_test": y_test,}pd.to_pickle(processed_data, PROCESSED_DATA_PATH)return processed_data
模型訓練模塊 src/model_training.py
# src/model_training.py
import joblib
from sklearn.ensemble import RandomForestClassifier
from config import MODEL_SAVE_PATH
from src.data_processing import load_and_preprocess_datadef train_model():# 加載預處理后的數據data = pd.read_pickle(config.PROCESSED_DATA_PATH)X_train, y_train = data["X_train"], data["y_train"]# 初始化模型model = RandomForestClassifier(n_estimators=100, random_state=42)# 訓練模型model.fit(X_train, y_train)# 保存模型joblib.dump(model, MODEL_SAVE_PATH)print(f"Model saved to {MODEL_SAVE_PATH}")
模型評估模塊 src/evaluation.py
# src/evaluation.py
import joblib
from sklearn.metrics import classification_report, roc_auc_score
from config import MODEL_SAVE_PATH, PROCESSED_DATA_PATHdef evaluate_model():# 加載模型和數據model = joblib.load(MODEL_SAVE_PATH)data = pd.read_pickle(PROCESSED_DATA_PATH)X_test, y_test = data["X_test"], data["y_test"]# 預測結果y_pred = model.predict(X_test)y_proba = model.predict_proba(X_test)[:, 1]# 輸出評估指標print("Classification Report:")print(classification_report(y_test, y_pred))print("ROC AUC Score:")print(roc_auc_score(y_test, y_proba))
工具函數 src/utils.py
# src/utils.py
import os
import loggingdef create_directory(path):"""確保目錄存在"""if not os.path.exists(path):os.makedirs(path)logging.info(f"Created directory: {path}")
依賴管理 requirements.txt
# requirements.txt
pandas
scikit-learn
joblib
項目運行流程
* 準備數據
將原始數據文件 heart_disease.csv 放入 data/raw/ 目錄。
* 運行數據處理python src/data_processing.py
* 訓練模型python src/model_training.py
* 評估模型python src/evaluation.py
@浙大疏錦行