尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

DAY18 机器学习

DAY18 机器学习
📅 发布时间:2026/6/20 17:29:11
# 导入必要库(补充回归任务所需库,删除分类模型相关库) import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.tree import DecisionTreeRegressor from sklearn.ensemble import RandomForestRegressor from xgboost import XGBRegressor from lightgbm import LGBMRegressor from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error import warnings warnings.filterwarnings('ignore') # 忽略无关警告 # ---------------------- 1. 加载数据并查看原始结构 ---------------------- # 读取CSV文件(确保本地路径正确) df = pd.read_csv(r'C:\Users\asus1\Desktop\PythonStudy\housing.csv') print("=== 原始数据验证 ===") print(f"数据形状: {df.shape}") # 应输出 (20640, 10),确认数据加载成功 print(f"目标变量(房价)范围: {df['median_house_value'].min():.0f} - {df['median_house_value'].max():.0f} 美元") # ---------------------- 2. 标签翻译(英文特征名→中文) ---------------------- column_mapping = { 'longitude': '经度', 'latitude': '纬度', 'housing_median_age': '房屋年龄中位数', 'total_rooms': '总房间数', 'total_bedrooms': '总卧室数', 'population': '人口数', 'households': '家庭数', 'median_income': '收入中位数', 'median_house_value': '房屋价值中位数', # 回归任务的目标变量(连续值) 'ocean_proximity': '海洋 proximity' # 补充原代码遗漏的分类特征列 } df_cn = df.rename(columns=column_mapping) # 中文列名数据集 # ---------------------- 3. 数据预处理(缺失值+分类特征编码+分离特征/目标) ---------------------- print("\n=== 数据预处理 ===") # 3.1 处理缺失值(用中位数填充数值型缺失值) for col in df_cn.select_dtypes(include=['int', 'float']).columns: if df_cn[col].isnull().sum() > 0: median_val = df_cn[col].median() df_cn[col] = df_cn[col].fillna(median_val) print(f"{col} 缺失值已用中位数 {median_val:.2f} 填补") # 3.2 处理分类特征(ocean_proximity为字符串,需独热编码) df_cn = pd.get_dummies(df_cn, columns=['海洋 proximity'], drop_first=True) print(f"独热编码后数据形状: {df_cn.shape}") # 特征列数增加,确认编码成功 # 3.3 分离特征(X)和目标变量(y) X = df_cn.drop(columns=['房屋价值中位数']) # 所有特征(含编码后的分类特征) y = df_cn['房屋价值中位数'] # 目标变量(连续值,回归任务) # 3.4 划分训练集和测试集(避免数据泄露) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=42 # 测试集20%,固定随机种子 ) print(f"训练集形状: {X_train.shape}, 测试集形状: {X_test.shape}") # ---------------------- 4. 特征标准化(仅对数值型特征,避免分类特征受影响) ---------------------- # 筛选数值型特征列(排除独热编码后的分类特征) numeric_features = ['经度', '纬度', '房屋年龄中位数', '总房间数', '总卧室数', '人口数', '家庭数', '收入中位数'] X_train_numeric = X_train[numeric_features] X_test_numeric = X_test[numeric_features] # 标准化(仅用训练集拟合) scaler = StandardScaler() X_train_numeric_norm = scaler.fit_transform(X_train_numeric) X_test_numeric_norm = scaler.transform(X_test_numeric) # 重组特征矩阵(标准化后的数值特征 + 独热编码的分类特征) X_train_norm = np.hstack([X_train_numeric_norm, X_train.drop(columns=numeric_features).values]) X_test_norm = np.hstack([X_test_numeric_norm, X_test.drop(columns=numeric_features).values]) # 恢复DataFrame格式(方便后续查看,可选) X_train_norm_df = pd.DataFrame( X_train_norm, columns=X.columns, index=X_train.index ) print(f"\n标准化后训练集特征均值范围: [{X_train_norm_df.mean().min():.4f}, {X_train_norm_df.mean().max():.4f}]") # 验证标准化效果(均值接近0) # ---------------------- 5. 回归模型训练与评估(核心修正:替换分类模型为回归模型) ---------------------- # 定义回归模型字典(删除SVM、KNN分类器等,改用回归模型) regressors = { '线性回归': LinearRegression(), '决策树回归': DecisionTreeRegressor(random_state=42), '随机森林回归': RandomForestRegressor(random_state=42, n_estimators=100), 'XGBoost回归': XGBRegressor(random_state=42, eval_metric='rmse'), 'LightGBM回归': LGBMRegressor(random_state=42, n_estimators=100) } # 存储结果的列表和字典 results = [] preds_dict = {} # 存储各模型预测结果,便于后续分析 print("\n=== 模型训练与评估 ===") for name, model in regressors.items(): # A. 训练模型(用标准化后的训练集) model.fit(X_train_norm, y_train) # B. 预测(测试集) y_pred = model.predict(X_test_norm) preds_dict[name] = y_pred # 存储预测结果 # C. 计算回归任务核心指标(删除分类指标如accuracy、precision) r2 = r2_score(y_test, y_pred) # 决定系数(越接近1越好) mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) # 均方根误差(越小越好,单位:美元) mae = mean_absolute_error(y_test, y_pred) # 平均绝对误差(越小越好) # D. 记录结果 results.append({ "模型名称": name, "R²(决定系数)": round(r2, 4), "RMSE(美元)": round(rmse, 2), "MAE(美元)": round(mae, 2) }) print(f"{name} 训练完成 | R²: {r2:.4f} | RMSE: {rmse:.2f} 美元") # ---------------------- 6. 展示模型性能排行榜(按R²降序排列) ---------------------- results_df = pd.DataFrame(results).sort_values(by="R²(决定系数)", ascending=False) print("\n" + "="*50) print(" 加州房价回归模型性能排行榜") print("="*50) print(results_df.to_string(index=False)) # 打印格式化表格

相关新闻

  • a星学习记录 通过父节点从目的地格子坐标回溯起点
  • jd.item_review获取京东商品评论 及tb.item_review获取taobao商品评论
  • Cursor AI 安装与初始配置:30 分钟快速上手(2025 年 12 月最新版)

最新新闻

  • 影刀RPA子流程设计:让复杂流程变清晰
  • 2026年阿里云618 Hermes Agent/OpenClaw配置Token Plan详细步骤一文讲清
  • 2026年6月脉冲除尘滚振清理筛供货厂家怎么选择,脉冲除尘滚振清理筛/滚振组合清理筛,脉冲除尘滚振清理筛制造企业哪家专业 - 品牌推荐师
  • 2026年6月最新格拉苏蒂中国官方售后电话热线网点地址客服服务 - 亨得利官方服务中心
  • Windows风扇控制神器FanControl:5分钟打造静音高效散热系统
  • PIC17CXX外部SRAM接口设计:时序计算、硬件连接与调试实战

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号