基于Python的房屋信息可视化及价格预测系统开发实践与避坑指南

📅 发布时间:2026/10/12 22:28:46
基于Python的房屋信息可视化及价格预测系统开发实践与避坑指南
简介一套基于Python的房屋信息可视化及价格预测系统完整项目包专为Python方向毕业设计、课程设计及自学练手准备目标是帮助开发者快速实现房屋数据的可视化展示与价格预测功能。项目技术栈围绕Python 3.7/3.8展开开发环境为PyCharm数据库采用MySQL并整合了前端页面、后端逻辑与数据库脚本整体功能完善、界面清晰。压缩包共307个文件包含Python源码(.py)、前端页面(.html/.css/.js)、演示动图及截图(.gif/.png/.jpg)、数据文件(.csv/.sql)等类型配置文件和依赖说明也已放入包内总体积约10.07MB便于针对性地查看与部署。目前已有90人学习下载。交付内容覆盖完整项目源码、数据库脚本、软件工具与入门教程项目经过严格调试可运行可直接作为毕业设计或课程设计的方案参考也可用于学习房屋数据分析和价格预测的完整流程。1. 基于 Python 的房屋信息可视化及价格预测系统毕设选题的真实性价比“基于 Python 的房屋信息可视化及价格预测系统”是计算机与大数据专业毕设选题里最高频题目之一。它不堆简单 CRUD也不纯跑算法一套系统要同时端平数据库、可视化与机器学习预测正好压中多数能力考核点。但做扎实比看起来费事——很多人拿到附源码、数据库、教程的包后直接起 Flask结果在数据清洗、图表空白、模型离谱三处反复返工。这套系统要解决的事很具体把零散房源数据变成数据库记录用图表展示区域均价与户型分布再训练回归模型给新房源估出参考单价。适合三类人想用毕设覆盖全链路的人想拿现成包做二次开发的人以及答辩时要把“为什么这么设计”讲清楚的人。下面按数据、可视化、预测、排错四条线讲常见方案与坑位。2. 房源数据从哪来字段设计、MySQL 建表与数据入库2.1 先定字段可视化要的维度就是模型要的特征做这套系统第一步不是写代码而是定字段。常见做法是抓链家或贝壳这类房产平台公开的二手房挂牌页少数人是直接拿网上整理好的城市房价 CSV。无论哪种来源字段清单都建议一次性定齐因为后面的表结构、可视化图表和特征工程全部由这份清单决定。我在做这类项目时一般只用这几个核心字段小区名称、所在区域板块、户型、建筑面积、朝向、楼层、装修情况、楼龄、挂牌总价、挂牌日期再加一个由总价和面积算出来的单价。字段不需要多但每个都有明确去处——区域板块用于地图聚合和柱状图统计户型与面积用于分布图楼龄与朝向进模型。字段类型设计有一个常见标准直接给一张参照表字段类型建议说明community 小区名称varchar(64)搜索与聚合展示district 区域varchar(32)可视化地图/柱状图的主维度layout 户型varchar(16)如 “3室2厅”后续用正则拆解area 建筑面积decimal(6,2)单位平米注意别用 floatorientation 朝向varchar(16)南/南北/东南/东等floor_level 楼层varchar(16)低/中/高类别特征decoration 装修varchar(16)毛坯/简装/精装age 楼龄int用当前年份减建成年份不要存建成年份total_price 挂牌总价decimal(10,2)单位万元unit_price 单价decimal(10,2)单位元/平米由总价与面积计算这张表在毕设里可以直接写进数据库设计文档。要留意一个容易踩的细节金额和面积都用 decimal不用 float。float 在 MySQL 里是近似存储多条记录累加后会有肉眼可见的误差答辩时被问到“为什么用 decimal”也更好答。楼龄建议直接存数值不要存“建于2008年”这种文本后面建模少做一步转换。字段定了清洗规则也能定下来。常见做法是先读进 pandas去掉总价或面积为空的记录把朝向、户型里的空格和全角字符统一再计算单价。这一步做完才有干净的 CSV 往数据库里灌。2.2 MySQL 建表字符集、引擎与修改结构的正确姿势房源数据的表结构并不复杂但建表语句里三个参数容易在文档和答辩时被追问字符集、引擎、主键设计。我一般用下面这组语句初始化CREATE DATABASE IF NOT EXISTS house_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; CREATE TABLE house_info ( id INT AUTO_INCREMENT PRIMARY KEY, community VARCHAR(64) NOT NULL COMMENT 小区名称, district VARCHAR(32) NOT NULL COMMENT 所在区域, layout VARCHAR(16) COMMENT 户型如3室2厅, area DECIMAL(6,2) NOT NULL COMMENT 建筑面积(平米), orientation VARCHAR(16) COMMENT 朝向, floor_level VARCHAR(16) COMMENT 楼层, decoration VARCHAR(16) COMMENT 装修情况, age INT COMMENT 楼龄(年), total_price DECIMAL(10,2) COMMENT 挂牌总价(万), unit_price DECIMAL(10,2) COMMENT 单价(元/平米), listed_date DATE COMMENT 挂牌日期, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT房源信息表;字符集选 utf8mb4 而不是 utf8是因为房屋数据里经常混着生僻小区名和特殊符号utf8mb4 是 MySQL 当前最稳的中文方案引擎选 InnoDB保证写入时的事务一致性答辩时也不会被问倒。id 用自增主键就够了毕设数据量没有到需要分布式 ID 的程度加一个自增主键能让增删改查和关联都省事。建表之后改结构是高频操作典型场景是“我想在表里加一列房屋朝向代码”。直接用 ALTER TABLE 即可不需要重建表注意每条 ALTER 会锁表毕设数据量小无感但如果真导入了十几万条数据批量修改结构要挑低峰时段执行。这属于数据库文档里可以写一笔的运维意识。ALTER TABLE house_info ADD COLUMN orient_code INT COMMENT 朝向编码0南最优;2.3 数据入库与增删改查pandas 清洗后批量写入CSV 导入数据库最常见且稳定的一条路是 pandas 加 SQLAlchemy。不要一条一条 INSERT几百条可以忍受几千条以上既慢又容易被中断。下面这套代码我每次都在用唯一要改的是连接串里的用户名密码和库名import pandas as pd from sqlalchemy import create_engine engine create_engine( mysqlpymysql://root:123456localhost:3306/house_db?charsetutf8mb4 ) df pd.read_csv(house_data.csv, encodingutf-8-sig) df df.dropna(subset[area, total_price]) # 单价由总价与面积计算总价单位是万换算成元/平米 df[unit_price] (df[total_price] * 10000 / df[area]).round(2) df[age] df[age].fillna(0).astype(int) df[layout] df[layout].str.replace( , ) df.to_sql(house_info, engine, if_existsappend, indexFalse)这段代码的关键点在三个参数encoding 用 utf-8-sig 而不是 utf-8因为很多 CSV 带 BOM 头直接用 utf-8 读首列会多一个不可见字符dropna 剔除面积或总价为空的记录这是后续一切分析的地基to_sql 的 if_existsappend 表示追加写入重复运行不会覆盖旧数据。如果想把历史数据全部重灌再改成 replace。数据库增删改查在毕设答辩中经常被追问但可视化页面本身是只读的。我一般会在 Flask 里留一个管理员维护页面提供新增房源、修改价格、删除记录三个接口本质上就是 INSERT、UPDATE、DELETE 三条 SQL前端用表单触发。这个设计不复杂却能正面回应“系统是否闭环”的提问。2.4 可视化大屏的数据接口聚合 SQL 才是关键很多初学者会把整张表 SELECT 到后端再往 JSON 里塞前端 ECharts 拿全部明细去绘制。这在几千条数据时还能用到了几万条就会明显卡顿。可视化大屏的正路是后端先做聚合把一两百条聚合结果交给前端页面秒开逻辑也更清晰。最常见的聚合维度是区域均价和面积段分布。我用 Flask 加 SQLAlchemy 写这类接口app.route(/api/district_stats) def district_stats(): sql text( SELECT district, COUNT(*) AS cnt, ROUND(AVG(unit_price), 2) AS avg_price FROM house_info GROUP BY district ORDER BY cnt DESC ) rows db.session.execute(sql).fetchall() return jsonify([dict(row._mapping) for row in rows])这条 SQL 的写法有几个讲究。GROUP BY district 把同区域的房源聚成一条AVG 是区域均价这是大屏上最核心的指标ORDER BY cnt DESC 让房源多的区域排在前面图表排序稳定。接口返回的是列表对象而不是 DataFrame前端拿到后直接映射到 xAxis 和 series。最后注意 row._mapping 的写法SQLAlchemy 2.x 用 _mapping 转字典1.x 用 _asdict如果你的环境报错优先检查 SQLAlchemy 大版本。到这里数据层的链路就通了CSV 进 pandaspandas 进 MySQLMySQL 经聚合 SQL 出接口接口被 ECharts 消费。这套“后端给聚合结果、前端只负责渲染”的数据契约也是企业级数据可视化里前后端协作最常见的约定。3. 价格预测怎么做活特征工程、模型对比与评估指标3.1 先定预测目标为什么不预测总价而预测单价价格预测最容易犯的第一个错是把挂牌总价当作标签。总价等于单价乘以面积面积本身就是特征模型学到“面积大总价高”这个线性关系后评估指标会虚高但换个 5 平米的极小户型预测就崩了。把标签换成单价模型学的是房屋本身的“质”更符合房价分析场景。在动手训练前先对标签做一次分布检查这一步很便宜但很多毕设跳过import pandas as pd df pd.read_csv(house_cleaned.csv) print(df[unit_price].describe()) print(df[unit_price].skew())skew 偏度是这里的关键参数。如果偏度大于 1说明少量豪宅把分布拉成了长尾常见处理是取对数后用 np.log1p 做标签预测后再用 np.expm1 还原。毕设数据如果来自普通城区单价多数集中在每平米 5000 到 30000 之间直接用原值也能训练但我建议在文档里写一句“检查过偏度、决定是否做对数变换”这比多调一版模型更能体现你对问题的理解。房价是典型的“地段决定论”数据区域信息权重极高其次是面积和户型再往后是楼龄、朝向和装修。这个排序本身就是答辩时可以讲的故事。3.2 特征工程把文本字段变成模型能吃的数值拿到手的数据里全是“3室2厅”“南北”“精装”这种文本模型不认识。我一般把特征拆成两组连续特征直接进模型类别特征做编码。import pandas as pd df pd.read_csv(house_cleaned.csv) # 户型字段用正则拆出室和厅兼容 3室2厅1卫 这类变体 df[rooms] df[layout].str.extract(r(\d)室).astype(float) df[halls] df[layout].str.extract(r(\d)厅).astype(float) # 朝向做有序编码南向采光最好数字越小代表朝向越优 orientation_map {南: 0, 南北: 1, 东南: 2, 东: 3, 西南: 4, 西: 5, 北: 6, 未知: 7} df[orient_code] df[orientation].map(orientation_map).fillna(7) # 区域做 One-Hot区域是强特征必须展开 district_dummies pd.get_dummies(df[district], prefixdist) df pd.concat([df, district_dummies], axis1) feature_cols [area, rooms, halls, age, orient_code] list(district_dummies.columns) X df[feature_cols].fillna(0) y df[unit_price] print(X.shape, y.shape)这里的三个细节值得展开。正则提取室和厅匹配 “\d” 是因为数据里有的写 “3室2厅”有的写 “3室2厅1卫”只取数字最稳照片字段拆到一半遇到 “3 室 2 厅” 这种带空格格式正则也是兼容的。朝向编码我没有做 One-Hot而是按采光优劣排了序因为南、南北、东南之间本身有近似的价格梯度用有序编码能保住这个信息。区域用的是 One-Hot 而非 LabelEncoder原因是区域属于名义类别“朝阳区”和“海淀区”之间没有大小关系LabelEncoder 会给它们编出 0、1、2 这种带顺序的含义模型会乱学。生成的新列名都是 “dist_朝阳区” 这种前缀格式后面预测接口要用同样的前缀对齐特征。3.3 模型选择与参数底线线性回归、随机森林与 XGBoost价格预测在毕设里的标准答案是一个回归模型。我一般拿三个模型做基线对比线性回归用于打底随机森林用于非线性拟合XGBoost 用于冲精度。同一样本、同样的训练测试切分下三个模型的结果差多少直接写进论文对比表。from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.ensemble import RandomForestRegressor from xgboost import XGBRegressor from sklearn.metrics import r2_score, mean_absolute_error X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42 ) models { linear: LinearRegression(), random_forest: RandomForestRegressor( n_estimators200, max_depth12, random_state42 ), xgboost: XGBRegressor( n_estimators300, max_depth6, learning_rate0.05, random_state42 ), } for name, model in models.items(): model.fit(X_train, y_train) pred model.predict(X_test) print(f{name}: R2{r2_score(y_test, pred):.4f}, fMAE{mean_absolute_error(y_test, pred):.1f})训练参数里我固定了几个底线值。random_state42 是为了结果可复现答辩时你现场重跑和论文里的数字要能对得上随机森林的 n_estimators 200 足够收敛max_depth 12 是防止过拟合的一个中间档XGBoost 把 learning_rate 放到 0.05配合 300 棵树精度比大学习率更稳。三个模型的定位和取舍我常用这张表说明模型优点缺点典型适用区间线性回归训练快、可解释性强拟合不了价格非线性基线对比与特征筛选随机森林非线性拟合好几乎不用调参容易过拟合对极端值敏感默认主力XGBoost精度天花板更高参数多调参有玄学成分最终冲精度在几千条城区二手房数据上R² 大致落在线性回归 0.6 到 0.75、随机森林 0.8 到 0.9、XGBoost 0.85 到 0.93 这个区间。如果数据只有两三百条任何模型都难超过 0.7这时别再死磕模型回去补数据。凡是网上声称房价预测 R² 0.99 的基本是把面积当标签或者数据泄露了。3.4 模型保存与训练记录答辩现场不重训训练完成后把模型和特征名列表同时保存。这是我看过最多人漏掉的步骤答辩时现场跑预测接口如果每次启动都重新训练等待时间长不说换个环境数据一变结果就漂。import joblib final_model models[xgboost] final_model.fit(X, y) joblib.dump(final_model, models/xgb_price.pkl) joblib.dump(feature_cols, models/feature_names.pkl)joblib 是 sklearn 自带序列化方案比 pickle 更稳定。保存 feature_names 列表非常关键预测接口要用完全相同的列顺序去组装输入多一列少一列或者顺序不同XGBoost 会直接报错或给出错误结果。模型文件、特征名单和其他源码放一起才是完整交付物。4. 从源码包到可演示系统项目结构、Flask 接口与页面串讲4.1 拿到毕设源码包先看这四个位置这类“附源码、数据库、教程”的打包项目中最常见的技术栈是 Flask 或 Django 做后端、MySQL 存数据、ECharts 渲染可视化、sklearn 系模型做预测。拿到压缩包不要急着点运行先按下面这份目录结构找关键文件house_price_system/ ├── app.py # Flask 主入口路由全在这 ├── models/ │ ├── train.py # 特征工程与模型训练 │ └── xgb_price.pkl # 训练好的模型文件 ├── database/ │ ├── house_db.sql # 建库建表脚本 │ └── init_data.sql # 初始化数据 ├── data/ # 原始 CSV 或爬虫脚本 ├── static/ │ ├── echarts.min.js # 前端可视化库 │ └── style.css ├── templates/ │ ├── index.html # 可视化大屏页 │ └── predict.html # 价格预测表单页 └── requirements.txt # Python 依赖清单先看 requirements.txt 能快速判断技术栈再看 database 下的 SQL 文件能知道数据表结构和你需要导入哪些初始化数据接着看 models 目录有没有已保存的模型文件有就不需要重训最后才是 app.py。我见过太多人一上来就双击运行结果缺包、缺库、模型没训练三连报错。4.2 Flask 后端最小闭环数据库连接与预测接口不管源码包用 Flask 还是别的框架价格预测接口的逻辑都是一套接收前端传来的房源参数拼接成和训练时一致的特征向量调用模型 predict返回预测单价。from flask import Flask, request, jsonify import joblib import pandas as pd app Flask(__name__) model joblib.load(models/xgb_price.pkl) feature_names joblib.load(models/feature_names.pkl) app.route(/api/predict, methods[POST]) def predict(): data request.get_json() row { area: float(data[area]), rooms: int(data[rooms]), halls: int(data[halls]), age: int(data[age]), orient_code: int(data[orient_code]), } # 把区域 One-Hot 展开未出现的区域全部置 0 for col in feature_names: if col.startswith(dist_): row[col] 1 if col fdist_{data[district]} else 0 df pd.DataFrame([row]).reindex(columnsfeature_names, fill_value0) pred model.predict(df)[0] return jsonify({predicted_unit_price: round(float(pred), 2)})这里的 reindex 是核心防线。训练集里的特征名列表可能有三四十列前端只传了 area、district 等几个原始值后端要用 feature_names 把所有列补齐reindex 保证列顺序完全一致。fill_value0 处理的是“前端传了一个训练集里没有的区域”这类新情况比如训练数据只有北京四个区用户选了通州就用全 0 向量过模型结果不一定准但接口不会崩。4.3 ECharts 数据可视化大屏页面的图表配置与接口对接可视化大屏是这套系统的门面。常见做法是 index.html 里放三张主图区域均价柱状图、户型分布饼图、面积与单价散点图数据全部来自上一章的聚合接口。ECharts 引入可直接用本地 echarts.min.js避免答辩现场教室断网导致图表空白。fetch(/api/district_stats) .then(res res.json()) .then(rows { const chart echarts.init(document.getElementById(districtChart)); chart.setOption({ tooltip: { trigger: axis }, grid: { left: 80, right: 30, top: 40, bottom: 60 }, xAxis: { type: category, data: rows.map(r r.district), axisLabel: { rotate: 30 } }, yAxis: { type: value, name: 均价(元/平米) }, series: [{ type: bar, data: rows.map(r r.avg_price), itemStyle: { color: #3b82f6 }, barMaxWidth: 36 }] }); });这段配置里的两个参数经常被忽略axisLabel.rotate 是区域名太长时避免文字重叠的关键不转 30 度五六个区域名就会挤成一团barMaxWidth 限制柱宽避免区域少时柱子粗得难看。tooltip 设为 axis 触发鼠标扫过柱子就能对比各区域价格演示效果比默认的 item 模式好。新手最容易翻车的不是配置而是 echarts.init 的容器高度。div 不设高度图表默认 0 高度页面上一片空白且没有任何报错。给图表容器加上 height: 400px 是前置条件比检查配置项优先级更高。4.4 本地跑通的最小动作依赖、数据库与路径三件事在项目目录下做完这三个动作最常见的环境问题基本能被扫平。第一安装依赖后单独验证 xgboost 是否可用pip install -r requirements.txt之后在 Python 里import xgboost很多环境装的是旧版或缺少底层库导入报错要在训练之前发现。第二启动前先连一次数据库用建表脚本执行source database/house_db.sql再跑一条 SELECT 确认表和数据都在。第三确认 Flask 的模板目录和静态目录指向正确Windows 下路径分隔符和文件编码都容易出问题。依赖清单建议保存成 requirements.txt包含 Flask、SQLAlchemy、PyMySQL、pandas、scikit-learn、xgboost 这些主体省略写死的小版本号否则在答辩机器上重新安装时容易发生版本冲突。数据库初始化脚本和源码放一起这是“附数据库”这份交付物里评委最在意的部分——数据库不是截图里的概念而是能导入、能查询、能重建的实体文件。5. 避坑与常见问题数据、图表与模型的五个高频坑位5.1 数据清洗顺序错了后面的模型全跟着遭殃现象导入数据库的行数看起来正常但训练 R² 极低或预测结果时好时坏更隐蔽的是区域均价柱状图里出现“单价 300000 元/平米”的孤立高柱。原因清洗顺序反了。常见错误是先把缺失值用均值填充再删除异常值均值被异常值污染后填充的值把错误放大另一类是把单价字段算在面积清洗之前面积改完后单价还是旧数。解决固定清洗顺序——先去重按小区面积总价三列去重再删异常面积为空、面积小于 5 平米、总价低于 10 万、单价高于 200000然后做缺失值填充建议用中位数而非均值房价长尾分布下中位数更稳最后算单价。每步打印一下行数变化数据清洗和排障一样要能看见消耗在哪里。5.2 ECharts 图表空白无报错先查容器高度再查接口格式现象页面能打开控制台没有任何报错但图表区域是空白或接口有数据但图不出来。原因两种情况占九成。一是 echarts.init 的 div 没有显式高度默认 0 高度二是后端返回的字段名和前端取的对不上比如后端返回 avg_price前端写 data.map(r r.avgPrice)页面同样沉默失败。解决先给容器写死 height: 400px刷新确认再用浏览器开发者工具看 Network 里接口的真实返回逐个 key 对字段名。前端字段映射是这套系统最容易静默出错的地方在 fetch 后面加一行 console.log(rows[0])能省掉一小时排查时间。5.3 预测出负房价或离谱大数字多半是特征对齐问题现象接口调用成功返回的 predicted_unit_price 是负数或者每平米几十万元明显超出数据分布范围。原因不是模型坏了是输入特征和训练时完全不一致。最常见的是训练时用了 One-Hot 区域列预测时没有补齐那几十列reindex 把它们全部置 0另一种是训练时用 log1p 处理过标签预测时忘了 expm1 还原导致结果在小数点附近漂移。解决在预测接口里打印 df 的形状与列名和 feature_names 逐一比对如果标签做过对数变换输出前做 np.expm1(pred)。这条坑最容易在答辩前夜踩到现在只要模型结果不对劲第一反应永远是检查数据形态而不是调参。5.4 MySQL 8 连接失败认证插件与连接串参数现象pymysql 报 Authentication plugin caching_sha2_password 不支持或 SQLAlchemy 在连接 MySQL 8 时抛出认证相关异常。原因MySQL 8 默认认证插件是 caching_sha2_password老版本 PyMySQL 不认另外连接串不指定字符集时中文数据读写也会在细节上出问题。解决连接串显式加 charsetutf8mb4并把 PyMySQL 升级到 1.x如果代码环境不方便升级就把该用户的认证方式改回 mysql_native_password。时区类异常则优先检查 SQLAlchemy 版本老版本对 MySQL 8 的日期时间处理兼容性较差升级后一般能解决。5.5 中文全链路乱码CSV、数据库与页面三处要统一现象前端图表里的区域名显示乱码或数据库查询出来是问号页面 HTML 没有出现预期中文。原因CSV 读取用 utf-8 而文件实际是 utf-8-sig数据库连接串漏了 charsetutf8mb4HTML 页面头缺 charset 声明。三处只要有一处不一致中文就断在那一环。解决固定一套组合——CSV 用 utf-8-sig 读取MySQL 库表用 utf8mb4连接串带 charsetutf8mb4HTML 的 写 。这套组合在 Windows 部署时也成立是我踩遍三端之后留下的固定搭配照着做基本不会再看乱码。6. 答辩前的小加项特征重要性、可解释性与验收三步6.1 用特征重要性把“黑匣子”讲成人话模型演示完评委几乎必问一句“你觉得什么因素最影响房价”与其现场支吾不如提前从模型里导出特征重要性。XGBoost 训练完直接取 feature_importances_和特征名列拼成一份排序Top5 通常跑不出面积、区域、楼龄这几个import joblib, pandas as pd model joblib.load(models/xgb_price.pkl) feature_names joblib.load(models/feature_names.pkl) importance pd.Series(model.feature_importances_, indexfeature_names) print(importance.sort_values(ascendingFalse).head(10))这段代码输出的结果可以直接截进论文也可以复制到演示页面的一个表格里。它比任何口头解释都有说服力因为这是从你训练出的模型里拿到的真实数字。6.2 让预测结果可解释特征重要性的可视化特征重要性做成一页图表比堆数字更有冲击力。用 ECharts 的水平柱状图展示 Top10yAxis 放特征名xAxis 放 importance 值颜色用大屏同一个主题色。答辩时讲一句话就够了面积和区域贡献了大部分预测能力朝向和装修影响较小但方向正确。6.3 演示前必须验证的三件事每次演示前我都会过一遍这三件事第一重新导入数据库脚本后页面图表能否正常出数验证的是数据库与接口的连通性第二预测接口传一组和训练集相似的数据结果是否落在合理区间验证模型文件与特征对齐第三拔掉网线后页面还在不在很多部署依赖 CDN 的 ECharts教室断网图表就全白。这三件过关演示现场基本不会翻车。做这套系统的人常把精力压在模型精度上但毕设评审更看重链路完整性和你对自己工程的熟悉程度。我给自己带的学生定的一条规矩是模型分数不是越高越好能把每个环节为什么这么做讲清楚才是这套题的验收线。希望帮到你。本文还有配套的精品资源点击获取