机器学习入门实战:Python 3.12 + scikit-learn 1.5 完成房价预测与分类任务

📅 2026/7/8 1:41:46
机器学习入门实战:Python 3.12 + scikit-learn 1.5 完成房价预测与分类任务
机器学习入门实战Python 3.12 scikit-learn 1.5 完成房价预测与分类任务1. 环境准备与工具链搭建工欲善其事必先利其器。在开始机器学习实战前我们需要配置高效的开发环境。以下是推荐的工具链组合# 验证Python版本 import sys print(fPython版本: {sys.version}) # 检查scikit-learn安装 try: import sklearn print(fscikit-learn版本: {sklearn.__version__}) except ImportError: print(scikit-learn未安装)核心工具选择依据Jupyter Notebook交互式开发的首选特别适合数据探索和模型调试Python 3.12最新稳定版带来的模式匹配等特性可提升代码可读性scikit-learn 1.5新增的HistGradientBoosting对大规模数据支持更好提示使用conda创建独立环境可避免依赖冲突conda create -n ml_env python3.12 conda activate ml_env pip install scikit-learn1.5.0 pandas matplotlib notebook2. 数据科学工作流全解析完整的机器学习项目遵循标准化流程我们以房价预测为例展示关键步骤2.1 数据加载与探索import pandas as pd from sklearn.datasets import fetch_california_housing # 加载加州房价数据集 housing fetch_california_housing(as_frameTrue) df housing.frame # 数据概览 print(f数据集形状: {df.shape}) print(\n前5行数据:) display(df.head()) # 统计摘要 print(\n数值特征统计:) display(df.describe())探索性分析技巧使用seaborn.pairplot()快速可视化特征间关系通过missingno矩阵识别缺失值模式计算特征与目标的Pearson相关系数2.2 特征工程实战特征处理是模型性能的关键决定因素from sklearn.preprocessing import StandardScaler from sklearn.compose import ColumnTransformer from sklearn.pipeline import Pipeline # 数值特征标准化 num_features [MedInc, HouseAge, AveRooms, AveBedrms, Population, AveOccup, Latitude, Longitude] num_transformer Pipeline(steps[ (scaler, StandardScaler()) ]) # 构建预处理管道 preprocessor ColumnTransformer( transformers[ (num, num_transformer, num_features) ]) # 应用转换 X df.drop(MedHouseVal, axis1) y df[MedHouseVal] X_preprocessed preprocessor.fit_transform(X)特征工程进阶技巧使用FeatureHasher处理高基数分类特征通过PolynomialFeatures创建交互特征应用TargetEncoder进行有监督编码3. 回归模型实战加州房价预测3.1 线性回归基础实现from sklearn.linear_model import LinearRegression from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error # 数据集划分 X_train, X_test, y_train, y_test train_test_split( X_preprocessed, y, test_size0.2, random_state42) # 模型训练与评估 lr LinearRegression() lr.fit(X_train, y_train) y_pred lr.predict(X_test) mse mean_squared_error(y_test, y_pred) print(f线性回归MSE: {mse:.4f}) print(f模型系数: {lr.coef_})3.2 集成方法对比from sklearn.ensemble import RandomForestRegressor, HistGradientBoostingRegressor models { 随机森林: RandomForestRegressor(n_estimators100, random_state42), 梯度提升: HistGradientBoostingRegressor(max_iter100, random_state42) } results {} for name, model in models.items(): model.fit(X_train, y_train) y_pred model.predict(X_test) mse mean_squared_error(y_test, y_pred) results[name] mse print(f{name} MSE: {mse:.4f})模型选择建议小数据集优先尝试线性模型和SVM中等数据随机森林和梯度提升树大数据使用HistGradientBoosting节省内存4. 分类任务实战乳腺癌检测4.1 数据准备与基线模型from sklearn.datasets import load_breast_cancer from sklearn.linear_model import LogisticRegression # 加载数据集 cancer load_breast_cancer() X cancer.data y cancer.target # 数据标准化 scaler StandardScaler() X_scaled scaler.fit_transform(X) # 逻辑回归模型 logreg LogisticRegression(max_iter1000) logreg.fit(X_scaled, y) # 特征重要性分析 importance pd.DataFrame({ feature: cancer.feature_names, coef: logreg.coef_[0] }).sort_values(coef, ascendingFalse) display(importance.head(10))4.2 模型评估与优化from sklearn.metrics import classification_report, roc_auc_score from sklearn.model_selection import cross_val_score # 交叉验证评估 scores cross_val_score(logreg, X_scaled, y, cv5, scoringroc_auc) print(fROC AUC平均得分: {scores.mean():.3f} (±{scores.std():.3f})) # 分类报告 y_pred logreg.predict(X_scaled) print(classification_report(y, y_pred, target_namescancer.target_names))性能提升技巧使用GridSearchCV进行超参数调优通过SMOTE处理类别不平衡尝试SelectFromModel进行特征选择5. 模型部署与生产化5.1 模型持久化方案import joblib from datetime import datetime # 保存预处理器和模型 model_assets { preprocessor: preprocessor, model: logreg, metadata: { version: 1.0, train_date: datetime.now().isoformat() } } joblib.dump(model_assets, breast_cancer_model.joblib) # 加载示例 loaded_assets joblib.load(breast_cancer_model.joblib)5.2 构建预测APIfrom fastapi import FastAPI import numpy as np app FastAPI() app.post(/predict) async def predict(features: list): 接收特征数组返回预测结果 X np.array(features).reshape(1, -1) X_processed loaded_assets[preprocessor].transform(X) proba loaded_assets[model].predict_proba(X_processed) return { prediction: int(loaded_assets[model].predict(X_processed)[0]), probability: float(proba[0][1]), model_version: loaded_assets[metadata][version] }生产环境建议使用MLflow进行全生命周期管理通过Prometheus监控模型性能定期进行数据漂移检测